From d1e7649c2f0e18ae598b6309a28ba7e4d2f84b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Maniaci?= Date: Tue, 7 Nov 2023 21:03:33 +0100 Subject: [PATCH] auth: check for beta access before responsibilities or invitations We were only checking for the limited-beta UAIs after checking for valid accounts (i.e responsibilities or invitations), which generates a lot of noise because people should be stopped earlier when they're just not part of the beta. --- .../users/omniauth_callbacks_controller.rb | 9 +++++-- features/gestion_de_pfmp.feature | 2 +- features/premiere_connexion.feature | 26 +++++++++++++++++-- "features/profil_autoris\303\251.feature" | 4 +-- features/step_definitions/login_steps.rb | 10 +++++-- 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index ae99193b8..5d3d868f0 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -18,6 +18,8 @@ def developer def oidc parse_identity + check_limited_access! + begin check_responsibilites! rescue IdentityMappers::Errors::EmptyResponsibilitiesError @@ -30,7 +32,6 @@ def oidc check_user! save_roles! - check_limited_access! # for the private beta async_fetch_students! fetch_establishments! choose_redirect_page! @@ -140,6 +141,10 @@ def clear_previous_establishment! @user.update!(establishment: nil) end + def all_establishments + @mapper.establishments_in_responsibility + @mapper.authorised_establishments_for(@user.email) + end + def check_limited_access! allowed_uais = ENV .fetch("APLYPRO_RESTRICTED_ACCESS", "") @@ -148,7 +153,7 @@ def check_limited_access! return if allowed_uais.blank? - allowed = @user.establishments.find { |e| allowed_uais.include?(e.uai) } + allowed = all_establishments.map(&:uai).intersect?(allowed_uais) raise IdentityMappers::Errors::NoLimitedAccessError unless allowed end diff --git a/features/gestion_de_pfmp.feature b/features/gestion_de_pfmp.feature index 2f7e86bdf..ec332e782 100644 --- a/features/gestion_de_pfmp.feature +++ b/features/gestion_de_pfmp.feature @@ -59,7 +59,7 @@ Fonctionnalité: Le personnel de direction édite les PFMPs Alors la page contient "La PFMP de Marie Curie a bien été validée" Scénario: Le personnel autorisé ne peut pas valider une PFMP individuellement - Sachant que je me connecte en tant que personnel autorisé de l'établissement + Sachant que je me connecte en tant que personnel autorisé de l'établissement "DINUM" Et que je passe l'écran d'accueil Et que je renseigne une PFMP de 3 jours pour "Marie Curie" Quand je clique sur "Voir la PFMP" diff --git a/features/premiere_connexion.feature b/features/premiere_connexion.feature index 3a156b95b..01bd02588 100644 --- a/features/premiere_connexion.feature +++ b/features/premiere_connexion.feature @@ -28,7 +28,7 @@ Fonctionnalité: Le personnel de direction se connecte Scénario: Un personnel du MENJ sans établissements en responsabilité est informé Sachant que je suis un personnel MENJ de l'établissement "123" Quand je me connecte en tant que personnel MENJ - Alors la page contient "pas d'établissement sous votre responsabilité ou de délégations" + Alors la page affiche une erreur d'authentification Et il n'y a pas de personnel de direction enregistré dans la base de données Scénario: Un personnel de direction du MENJ peut se reconnecter sans problèmes @@ -42,7 +42,29 @@ Fonctionnalité: Le personnel de direction se connecte Sachant que je suis un personnel MENJ directeur de l'établissement "123" Et que l'accès est limité aux UAIs "456" Quand je me connecte en tant que personnel MENJ - Alors la page contient "Accès restreint" + Alors la page contient "sélection d'établissements pilotes" + + Scénario: Un personnel MENJ est d'abord averti de la phase pilote + Sachant que je suis un personnel MENJ de l'établissement "123" + Et que l'accès est limité aux UAIs "456" + Quand je me connecte en tant que personnel MENJ + Alors la page contient "sélection d'établissements pilotes" + + Scénario: Un personnel directeur MENJ est d'abord averti de la phase pilote + Sachant que je suis un personnel MENJ directeur de l'établissement "123" + Et que l'accès est limité aux UAIs "456" + Quand je me connecte en tant que personnel MENJ + Alors la page contient "sélection d'établissements pilotes" + + Scénario: Un personnel du MENJ peut-être invité lors de la bêta privée + Sachant que l'accès est limité aux UAIs "123" + Et que je suis un personnel MENJ directeur de l'établissement "123" + Et que je me connecte en tant que personnel MENJ + Et que j'autorise "louis.pasteur@education.gouv.fr" à rejoindre l'application + Et que je me déconnecte + Et que je suis un personnel MENJ de l'établissement "123" avec l'email "louis.pasteur@education.gouv.fr" + Quand je me connecte en tant que personnel MENJ + Alors la page contient "Bienvenue sur APLyPro" # Les personnels de la Mer passent par la FIM mais n'ont pas les # attributs "FrEduRneResp" et "FrEduFonctAdm" renseignés, c'est un diff --git "a/features/profil_autoris\303\251.feature" "b/features/profil_autoris\303\251.feature" index 5a46094eb..65d8319e0 100644 --- "a/features/profil_autoris\303\251.feature" +++ "b/features/profil_autoris\303\251.feature" @@ -16,7 +16,7 @@ Fonctionnalité: Gestion des accès à l'application Scénario: Je ne peux me connecter à l'application si mon email n'a pas été autorisé Sachant que je suis un personnel MENJ de l'établissement "DINUM" avec l'email "louis.pasteur@education.gouv.fr" Lorsque je me connecte en tant que personnel MENJ - Alors la page contient "pas d'établissement sous votre responsabilité ou de délégations" + Alors la page affiche une erreur d'authentification Scénario: Je ne peux pas gérer les accès en tant qu'invité Lorsque je me connecte en tant que personnel MENJ @@ -33,4 +33,4 @@ Fonctionnalité: Gestion des accès à l'application Et que je me déconnecte Quand je suis un personnel MENJ de l'établissement "DINUM" avec l'email "marie.curie@education.gouv.fr" Et que je me connecte en tant que personnel MENJ - Alors la page contient "pas d'établissement sous votre responsabilité ou de délégations" + Alors la page affiche une erreur d'authentification diff --git a/features/step_definitions/login_steps.rb b/features/step_definitions/login_steps.rb index ca4192caa..5809a005f 100644 --- a/features/step_definitions/login_steps.rb +++ b/features/step_definitions/login_steps.rb @@ -127,11 +127,11 @@ def make_cas_hash(name:, email:, raw_info:) steps %(Quand je clique sur "Continuer") end -Sachantque("je me connecte en tant que personnel autorisé de l'établissement") do +Sachantque("je me connecte en tant que personnel autorisé de l'établissement {string}") do |uai| steps %( Quand j'autorise "marie.curie@education.gouv.fr" à rejoindre l'application Et que je me déconnecte - Et que je suis un personnel MENJ de l'établissement "#{@etab.uai}" avec l'email "marie.curie@education.gouv.fr" + Et que je suis un personnel MENJ de l'établissement "#{uai}" avec l'email "marie.curie@education.gouv.fr" Et que je me connecte en tant que personnel MENJ ) end @@ -139,3 +139,9 @@ def make_cas_hash(name:, email:, raw_info:) Sachantque("l'accès est limité aux UAIs {string}") do |str| ENV.update("APLYPRO_RESTRICTED_ACCESS" => str) end + +Alors("la page affiche une erreur d'authentification") do + steps %( + Alors la page contient "Erreur d'authentification" + ) +end