diff --git a/pkg/cloudid/saml/initidp.go b/pkg/cloudid/saml/initidp.go
index c9683c91f7..cab8b41516 100644
--- a/pkg/cloudid/saml/initidp.go
+++ b/pkg/cloudid/saml/initidp.go
@@ -28,6 +28,7 @@ import (
"yunion.io/x/onecloud/pkg/cloudid/models"
"yunion.io/x/onecloud/pkg/cloudid/options"
"yunion.io/x/onecloud/pkg/httperrors"
+ "yunion.io/x/onecloud/pkg/i18n"
"yunion.io/x/onecloud/pkg/mcclient/auth"
"yunion.io/x/onecloud/pkg/util/httputils"
"yunion.io/x/onecloud/pkg/util/samlutils"
@@ -111,8 +112,7 @@ func initSAMLIdp(app *appsrv.Application, prefix string) error {
}
idpInst.AddHandlers(app, prefix, auth.Authenticate)
- idpInst.SetHtmlTemplate("zh-CN", `
正在跳转到云控制台,请等待。。。
$FORM$`)
- idpInst.SetHtmlTemplate("en", `Jumping to the console, please wait。。。
$FORM$`)
+ idpInst.SetHtmlTemplate(i18n.NewTableEntry().CN(`正在跳转到云控制台,请等待。。。
$FORM$`).EN(`Login into to the cloud console, please wait。。。
$FORM$`))
idpInstance = idpInst
diff --git a/pkg/util/samlutils/demo/service.go b/pkg/util/samlutils/demo/service.go
index 81e8fcd4ff..a9d7be083b 100644
--- a/pkg/util/samlutils/demo/service.go
+++ b/pkg/util/samlutils/demo/service.go
@@ -29,6 +29,7 @@ import (
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/httperrors"
+ "yunion.io/x/onecloud/pkg/i18n"
"yunion.io/x/onecloud/pkg/util/fileutils2"
"yunion.io/x/onecloud/pkg/util/httputils"
"yunion.io/x/onecloud/pkg/util/samlutils"
@@ -371,7 +372,7 @@ func prepareServer() error {
}
}
idpInst.AddHandlers(app, "SAML/idp", nil)
- idpInst.SetHtmlTemplate("zh-CN", `正在跳转到云控制台,请等待。。。
$FORM$`)
+ idpInst.SetHtmlTemplate(i18n.NewTableEntry().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 2a4a7af24d..1d0908b484 100644
--- a/pkg/util/samlutils/idp/idp.go
+++ b/pkg/util/samlutils/idp/idp.go
@@ -28,12 +28,15 @@ import (
"yunion.io/x/onecloud/pkg/appctx"
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/httperrors"
+ "yunion.io/x/onecloud/pkg/i18n"
"yunion.io/x/onecloud/pkg/util/httputils"
"yunion.io/x/onecloud/pkg/util/samlutils"
)
const (
IDP_ID_KEY = ""
+
+ langTemplateKey = "lang_template_key"
)
type OnSpInitiatedLogin func(ctx context.Context, idpId string, sp *SSAMLServiceProvider) (samlutils.SSAMLSpInitiatedLoginData, error)
@@ -54,7 +57,7 @@ type SSAMLIdpInstance struct {
onIdpInitiatedLogin OnIdpInitiatedLogin
onLogout OnLogout
- htmlTemplate map[string]string
+ htmlTemplate i18n.Table
}
func NewIdpInstance(saml *samlutils.SSAMLInstance, spLoginFunc OnSpInitiatedLogin, idpLoginFunc OnIdpInitiatedLogin, logoutFunc OnLogout) *SSAMLIdpInstance {
@@ -63,7 +66,7 @@ func NewIdpInstance(saml *samlutils.SSAMLInstance, spLoginFunc OnSpInitiatedLogi
onSpInitiatedLogin: spLoginFunc,
onIdpInitiatedLogin: idpLoginFunc,
onLogout: logoutFunc,
- htmlTemplate: map[string]string{},
+ htmlTemplate: i18n.Table{},
}
}
@@ -97,11 +100,13 @@ func (idp *SSAMLIdpInstance) AddHandlers(app *appsrv.Application, prefix string,
log.Infof("IDP initated SSO: %s", idp.getIdpInitiatedSSOUrl())
}
-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)
+func (idp *SSAMLIdpInstance) SetHtmlTemplate(entry i18n.TableEntry) error {
+ for _, tmp := range entry {
+ 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[lang] = tmp
+ idp.htmlTemplate.Set(langTemplateKey, entry)
return nil
}
@@ -263,10 +268,9 @@ func (idp *SSAMLIdpInstance) samlResponse2Form(ctx context.Context, url string,
"RelayState": state,
})
template := samlutils.DEFAULT_HTML_TEMPLATE
- if len(idp.htmlTemplate) > 0 {
- if _temp, ok := idp.htmlTemplate[appctx.AppContextLang(ctx)]; ok {
- template = _temp
- }
+ _temp := idp.htmlTemplate.Lookup(ctx, langTemplateKey)
+ if _temp != langTemplateKey {
+ template = _temp
}
form = strings.Replace(template, samlutils.HTML_SAML_FORM_TOKEN, form, 1)
return form, nil