Commit cf4151d7 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Ajout colonne domaine dans Etablissement + utilisation nouvelle classe AuthUserWrapper.

parent 331c5179
Loading
Loading
Loading
Loading
+6 −6
Changes for composer.lock: 6 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -1807,11 +1807,11 @@
        },
        {
            "name": "unicaen/app",
            "version": "1.3.7",
            "version": "1.3.8",
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/app.git",
                "reference": "fd95b9fbcd29660a265b9019c619d532ef6b2037"
                "reference": "95d8e41b41b8f10ace5ab6ec98fa37aa7babb9a3"
            },
            "require": {
                "doctrine/doctrine-orm-module": ">=0.7",
@@ -1854,15 +1854,15 @@
                ]
            },
            "description": "Module de base des applications unicaen",
            "time": "2018-03-15T15:14:58+00:00"
            "time": "2018-03-20T09:08:06+00:00"
        },
        {
            "name": "unicaen/auth",
            "version": "1.2.0",
            "version": "1.2.1",
            "source": {
                "type": "git",
                "url": "https://git.unicaen.fr/lib/unicaen/auth.git",
                "reference": "737a0402b9050f868c0ae1d920120fcba854c75c"
                "reference": "7abd386db52021383bc6dc9a84793bb59d8c3b2e"
            },
            "require": {
                "bjyoungblood/bjy-authorize": ">=1.4",
@@ -1884,7 +1884,7 @@
                ]
            },
            "description": "Module d'authentification pour les applications Unicaen",
            "time": "2018-03-19T09:01:16+00:00"
            "time": "2018-03-20T09:01:12+00:00"
        },
        {
            "name": "unicaen/code",
+5 −5
Changes for data/SQL/sygal/data/00-divers.sql: 5 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -7,11 +7,11 @@ insert into TYPE_STRUCTURE(ID, CODE, LIBELLE) values (3, 'unite-recherche', 'Uni

---------------------- ETABLISSEMENT ---------------------

INSERT INTO ETABLISSEMENT (ID, CODE, LIBELLE) VALUES (1, 'COMUE', 'Normandie Université');
INSERT INTO ETABLISSEMENT (ID, CODE, LIBELLE) VALUES (2, 'UCN',   'Université de Caen Normandie');
INSERT INTO ETABLISSEMENT (ID, CODE, LIBELLE) VALUES (3, 'URN',   'Université de Rouen Normandie');
INSERT INTO ETABLISSEMENT (ID, CODE, LIBELLE) VALUES (4, 'ULHN',  'Université Le Havre Normandie');
INSERT INTO ETABLISSEMENT (ID, CODE, LIBELLE) VALUES (5, 'INSA',  'INSA de Rouen');
INSERT INTO ETABLISSEMENT (ID, CODE, DOMAINE) VALUES (1, 'COMUE', null);
INSERT INTO ETABLISSEMENT (ID, CODE, DOMAINE) VALUES (2, 'UCN',   'unicaen.fr');
INSERT INTO ETABLISSEMENT (ID, CODE, DOMAINE) VALUES (3, 'URN',   'univ-rouen.fr');
INSERT INTO ETABLISSEMENT (ID, CODE, DOMAINE) VALUES (4, 'ULHN',  'univ-lehavre.fr');
INSERT INTO ETABLISSEMENT (ID, CODE, DOMAINE) VALUES (5, 'INSA',  'insa-rouen.fr');

---------------------- SOURCE ---------------------

+12 −7
Changes for data/SQL/sygal/schema-sygal.sql: 12 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -62,18 +62,23 @@ CREATE TABLE ETABLISSEMENT
(
  ID NUMBER constraint ETAB_PK primary key,
  CODE VARCHAR2(32 char) not null constraint ETAB_CODE_UN unique,
  LIBELLE VARCHAR2(128) NOT NULL constraint ETAB_LIBELLE_UN unique,
  CHEMIN_LOGO VARCHAR2(200) NOT NULL
  DOMAINE VARCHAR2(50) not null,
  STRUCTURE_ID NUMBER not null constraint ETAB_STRUCT_FK references STRUCTURE,
  HISTO_CREATION DATE default sysdate  not null,
  HISTO_MODIFICATION DATE default SYSDATE  not null,
  HISTO_DESTRUCTION DATE,
  HISTO_CREATEUR_ID NUMBER constraint ETAB_UTIL_CREATEUR_FK references UTILISATEUR,
  HISTO_MODIFICATEUR_ID NUMBER constraint ETAB_UTIL_MODIFICATEUR_FK references UTILISATEUR,
  HISTO_DESTRUCTEUR_ID NUMBER constraint ETAB_UTIL_DESTRUCTEUR_FK references UTILISATEUR
);
CREATE SEQUENCE ETABLISSEMENT_ID_SEQ;

alter table ETABLISSEMENT add structure_id NUMBER not null constraint ETAB_STRUCT_FK references STRUCTURE(id);
alter table ETABLISSEMENT MODIFY structure_id not null;
alter table ETABLISSEMENT drop COLUMN LIBELLE;
alter table ETABLISSEMENT drop COLUMN CHEMIN_LOGO;
COMMENT ON COLUMN ETABLISSEMENT.DOMAINE IS 'Domaine DNS de l''établissement tel que présent dans l''EPPN Shibboleth, ex: unicaen.fr.';

CREATE UNIQUE INDEX OTH.ETABLISSEMENT_DOMAINE_uindex ON ETABLISSEMENT(DOMAINE);
create index ETABLISSEMENT_STRUCT_ID_IDX on ETABLISSEMENT (structure_id);

CREATE SEQUENCE ETABLISSEMENT_ID_SEQ;


--------------------------- API_LOG -----------------------

+2 −1
Changes for module/Application/config/module.config.php: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ use Application\Service\Notification\NotificationServiceFactory;
use Application\Service\Role\RoleService;
use Application\Service\ServiceAwareInitializer;
use Application\Service\UserContextServiceAwareInitializer;
use Application\Service\UserContextServiceFactory;
use Application\View\Helper\EscapeTextHelper;
use Application\View\Helper\QueryParamsHelperFactory;
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
@@ -165,11 +166,11 @@ return array(
        'invokables' => array(
            'RouteMatchInjector' => RouteMatchInjector::class,
            'UserRoleSelectedEventListener' => UserRoleSelectedEventListener::class,
            'UnicaenAuth\Service\UserContext' => 'Application\Service\UserContextService',
            'RoleService' => RoleService::class,
        ),
        'factories' => array(
            'navigation'                     => NavigationFactoryFactory::class,
            'UnicaenAuth\Service\UserContext' => UserContextServiceFactory::class,
            'UserAuthenticatedEventListener' => UserAuthenticatedEventListenerFactory::class,
            'UnicaenApp\Service\Mailer'      => MailerServiceFactory::class,
            'NotificationService'            => NotificationServiceFactory::class,
+17 −27
Changes for module/Application/src/Application/Authentication/Storage/AppStorage.php: 17 added lines, 27 removed lines.
Original line number Diff line number Diff line
@@ -2,16 +2,17 @@

namespace Application\Authentication\Storage;

use Application\Entity\AuthUserWrapper;
use Application\Entity\Db\Doctorant;
use Application\Entity\Db\Etablissement;
use Application\Entity\Db\Utilisateur;
use Application\Service\Doctorant\DoctorantServiceAwareTrait;
use Application\Service\Etablissement\EtablissementServiceAwareTrait;
use Application\Service\Utilisateur\UtilisateurServiceAwareTrait;
use Doctrine\ORM\NonUniqueResultException;
use UnicaenApp\Entity\Ldap\People;
use UnicaenApp\Exception\RuntimeException;
use UnicaenAuth\Authentication\Storage\ChainableStorage;
use UnicaenAuth\Authentication\Storage\ChainEvent;
use UnicaenAuth\Entity\Shibboleth\ShibUser;
use Zend\Authentication\Exception\ExceptionInterface;

/**
@@ -27,24 +28,20 @@ class AppStorage implements ChainableStorage
{
    use UtilisateurServiceAwareTrait;
    use DoctorantServiceAwareTrait;
    use EtablissementServiceAwareTrait;

    const KEY_DB_UTILSATEUR = 'db';
    const KEY_DOCTORANT = 'doctorant';

    /**
     * @var mixed
     * @var array
     */
    private $contents;

    /**
     * @var People
     * @var AuthUserWrapper
     */
    private $people;

    /**
     * @var ShibUser
     */
    private $shibUser;
    private $userWrapper;

    /**
     * @var Doctorant
@@ -59,14 +56,12 @@ class AppStorage implements ChainableStorage
    {
        $this->contents = $e->getContents();

        $this->people = $this->contents['ldap'];
        $this->shibUser = $this->contents['shib'];

        if (null === $this->people && null === $this->shibUser) {
//            throw new RuntimeException("Aucune donnée d'authentification LDAP ni Shibboleth disponible");
        if (null === $this->contents['ldap'] && null === $this->contents['shib']) {
            return;
        }

        $this->userWrapper = AuthUserWrapper::inst($this->contents['ldap'] ?: $this->contents['shib']);

        /**
         * Recherche de l'utilisateur connecté dans la table Utilisateur.
         */
@@ -95,11 +90,7 @@ class AppStorage implements ChainableStorage
     */
    private function fetchUtilisateur()
    {
        if (null !== $this->people) {
            $username = $this->people->getSupannAliasLogin();
        } else {
            $username = $this->shibUser->getUsername();
        }
        $username = $this->userWrapper->getUsername();

        /** @var Utilisateur $utilisateur */
        $utilisateur = $this->utilisateurService->getRepository()->findOneBy(['username' => $username]);
@@ -130,13 +121,12 @@ class AppStorage implements ChainableStorage
         * - avec son numéro étudiant (Doctorant::sourceCode),
         * - avec son persopass (DoctorantCompl::persopass), seulement après qu'il l'a saisi sur la page d'identité de la thèse.
         */
        if (null !== $this->people) {
            $username = $this->people->getSupannAliasLogin();
        } else {
            $username = $this->shibUser->getUsername();
        }
        // todo: solution provisoire!
        $etablissement = 'UCN';
        $username = $this->userWrapper->getUsername();
        $domaineEtab = $this->userWrapper->getDomainFromEppn();

        /** @var Etablissement $etablissement */
        $etablissement = $this->etablissementService->getRepository()->findOneByDomaine($domaineEtab);

        try {
            $this->doctorant = $this->doctorantService->getRepository()->findOneByUsernameAndEtab($username, $etablissement);
        } catch (NonUniqueResultException $e) {
Loading