From fbd04d399d8b71cdfc69d1634f6c6f31cbc6b7ab Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 2 Aug 2022 16:31:35 +0200 Subject: [PATCH] fix: hide / show username suffix correctly on registration pages (#4097) --- internal/api/ui/login/external_login_handler.go | 15 +++++++++++++++ .../api/ui/login/external_register_handler.go | 12 ++++++++++-- internal/api/ui/login/policy_handler.go | 7 +++++++ internal/api/ui/login/register_handler.go | 8 ++++++++ .../templates/external_not_found_option.html | 2 +- .../templates/external_register_overview.html | 2 +- .../api/ui/login/static/templates/register.html | 2 +- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/internal/api/ui/login/external_login_handler.go b/internal/api/ui/login/external_login_handler.go index ca58fea33..56f329b9c 100644 --- a/internal/api/ui/login/external_login_handler.go +++ b/internal/api/ui/login/external_login_handler.go @@ -51,6 +51,7 @@ type externalNotFoundOptionData struct { ExternalIDPUserID string ExternalIDPUserDisplayName string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool ExternalEmail string ExternalEmailVerified bool @@ -274,6 +275,19 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ human, externalIDP, _ = l.mapExternalUserToLoginUser(orgIAMPolicy, linkingUser, idpConfig) } + var resourceOwner string + if authReq != nil { + resourceOwner = authReq.RequestedOrgID + } + if resourceOwner == "" { + resourceOwner = authz.GetInstance(r.Context()).DefaultOrganisationID() + } + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderError(w, r, authReq, err) + return + } + data := externalNotFoundOptionData{ baseData: l.getBaseData(r, authReq, "ExternalNotFoundOption", errID, errMessage), externalNotFoundOptionFormData: externalNotFoundOptionFormData{ @@ -292,6 +306,7 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ ExternalEmail: human.EmailAddress, ExternalEmailVerified: human.IsEmailVerified, ShowUsername: orgIAMPolicy.UserLoginMustBeDomain, + ShowUsernameSuffix: !labelPolicy.HideLoginNameSuffix, OrgRegister: orgIAMPolicy.UserLoginMustBeDomain, } if human.Phone != nil { diff --git a/internal/api/ui/login/external_register_handler.go b/internal/api/ui/login/external_register_handler.go index be664f095..db440f62c 100644 --- a/internal/api/ui/login/external_register_handler.go +++ b/internal/api/ui/login/external_register_handler.go @@ -44,6 +44,7 @@ type externalRegisterData struct { ExternalIDPUserID string ExternalIDPUserDisplayName string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool ExternalEmail string ExternalEmailVerified bool @@ -121,13 +122,19 @@ func (l *Login) handleExternalUserRegister(w http.ResponseWriter, r *http.Reques l.renderRegisterOption(w, r, authReq, err) return } + + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderRegisterOption(w, r, authReq, err) + return + } user, externalIDP := l.mapTokenToLoginHumanAndExternalIDP(orgIamPolicy, tokens, idpConfig) if err != nil { l.renderRegisterOption(w, r, authReq, err) return } if !idpConfig.AutoRegister { - l.renderExternalRegisterOverview(w, r, authReq, orgIamPolicy, user, externalIDP, nil) + l.renderExternalRegisterOverview(w, r, authReq, orgIamPolicy, user, externalIDP, labelPolicy.HideLoginNameSuffix, nil) return } l.registerExternalUser(w, r, authReq, user, externalIDP) @@ -157,7 +164,7 @@ func (l *Login) registerExternalUser(w http.ResponseWriter, r *http.Request, aut l.renderNextStep(w, r, authReq) } -func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest, orgIAMPolicy *query.DomainPolicy, human *domain.Human, idp *domain.UserIDPLink, err error) { +func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest, orgIAMPolicy *query.DomainPolicy, human *domain.Human, idp *domain.UserIDPLink, hideLoginNameSuffix bool, err error) { var errID, errMessage string if err != nil { errID, errMessage = l.getErrorMessage(r, err) @@ -180,6 +187,7 @@ func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Re ExternalEmailVerified: human.IsEmailVerified, ShowUsername: orgIAMPolicy.UserLoginMustBeDomain, OrgRegister: orgIAMPolicy.UserLoginMustBeDomain, + ShowUsernameSuffix: !hideLoginNameSuffix, } if human.Phone != nil { data.Phone = human.PhoneNumber diff --git a/internal/api/ui/login/policy_handler.go b/internal/api/ui/login/policy_handler.go index 1445df9a9..f5db76a2b 100644 --- a/internal/api/ui/login/policy_handler.go +++ b/internal/api/ui/login/policy_handler.go @@ -28,3 +28,10 @@ func (l *Login) getLoginPolicy(r *http.Request, orgID string) (*query.LoginPolic } return l.query.LoginPolicyByID(r.Context(), false, orgID) } + +func (l *Login) getLabelPolicy(r *http.Request, orgID string) (*query.LabelPolicy, error) { + if orgID == "" { + return l.query.DefaultActiveLabelPolicy(r.Context()) + } + return l.query.ActiveLabelPolicyByOrg(r.Context(), orgID) +} diff --git a/internal/api/ui/login/register_handler.go b/internal/api/ui/login/register_handler.go index f8b8ab536..271654350 100644 --- a/internal/api/ui/login/register_handler.go +++ b/internal/api/ui/login/register_handler.go @@ -37,6 +37,7 @@ type registerData struct { HasNumber string HasSymbol string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool } @@ -149,6 +150,13 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque data.ShowUsername = orgIAMPolicy.UserLoginMustBeDomain data.OrgRegister = orgIAMPolicy.UserLoginMustBeDomain + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderRegister(w, r, authRequest, formData, err) + return + } + data.ShowUsernameSuffix = !labelPolicy.HideLoginNameSuffix + funcs := map[string]interface{}{ "selectedLanguage": func(l string) bool { if formData == nil { diff --git a/internal/api/ui/login/static/templates/external_not_found_option.html b/internal/api/ui/login/static/templates/external_not_found_option.html index 7c4c16b74..3a7ef355d 100644 --- a/internal/api/ui/login/static/templates/external_not_found_option.html +++ b/internal/api/ui/login/static/templates/external_not_found_option.html @@ -39,7 +39,7 @@
- {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}
diff --git a/internal/api/ui/login/static/templates/external_register_overview.html b/internal/api/ui/login/static/templates/external_register_overview.html index 3ee0690f7..1779c5ade 100644 --- a/internal/api/ui/login/static/templates/external_register_overview.html +++ b/internal/api/ui/login/static/templates/external_register_overview.html @@ -39,7 +39,7 @@
- {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}
diff --git a/internal/api/ui/login/static/templates/register.html b/internal/api/ui/login/static/templates/register.html index 0c709aa34..08280b2b3 100644 --- a/internal/api/ui/login/static/templates/register.html +++ b/internal/api/ui/login/static/templates/register.html @@ -42,7 +42,7 @@
- {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}