src/Controller/AuthenticationController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use FOS\OAuthServerBundle\Model\ClientManagerInterface;
  9. use App\Entity\User;
  10. use App\Entity\Client;
  11. class AuthenticationController extends Controller
  12. {
  13.     /**
  14.      * Authorization flow route
  15.      * @Route("/2le-auth", name="2le-auth")
  16.      */
  17.     public function grantAuthorization(Request $requestClientManagerInterface $clientManager)
  18.     {
  19.         // To manually create a client:
  20.         // bin/console fos:oauth-server:create-client --redirect-uri="https://yourdomain.fr/your_check_path" --grant-type="token" --grant-type="authorization_code"
  21.         // Vérifications - pour que la cause des erreurs soit explicite
  22.         $client_id $request->query->get('client_id');
  23.         $redirect_uri urldecode($request->query->get('redirect_uri'));
  24.         $state $request->query->get('state');
  25.         if (!$client_id || !$redirect_uri || !$state) {
  26.             return $this->redirectError('connect.missing.parameters');
  27.         }
  28.         // public id = id_randomId -> we get the id
  29.         $client = ($this->getDoctrine()->getRepository(Client::class))->findOneBy(['id' => explode("_"$client_id)[0]]);
  30.         if (!$client) {
  31.             return $this->redirectError('connect.client.not_found');
  32.         }
  33.         if ($client->getClientId() !== $client_id) {
  34.             return $this->redirectError('connect.invalid.client');
  35.         }
  36.         if (!in_array($redirect_uri$client->getRedirectUris(), true)) {
  37.             return $this->redirectError("Redirection invalide. Vous avez fourni: " $redirect_uri);
  38.         }
  39.         //$request->getSession()->set('redirect_uri', $redirect_uri);
  40.         // Redirection si tout est bon
  41.         return $this->redirect($this->generateUrl('fos_oauth_server_authorize', array(
  42.           'client_id'     => $client_id,
  43.           'redirect_uri'  => $redirect_uri,
  44.           'response_type' => $request->query->get('response_type'),
  45.           'state' => $state,
  46.         )));
  47.     }
  48.     private function redirectError($error_message)
  49.     {
  50.         return $this->render("security/client-error.html.twig", ["error_message" => $error_message]);
  51.     }
  52.     /**
  53.      * User details - without password
  54.      * @Route("/user-details", name="user-details")
  55.      */
  56.      public function userDetails(Request $request)
  57.      {
  58.          $token $request->query->get('token');
  59.          if (!$token) {
  60.              return new JsonResponse("No token supplied");
  61.          }
  62.          $data $this->getDoctrine()->getRepository(User::class)->getUserDetails($this->getUser()->getId(), $token);
  63.          // If this JSON is empty, the token doesn't exist.
  64.          if ($data) {
  65.              return new JsonResponse($data);
  66.          } else {
  67.              return new JsonResponse("Token doesn't exist");
  68.          }
  69.      }
  70. }