From 806b9e823806aea7a3434b869cb1c1aed7e8fae3 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Wed, 14 Dec 2022 12:23:09 +0100 Subject: [PATCH] fix(login): allow setting language on registered users (#4862) * fix: user language for notifications * fix(login): allow setting language on registered users Co-authored-by: Livio Spring --- internal/api/ui/login/external_login_handler.go | 10 +++++++++- internal/api/ui/login/external_register_handler.go | 9 ++++++++- internal/api/ui/login/register_handler.go | 8 -------- internal/api/ui/login/static/templates/register.html | 1 + 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/internal/api/ui/login/external_login_handler.go b/internal/api/ui/login/external_login_handler.go index 0a7eeb9b64..ea4565deb9 100644 --- a/internal/api/ui/login/external_login_handler.go +++ b/internal/api/ui/login/external_login_handler.go @@ -11,6 +11,7 @@ import ( "github.com/zitadel/oidc/v2/pkg/client/rp" "github.com/zitadel/oidc/v2/pkg/oidc" "golang.org/x/oauth2" + "golang.org/x/text/language" "github.com/zitadel/zitadel/internal/api/authz" http_mw "github.com/zitadel/zitadel/internal/api/http/middleware" @@ -314,7 +315,12 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ data.ExternalPhone = human.PhoneNumber data.ExternalPhoneVerified = human.IsPhoneVerified } - l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalNotFoundOption], data, nil) + funcs := map[string]interface{}{ + "selectedLanguage": func(l string) bool { + return data.Language == l + }, + } + l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalNotFoundOption], data, funcs) } func (l *Login) handleExternalNotFoundOptionCheck(w http.ResponseWriter, r *http.Request) { @@ -420,6 +426,7 @@ func (l *Login) mapExternalNotFoundOptionFormDataToLoginUser(formData *externalN IsEmailVerified: isEmailVerified, Phone: formData.Phone, IsPhoneVerified: isPhoneVerified, + PreferredLanguage: language.Make(formData.Language), } } @@ -445,6 +452,7 @@ func (l *Login) mapTokenToLoginUser(tokens *oidc.Tokens, idpConfig *iam_model.ID NickName: tokens.IDTokenClaims.GetNickname(), Email: tokens.IDTokenClaims.GetEmail(), IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(), + PreferredLanguage: tokens.IDTokenClaims.GetLocale(), } if tokens.IDTokenClaims.GetPhoneNumber() != "" { diff --git a/internal/api/ui/login/external_register_handler.go b/internal/api/ui/login/external_register_handler.go index b450687fce..72acbc0b44 100644 --- a/internal/api/ui/login/external_register_handler.go +++ b/internal/api/ui/login/external_register_handler.go @@ -219,7 +219,13 @@ func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Re data.Phone = externalUser.Phone data.ExternalPhone = externalUser.Phone data.ExternalPhoneVerified = externalUser.IsPhoneVerified - l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalRegisterOverview], data, nil) + + funcs := map[string]interface{}{ + "selectedLanguage": func(l string) bool { + return data.Language == l + }, + } + l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalRegisterOverview], data, funcs) } func (l *Login) handleExternalRegisterCheck(w http.ResponseWriter, r *http.Request) { @@ -262,6 +268,7 @@ func (l *Login) mapTokenToLoginHumanAndExternalIDP(tokens *oidc.Tokens, idpConfi NickName: tokens.IDTokenClaims.GetNickname(), Email: tokens.IDTokenClaims.GetEmail(), IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(), + PreferredLanguage: tokens.IDTokenClaims.GetLocale(), } if tokens.IDTokenClaims.GetPhoneNumber() != "" { diff --git a/internal/api/ui/login/register_handler.go b/internal/api/ui/login/register_handler.go index 8ae9daf738..273f618133 100644 --- a/internal/api/ui/login/register_handler.go +++ b/internal/api/ui/login/register_handler.go @@ -21,7 +21,6 @@ type registerFormData struct { Firstname string `schema:"firstname"` Lastname string `schema:"lastname"` Language string `schema:"language"` - Gender int32 `schema:"gender"` Password string `schema:"register-password"` Password2 string `schema:"register-password-confirmation"` TermsConfirm bool `schema:"terms-confirm"` @@ -167,12 +166,6 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque } return formData.Language == l }, - "selectedGender": func(g int32) bool { - if formData == nil { - return false - } - return formData.Gender == g - }, } if authRequest == nil { l.customTexts(r.Context(), translator, resourceOwner) @@ -187,7 +180,6 @@ func (d registerFormData) toHumanDomain() *domain.Human { FirstName: d.Firstname, LastName: d.Lastname, PreferredLanguage: language.Make(d.Language), - Gender: domain.Gender(d.Gender), }, Password: &domain.Password{ SecretString: d.Password, diff --git a/internal/api/ui/login/static/templates/register.html b/internal/api/ui/login/static/templates/register.html index b1dcbc2471..6edf6edff1 100644 --- a/internal/api/ui/login/static/templates/register.html +++ b/internal/api/ui/login/static/templates/register.html @@ -16,6 +16,7 @@ {{ .CSRF }} +