feat(api): implémentation du service KazApiService et intégration dans le UserController #1
13
.env
13
.env
@@ -1,18 +1,9 @@
|
|||||||
###> symfony/framework-bundle ###
|
|
||||||
APP_ENV=dev
|
APP_ENV=dev
|
||||||
APP_SECRET=
|
APP_SECRET=
|
||||||
APP_SHARE_DIR=var/share
|
APP_SHARE_DIR=var/share
|
||||||
APP_VERSION=0.0.1
|
APP_VERSION=0.0.1
|
||||||
###< symfony/framework-bundle ###
|
|
||||||
|
|
||||||
###> doctrine/doctrine-bundle ###
|
|
||||||
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8"
|
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8"
|
||||||
###< doctrine/doctrine-bundle ###
|
|
||||||
|
|
||||||
###> symfony/mailer ###
|
|
||||||
MAILER_DSN="smtp://localhost:1025"
|
MAILER_DSN="smtp://localhost:1025"
|
||||||
###< symfony/mailer ###
|
|
||||||
|
|
||||||
###> symfony/routing ###
|
|
||||||
DEFAULT_URI="http://localhost:8000"
|
DEFAULT_URI="http://localhost:8000"
|
||||||
###< symfony/routing ###
|
KAZ_API_USER=
|
||||||
|
KAZ_API_PASSWORD=
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
# see https://symfony.com/doc/current/reference/configuration/framework.html
|
|
||||||
framework:
|
framework:
|
||||||
secret: '%env(APP_SECRET)%'
|
secret: '%env(APP_SECRET)%'
|
||||||
|
|
||||||
# Note that the session will be started ONLY if you read or write from it.
|
|
||||||
session: true
|
session: true
|
||||||
|
http_client:
|
||||||
|
scoped_clients:
|
||||||
|
kaz_api.client:
|
||||||
|
base_uri: '%env(KAZ_API_BASE_URL)%'
|
||||||
|
headers:
|
||||||
|
Accept: 'application/json'
|
||||||
|
|
||||||
#esi: true
|
# Section pour les tests
|
||||||
#fragments: true
|
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
framework:
|
framework:
|
||||||
test: true
|
test: true
|
||||||
|
|||||||
@@ -1,21 +1,14 @@
|
|||||||
# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json
|
|
||||||
|
|
||||||
# This file is the entry point to configure your own services.
|
|
||||||
# Files in the packages/ subdirectory configure your dependencies.
|
|
||||||
# See also https://symfony.com/doc/current/service_container/import.html
|
|
||||||
|
|
||||||
# Put parameters here that don't need to change on each machine where the app is deployed
|
|
||||||
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
|
|
||||||
services:
|
services:
|
||||||
# default configuration for services in *this* file
|
# configuration par défaut pour les services
|
||||||
_defaults:
|
_defaults:
|
||||||
autowire: true # Automatically injects dependencies in your services.
|
autowire: true # Injecte automatiquement les dépendances dans vos services.
|
||||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
autoconfigure: true # Enregistre automatiquement vos services en tant que commandes, abonnés d'événements, etc.
|
||||||
|
|
||||||
# makes classes in src/ available to be used as services
|
|
||||||
# this creates a service per class whose id is the fully-qualified class name
|
|
||||||
App\:
|
App\:
|
||||||
resource: '../src/'
|
resource: '../src/'
|
||||||
|
|
||||||
# add more service definitions when explicit configuration is needed
|
App\Service\KazApiClient:
|
||||||
# please note that last definitions always *replace* previous ones
|
arguments:
|
||||||
|
$kazApiClient: '@kaz_api.client'
|
||||||
|
$apiUser: '%env(KAZ_API_USER)%'
|
||||||
|
$apiPassword: '%env(KAZ_API_PASSWORD)%'
|
||||||
39
src/Controller/UserController.php
Normal file
39
src/Controller/UserController.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use App\Service\KazApiService;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
|
||||||
|
|
||||||
|
class UserController extends AbstractController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Permet de vérifier si un utilisateur existe dans le ldap.
|
||||||
|
*
|
||||||
|
* @param string $email L'adresse e-mail de l'utilisateur.
|
||||||
|
* @param KazApiService $apiClient Le service utilisé pour récupérer les données utilisateur.
|
||||||
|
*
|
||||||
|
* @return Response La page index utilisateur rendue.
|
||||||
|
* @throws ClientExceptionInterface
|
||||||
|
* @throws DecodingExceptionInterface
|
||||||
|
* @throws RedirectionExceptionInterface
|
||||||
|
* @throws ServerExceptionInterface
|
||||||
|
* @throws TransportExceptionInterface
|
||||||
|
*/
|
||||||
|
#[Route('/user/{email}')]
|
||||||
|
public function index(string $email, KazApiService $apiClient): Response
|
||||||
|
{
|
||||||
|
$exist = $apiClient->getUserData($email);
|
||||||
|
|
||||||
|
return $this->render('user/index.html.twig', [
|
||||||
|
'exist' => $exist,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
80
src/Service/KazApiService.php
Normal file
80
src/Service/KazApiService.php
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
|
||||||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
|
class KazApiService
|
||||||
|
{
|
||||||
|
private ?string $token = null;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
private readonly HttpClientInterface $kazApiClient,
|
||||||
|
private readonly string $apiUser,
|
||||||
|
private readonly string $apiPassword
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère le token JWT via l'authentification Basic
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws ClientExceptionInterface
|
||||||
|
* @throws DecodingExceptionInterface
|
||||||
|
* @throws RedirectionExceptionInterface
|
||||||
|
* @throws ServerExceptionInterface
|
||||||
|
* @throws TransportExceptionInterface
|
||||||
|
*/
|
||||||
|
private function getToken(): string
|
||||||
|
{
|
||||||
|
if ($this->token) {
|
||||||
|
return $this->token;
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $this->kazApiClient->request('POST', '/get_token', [
|
||||||
|
'auth_basic' => [$this->apiUser, $this->apiPassword]
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($response->getStatusCode() !== 200) {
|
||||||
|
throw new Exception('Impossible de récupérer le token JWT');
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $response->toArray();
|
||||||
|
$this->token = $data['token']; // Ajustez la clé selon le format de votre API
|
||||||
|
|
||||||
|
return $this->token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Permet de vérifier si un utilisateur existe dans le ldap.
|
||||||
|
*
|
||||||
|
* @param string $email L'adresse e-mail de l'utilisateur à rechercher.
|
||||||
|
*
|
||||||
|
* @return array Les données utilisateur renvoyées par l'API.
|
||||||
|
*
|
||||||
|
* @throws ClientExceptionInterface
|
||||||
|
* @throws DecodingExceptionInterface
|
||||||
|
* @throws RedirectionExceptionInterface
|
||||||
|
* @throws ServerExceptionInterface
|
||||||
|
* @throws TransportExceptionInterface
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function getUserData(string $email): array
|
||||||
|
{
|
||||||
|
$options['headers']['Authorization'] = 'Bearer ' . $this->getToken();
|
||||||
|
|
||||||
|
$response = $this->kazApiClient->request('GET', "/ldap/user/$email", $options);
|
||||||
|
|
||||||
|
if ($response->getStatusCode() !== 200) {
|
||||||
|
throw new Exception('Erreur lors de l\'appel API : ' . $response->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
2
templates/user/index.html.twig
Normal file
2
templates/user/index.html.twig
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{# templates/hellp.html.twig #}
|
||||||
|
<h1>Hello ! {{ name }}</h1>
|
||||||
Reference in New Issue
Block a user