Skip to content

Commit

Permalink
auth: check for beta access before responsibilities or invitations
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
freesteph committed Nov 8, 2023
1 parent 920e37e commit d1e7649
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 9 deletions.
9 changes: 7 additions & 2 deletions app/controllers/users/omniauth_callbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ def developer
def oidc
parse_identity

check_limited_access!

begin
check_responsibilites!
rescue IdentityMappers::Errors::EmptyResponsibilitiesError
Expand All @@ -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!
Expand Down Expand Up @@ -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", "")
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion features/gestion_de_pfmp.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 ltablissement
Sachant que je me connecte en tant que personnel autorisé de ltablissement "DINUM"
Et que je passe lcran d'accueil
Et que je renseigne une PFMP de 3 jours pour "Marie Curie"
Quand je clique sur "Voir la PFMP"
Expand Down
26 changes: 24 additions & 2 deletions features/premiere_connexion.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 "[email protected]" à rejoindre l'application
Et que je me déconnecte
Et que je suis un personnel MENJ de l'établissement "123" avec l'email "[email protected]"
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
Expand Down
4 changes: 2 additions & 2 deletions features/profil_autorisé.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 "[email protected]"
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
Expand All @@ -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 "[email protected]"
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
10 changes: 8 additions & 2 deletions features/step_definitions/login_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,21 @@ 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 "[email protected]" à rejoindre l'application
Et que je me déconnecte
Et que je suis un personnel MENJ de l'établissement "#{@etab.uai}" avec l'email "[email protected]"
Et que je suis un personnel MENJ de l'établissement "#{uai}" avec l'email "[email protected]"
Et que je me connecte en tant que personnel MENJ
)
end

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

0 comments on commit d1e7649

Please sign in to comment.