From 39025c263e461308d280c902e4ee5d1b4d4a6c61 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Tue, 19 Jan 2021 21:13:27 +0800 Subject: [PATCH] fix(cloudid): add en-US html templte --- pkg/cloudid/saml/initidp.go | 11 +++++++++-- pkg/util/samlutils/demo/service.go | 2 +- pkg/util/samlutils/idp/idp.go | 17 ++++++++++------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pkg/cloudid/saml/initidp.go b/pkg/cloudid/saml/initidp.go index 0031485f24..c9683c91f7 100644 --- a/pkg/cloudid/saml/initidp.go +++ b/pkg/cloudid/saml/initidp.go @@ -23,6 +23,7 @@ import ( "yunion.io/x/log" "yunion.io/x/pkg/errors" + "yunion.io/x/onecloud/pkg/appctx" "yunion.io/x/onecloud/pkg/appsrv" "yunion.io/x/onecloud/pkg/cloudid/models" "yunion.io/x/onecloud/pkg/cloudid/options" @@ -74,7 +75,12 @@ func initSAMLIdp(app *appsrv.Application, prefix string) error { } logoutFunc := func(ctx context.Context, idpId string) string { - return fmt.Sprintf(`

成功退出登录,重新登录

`, options.Options.ApiServer) + switch appctx.AppContextLang(ctx) { + case "zh-CN": + return fmt.Sprintf(`

成功退出登录,重新登录

`, options.Options.ApiServer) + default: + return fmt.Sprintf(`

Log out successfully,Login again

`, options.Options.ApiServer) + } } idpInst := idp.NewIdpInstance(saml, spFunc, idpFunc, logoutFunc) @@ -105,7 +111,8 @@ func initSAMLIdp(app *appsrv.Application, prefix string) error { } idpInst.AddHandlers(app, prefix, auth.Authenticate) - idpInst.SetHtmlTemplate(`

正在跳转到云控制台,请等待。。。

$FORM$`) + idpInst.SetHtmlTemplate("zh-CN", `

正在跳转到云控制台,请等待。。。

$FORM$`) + idpInst.SetHtmlTemplate("en", `

Jumping to the console, please wait。。。

$FORM$`) idpInstance = idpInst diff --git a/pkg/util/samlutils/demo/service.go b/pkg/util/samlutils/demo/service.go index 951a1e027a..81e8fcd4ff 100644 --- a/pkg/util/samlutils/demo/service.go +++ b/pkg/util/samlutils/demo/service.go @@ -371,7 +371,7 @@ func prepareServer() error { } } idpInst.AddHandlers(app, "SAML/idp", nil) - idpInst.SetHtmlTemplate(`

正在跳转到云控制台,请等待。。。

$FORM$`) + idpInst.SetHtmlTemplate("zh-CN", `

正在跳转到云控制台,请等待。。。

$FORM$`) app.AddHandler("GET", "SAML/idp", func(ctx context.Context, w http.ResponseWriter, r *http.Request) { idpInitUrl := httputils.JoinPath(options.Entity, "SAML/idp/sso") diff --git a/pkg/util/samlutils/idp/idp.go b/pkg/util/samlutils/idp/idp.go index 0d4156b7f5..2a4a7af24d 100644 --- a/pkg/util/samlutils/idp/idp.go +++ b/pkg/util/samlutils/idp/idp.go @@ -54,7 +54,7 @@ type SSAMLIdpInstance struct { onIdpInitiatedLogin OnIdpInitiatedLogin onLogout OnLogout - htmlTemplate string + htmlTemplate map[string]string } func NewIdpInstance(saml *samlutils.SSAMLInstance, spLoginFunc OnSpInitiatedLogin, idpLoginFunc OnIdpInitiatedLogin, logoutFunc OnLogout) *SSAMLIdpInstance { @@ -63,6 +63,7 @@ func NewIdpInstance(saml *samlutils.SSAMLInstance, spLoginFunc OnSpInitiatedLogi onSpInitiatedLogin: spLoginFunc, onIdpInitiatedLogin: idpLoginFunc, onLogout: logoutFunc, + htmlTemplate: map[string]string{}, } } @@ -96,11 +97,11 @@ func (idp *SSAMLIdpInstance) AddHandlers(app *appsrv.Application, prefix string, log.Infof("IDP initated SSO: %s", idp.getIdpInitiatedSSOUrl()) } -func (idp *SSAMLIdpInstance) SetHtmlTemplate(tmp string) error { +func (idp *SSAMLIdpInstance) SetHtmlTemplate(lang, tmp string) error { if strings.Index(tmp, samlutils.HTML_SAML_FORM_TOKEN) < 0 { return errors.Wrapf(httperrors.ErrInvalidFormat, "no %s found", samlutils.HTML_SAML_FORM_TOKEN) } - idp.htmlTemplate = tmp + idp.htmlTemplate[lang] = tmp return nil } @@ -235,7 +236,7 @@ func (idp *SSAMLIdpInstance) processLoginRequest(ctx context.Context, idpId stri return "", errors.Wrap(err, "getLoginResponse") } - form, err := idp.samlResponse2Form(sp.GetPostAssertionConsumerServiceUrl(), resp, input.RelayState) + form, err := idp.samlResponse2Form(ctx, sp.GetPostAssertionConsumerServiceUrl(), resp, input.RelayState) if err != nil { return "", errors.Wrap(err, "samlResponse2Form") } @@ -243,7 +244,7 @@ func (idp *SSAMLIdpInstance) processLoginRequest(ctx context.Context, idpId stri return form, nil } -func (idp *SSAMLIdpInstance) samlResponse2Form(url string, resp *samlutils.Response, state string) (string, error) { +func (idp *SSAMLIdpInstance) samlResponse2Form(ctx context.Context, url string, resp *samlutils.Response, state string) (string, error) { respXml, err := xml.Marshal(resp) if err != nil { return "", errors.Wrap(err, "xml.Marshal") @@ -263,7 +264,9 @@ func (idp *SSAMLIdpInstance) samlResponse2Form(url string, resp *samlutils.Respo }) template := samlutils.DEFAULT_HTML_TEMPLATE if len(idp.htmlTemplate) > 0 { - template = idp.htmlTemplate + if _temp, ok := idp.htmlTemplate[appctx.AppContextLang(ctx)]; ok { + template = _temp + } } form = strings.Replace(template, samlutils.HTML_SAML_FORM_TOKEN, form, 1) return form, nil @@ -316,7 +319,7 @@ func (idp *SSAMLIdpInstance) processIdpInitiatedLogin(ctx context.Context, input SSAMLSpInitiatedLoginData: data.SSAMLSpInitiatedLoginData, } resp := samlutils.NewResponse(respInput) - form, err := idp.samlResponse2Form(sp.GetPostAssertionConsumerServiceUrl(), &resp, data.RelayState) + form, err := idp.samlResponse2Form(ctx, sp.GetPostAssertionConsumerServiceUrl(), &resp, data.RelayState) if err != nil { return "", errors.Wrap(err, "samlResponse2Form") }