src/AppBundle/Controller/ui/UserController.php line 51

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller\ui;
  3. use Psr\Container\ContainerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Psr\Log\LoggerInterface;
  9. use AppBundle\Service\HttpHelper;
  10. use AppBundle\CSPro\RolesRepository;
  11. use AppBundle\Security\UserVoter;
  12. use AppBundle\Service\PdoHelper;
  13. class UserController extends AbstractController implements TokenAuthenticatedController {
  14.     private $rolesRepository;
  15.     public function __construct(private HttpHelper $client, private PdoHelper $pdo, private LoggerInterface $logger) {
  16.         
  17.     }
  18.     //overrider the setcontainer to get access to container parameters and initiailize the roles repository
  19.     public function setContainer(ContainerInterface $container null): ?ContainerInterface {
  20.         $this->rolesRepository = new RolesRepository($this->pdo$this->logger);
  21.         return parent::setContainer($container);
  22.     }
  23.     #[Route('/users/'name'users'methods: ['GET'])]
  24.     public function viewUserListAction(Request $request): Response {
  25.         $this->denyAccessUnlessGranted(UserVoter::USERS_ALL);
  26.         $this->logger->debug('processing view user list');
  27.         //set the oauth token
  28.         $access_token $request->cookies->has('access_token') ? $request->cookies->get('access_token') : "";
  29.         $authHeader 'Bearer ' $access_token;
  30.         $response $this->client->request('GET''users'null, ['Authorization' => $authHeader'Accept' => 'application/json']);
  31.         //unauthorized or expired  redirect to logout page
  32.         if ($response->getStatusCode() == 401) {
  33.             return $this->redirectToRoute('logout');
  34.         }
  35.         $userlist json_decode($response->getBody(), null512JSON_THROW_ON_ERROR);
  36.         $rolesList $this->rolesRepository->getRoles();
  37.         return $this->render('users.twig', ['userlist' => $userlist"rolesList" => $rolesList]);
  38.     }
  39.     #[Route('/users/json'name'usersJson'methods: ['GET'])]
  40.     public function viewUserListJson(Request $request): Response {
  41.         // set client
  42.         //set the oauth token
  43.         $this->denyAccessUnlessGranted(UserVoter::USERS_ALL);
  44.         $access_token $request->cookies->has('access_token') ? $request->cookies->get('access_token') : "";
  45.         $start $request->get('start');
  46.         $length $request->get('length');
  47.         $draw = (int) $request->get('draw');
  48.         $search $request->get('search');
  49.         $order $request->get('order');
  50.         $orderColumn $order[0]['column'];
  51.         $orderDirection $order[0]['dir'];
  52.         // set authorization header
  53.         $authHeader 'Bearer ' $access_token;
  54.         $apiResponse $this->client->request('GET''users'null, ['Authorization' => $authHeader,
  55.             'Accept' => 'application/json',
  56.             'x-csw-user-start' => $start,
  57.             'x-csw-user-length' => $length,
  58.             'x-csw-user-search' => $search['value'],
  59.             'x-csw-user-order-column' => $orderColumn,
  60.             'x-csw-user-order-direction' => $orderDirection
  61.         ]);
  62.         //unauthorized or expired  redirect to logout page
  63.         if ($apiResponse->getStatusCode() == 401) {
  64.             return $this->redirectToRoute('logout');
  65.         }
  66.         $headers $apiResponse->getHeaders();
  67.         $userCount 0;
  68.         $usersFiltered 0;
  69.         //user count
  70.         if (array_key_exists('x-csw-user-count'$headers)) {
  71.             $temp $headers['x-csw-user-count'];
  72.             $userCount $temp[0];
  73.         } else
  74.             $userCount 0;
  75.         //users filtered
  76.         if (array_key_exists('x-csw-users-filtered'$headers)) {
  77.             $temp $headers['x-csw-users-filtered'];
  78.             $usersFiltered $temp[0];
  79.         } else
  80.             $usersFiltered 0;
  81.         $userlist json_decode($apiResponse->getBody(), null512JSON_THROW_ON_ERROR);
  82.         $rolesList $this->rolesRepository->getRoles();
  83.         $result = ["data" => $userlist"rolesList" => $rolesList"draw" => $draw"recordsTotal" => $userCount"recordsFiltered" => $usersFiltered];
  84.         $response = new Response(json_encode($resultJSON_THROW_ON_ERROR));
  85.         $response->headers->set('Content-Length'strlen($response->getContent()));
  86.         return $response;
  87.     }
  88.     #[Route('/users/'name'add'methods: ['POST'])]
  89.     public function addUserAction(Request $request): Response {
  90.         $maxScriptExecutionTime $this->getParameter('csweb_max_script_execution_time');
  91.         ini_set('max_execution_time'$maxScriptExecutionTime);
  92.         //set the oauth token
  93.         $access_token $request->cookies->has('access_token') ? $request->cookies->get('access_token') : "";
  94.         $authHeader 'Bearer ' $access_token;
  95.         //get the json user info to add
  96.         $body $request->getContent();
  97.         //call the rest api to  add the user        
  98.         $response $this->client->request('POST''users'$body, ['Authorization' => $authHeader'Content-Type' => 'application/json''Accept' => 'application/json''Time-Stamp' => $request->headers->get("TIME-STAMP")]);                       //unauthorized or expired  redirect to logout page
  99.         $this->logger->debug('**********addUserAction-UI status-code: ' $response->getStatusCode());
  100.         if ($response->getStatusCode() == 401) {
  101.             return $this->redirectToRoute('logout');
  102.         }
  103.         //create a symfony response object to return
  104.         $addUserResponse = new Response($response->getBody(), $response->getStatusCode());
  105.         $addUserResponse->headers->set('Content-Type'$response->getHeader('Content-Type'));
  106.         return $addUserResponse;
  107.     }
  108.     #[Route('/users/{username}'name'update'methods: ['PUT'])]
  109.     public function updateUserAction(Request $request$username): Response {
  110.         //set the oauth token
  111.         $access_token $request->cookies->has('access_token') ? $request->cookies->get('access_token') : "";
  112.         $authHeader 'Bearer ' $access_token;
  113.         //get the json user info to update 
  114.         $body $request->getContent();
  115.         //call the rest api to  update the user
  116.         $response $this->client->request('PUT''users/' $username$body, ['Authorization' => $authHeader]);
  117.         //unauthorized or expired  redirect to logout page
  118.         if ($response->getStatusCode() == 401) {
  119.             return $this->redirectToRoute('logout');
  120.         }
  121.         //create a symfony response object to return
  122.         $updateUserResponse = new Response($response->getBody(), $response->getStatusCode());
  123.         $updateUserResponse->headers->set('Content-Type'$response->getHeader('Content-Type'));
  124.         return $updateUserResponse;
  125.     }
  126.     #[Route('/users/{username}'name'delete'methods: ['DELETE'])]
  127.     public function deleteAction(Request $request$username): Response {
  128.         //set the oauth token
  129.         $access_token $request->cookies->has('access_token') ? $request->cookies->get('access_token') : "";
  130.         $authHeader 'Bearer ' $access_token;
  131.         //call the rest-api to delete the user
  132.         $response $this->client->request('DELETE''users/' $usernamenull, ['Authorization' => $authHeader'Accept' => 'application/json']);
  133.         //unauthorized or expired  redirect to logout page
  134.         if ($response->getStatusCode() == 401) {
  135.             return $this->redirectToRoute('logout');
  136.         }
  137.         //create the symfony response for the delete action
  138.         $deleteResponse = new Response($response->getBody(), $response->getStatusCode());
  139.         $deleteResponse->headers->set('Content-Type'$response->getHeader('Content-Type'));
  140.         return $deleteResponse;
  141.     }
  142. }