Commit 343747a7 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP Flux Autorisation d'inscription et Autorisation de diplomation

parent a0f3a207
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -6,6 +6,10 @@
        {
            "type": "composer",
            "url": "https://gest.unicaen.fr/packagist"
        },
        {
            "type": "git",
            "url": "https://github.com/bertrandgauthier/guzzle-jwt-middleware"
        }
    ],
    "require-dev": {
@@ -37,6 +41,8 @@

        "aws/aws-sdk-php": "^3.226",
        "beberlei/assert": "^3.0",
        "eljam/guzzle-jwt-middleware": "dev-main",
        "firebase/php-jwt": "^6.11",
        "doctrine/lexer": "^2.1",
        "guzzlehttp/guzzle": "^6.3 || ^7.0",
        "laminas/laminas-cache": "^3.0 || ^4.0",
@@ -54,14 +60,16 @@
        "webmozart/assert": "^1.3",

        "unicaen/alerte": "^3.2",
        "unicaen/api": "dev-master",
        "unicaen/app": "^6.3",
        "unicaen/auth-token": "^7.1",
        "unicaen/authentification": "^6.4",
        "unicaen/privilege": "^6.3.0",
        "unicaen/privilege": "^6.4",
        "unicaen/console": "^6.0",
        "unicaen/db-anonym": "^4.0",
        "unicaen/db-import": "^7.3",
        "unicaen/db-import": "dev-release_8.0.0",
        "unicaen/etat": "^6.0",
        "unicaen/evenement": "dev-release_6.4.0",
        "unicaen/faq": "^7.0",
        "unicaen/idref": "^2.0",
        "unicaen/ldap": "^6.0",
@@ -70,13 +78,15 @@
        "unicaen/multipage-form": "^2.1",
        "unicaen/parametre": "^6.0",
        "unicaen/pdf": "^7.0",
        "unicaen/renderer": "^7.2",
        "unicaen/pegase-coc-ext-api": "dev-master",
        "unicaen/renderer": "^8.1",
        "unicaen/search": "^1.1",
        "unicaen/sql": "^2.0",
        "unicaen/sygal-api": "dev-master",
        "unicaen/utilisateur": "^6.3",
        "unicaen/avis": "^1.1",
        "unicaen/exemple": "dev-master"
        "unicaen/exemple": "dev-master",
        "laminas/laminas-cli": "^1.11"
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
@@ -93,6 +103,8 @@
            "Formation\\": "module/Formation/src",
            "HDR\\": "module/HDR/src",
            "Candidat\\": "module/Candidat/src",
            "AutorisationInscriptionThese\\": "module/AutorisationInscriptionThese/src",
            "AutorisationDiplomationThese\\": "module/AutorisationDiplomationThese/src",
            "Import\\": "module/Import/src",
            "Indicateur\\": "module/Indicateur/src",
            "Individu\\": "module/Individu/src",
@@ -108,7 +120,9 @@
            "Substitution\\": "module/Substitution/src",
            "SygalApi\\": "vendor/unicaen/sygal-api/src",
            "These\\": "module/These/src",
            "Validation\\": "module/Validation/src"
            "UnicaenAvis\\": "module/UnicaenAvis/src",
            "Validation\\": "module/Validation/src",
            "Tx\\": "module/Tx/src"
        },
        "psr-4": {
            "SygalApiImpl\\": "module/SygalApiImpl/src"
+1048 −382

File changed.

Preview size limit exceeded, changes collapsed.

+8 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ return [
        'Laminas\ApiTools\Rpc',
        'Laminas\ApiTools\Versioning',
        'Laminas\Cache',
        'Laminas\Cache\Storage\Adapter\Memory',
        'Laminas\Cache\Storage\Adapter\Filesystem',
//        'Laminas\Cache\Storage\Adapter\Apcu',
        'Laminas\Filter',
@@ -53,6 +54,7 @@ return [
        'UnicaenLdap',
        'UnicaenDbAnonym',
        'UnicaenDbImport',
        'UnicaenEvenement',
        'UnicaenFaq',
        'UnicaenIdref',
        'UnicaenLivelog',
@@ -63,6 +65,8 @@ return [
        'UnicaenParametre',
        'UnicaenSearch',
        'UnicaenMultipageForm',
        'UnicaenApi',
        'UnicaenPegaseCocExtApi',
        'Feature',
        'Horodatage',
        'Structure',
@@ -75,6 +79,8 @@ return [
        'Retraitement',
        'Soutenance',
        'Depot',
        'AutorisationInscriptionThese',
        'AutorisationDiplomationThese',
        'Formation',
        'ComiteSuiviIndividuel',
        'RapportActivite',
@@ -92,7 +98,8 @@ return [
        'SygalApiImpl',
        'Validation',
        'HDR',
        'Candidat'
        'Candidat',
        'Tx',
    ],
    'module_listener_options' => [
        'config_glob_paths'    => [
+81 −0
Original line number Diff line number Diff line
@@ -5,9 +5,14 @@

namespace Application;

use Eljam\GuzzleJwt\Persistence\SimpleCacheTokenPersistence;
use Fichier\Service\Storage\Adapter\FilesystemStorageAdapter;
use Fichier\Service\Storage\Adapter\S3StorageAdapter;
use GuzzleHttp\Client as RestClient;
use Laminas\Mail\Transport\Smtp;
use UnicaenApi\ClientMiddleware\Jwt\JwtMiddleware;
use UnicaenPegaseCocExtApi\Api\JwtMiddlewareAuthStrategy;
use UnicaenPegaseCocExtApi\Api\JwtMiddlewareFactory;

return [
    // Imports et synchros (unicaen/db-import)
@@ -50,6 +55,82 @@ return [
        ],
    ],

    'unicaen-api' => [
        /**
         * Config des clients d'API.
         * @see \UnicaenApi\ApiClientPluginManager
         */
        'api_clients' => [
            'clients' => [
                // Nom unique du client => config
                'pegase_coc_ext_api_client' => [
                    // Classe du client HTTP
                    'class' => RestClient::class,
                    // Options
                    'options' => [
                        // Options standards
                        'base_uri' => 'https://pegase.domain.fr/api/coc/ext/v1',
                        'proxy' => false, // ['no' => 'localhost']
                        'verify' => false,
                        //'allow_redirects' => false,
                        'timeout' => 10,
                        'debug' => true,
                        'debug_file' => '/tmp/debug_curl.log',

                        // Taille maxi du corps des messages d'erreurs reçus
                        'http_errors_truncate_at' => 1500,

                        // Middlewares Guzzle éventuels (https://docs.guzzlephp.org/en/stable/handlers-and-middleware.html)
                        'middlewares' => [
                            'jwt_middleware',
                        ],
                    ],
                ],
            ],
        ],
        'api_client_middlewares' => [
            'factories' => [
                JwtMiddleware::class => JwtMiddlewareFactory::class, // substitution nécessaire
            ],
            'middlewares' => [
                'jwt_middleware' => [
                    'class' => JwtMiddleware::class,
                    'options' => [
                        'base_uri' => 'https://auth.domain.fr',
                        'token_url' => '/cas/v1/tickets',
                        'username' => 'xxxxx',
                        'password' => 'xxxxx',
                        'auth_strategy' => JwtMiddlewareAuthStrategy::class, // auth strategy qui ajoute "token=true"
                        'persistence_strategy' => SimpleCacheTokenPersistence::class,
                    ],
                ],
            ],
        ],
    ],

    'caches' => [
        /**
         * Cache utilisé pour persister les tokens JWT et éviter ainsi qu'un nouveau token soit demandé avant chaque appel d'API.
         */
        'jwt_middleware_token_persistence_cache' => [
            'options' => [
                'ttl' => 60*60, // 1h
                'cache_dir' => __DIR__ . '/../../data/cache',
            ],
        ],
    ],

    'unicaen-pegase-coc-ext-api' => [
        // codes des types de résultats (cf. API Pégase "REF-Référentiel", /parametrage/TypeResultat)
        'codes_types_resultats' => [
            'ADMIS' => 'TRE001',
            'AJOURNE' => 'TRE002',
            'VALIDE' => 'TRE009',
            'NON_VALIDE' => 'TRE010',
            'CESURE' => 'TRE013',
        ],
    ],

    'fichier' => [
        'storage' => [
            'adapters' => [
+4 −0
Original line number Diff line number Diff line
@@ -15,3 +15,7 @@ Documentation technique
- [Authentification](authentification/auth.md)
- [Ligne de commande](cli.md)
- [Base de données](database/README.md)
- Communication avec Pégase :
  - Inscription administrative (Pégase => SyGAL) : [flux_inscription_administrative.md](../module/InscriptionAdministrative/doc/flux_inscription_administrative.md)
  - Autorisation d'inscription (SyGAL => Pégase) : [flux_autorisation_inscription.md](../module/AutorisationInscriptionThese/doc/flux_autorisation_inscription.md)
  - Autorisation de diplomation (SyGAL => Pégase) : [flux_autorisation_diplomation.md](../module/AutorisationDiplomationThese/doc/flux_autorisation_diplomation.md)
Loading