Fix language dynamism to align with user's and context preference
This commit is contained in:
parent
f2cdc1a586
commit
08be1a1355
@ -11,6 +11,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/cortezaproject/corteza/server/pkg/locale"
|
||||||
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
"github.com/go-chi/jwtauth"
|
"github.com/go-chi/jwtauth"
|
||||||
oauth2errors "github.com/go-oauth2/oauth2/v4/errors"
|
oauth2errors "github.com/go-oauth2/oauth2/v4/errors"
|
||||||
"github.com/lestrrat-go/jwx/jwa"
|
"github.com/lestrrat-go/jwx/jwa"
|
||||||
@ -457,6 +460,12 @@ func (h AuthHandlers) handleTokenRequest(req *request.AuthReq, client *types.Aut
|
|||||||
response["avatarID"] = strconv.FormatUint(user.Meta.AvatarID, 10)
|
response["avatarID"] = strconv.FormatUint(user.Meta.AvatarID, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if h.Locale.HasLanguage(language.Make(user.Meta.PreferredLanguage)) {
|
||||||
|
response["preferred_language"] = user.Meta.PreferredLanguage
|
||||||
|
} else {
|
||||||
|
response["preferred_language"] = locale.GetAcceptLanguageFromContext(req.Context()).String()
|
||||||
|
}
|
||||||
|
|
||||||
if user.Labels != nil {
|
if user.Labels != nil {
|
||||||
response["labels"] = user.Labels
|
response["labels"] = user.Labels
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -12,6 +12,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
"github.com/cortezaproject/corteza/server/system/service"
|
"github.com/cortezaproject/corteza/server/system/service"
|
||||||
|
|
||||||
"github.com/cortezaproject/corteza/server/auth/external"
|
"github.com/cortezaproject/corteza/server/auth/external"
|
||||||
@ -111,6 +113,7 @@ type (
|
|||||||
localeService interface {
|
localeService interface {
|
||||||
NS(ctx context.Context, ns string) func(key string, rr ...string) string
|
NS(ctx context.Context, ns string) func(key string, rr ...string) string
|
||||||
T(ctx context.Context, ns, key string, rr ...string) string
|
T(ctx context.Context, ns, key string, rr ...string) string
|
||||||
|
HasLanguage(lang language.Tag) bool
|
||||||
LocalizedList(ctx context.Context) []*locale.Language
|
LocalizedList(ctx context.Context) []*locale.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,12 +226,23 @@ func (h *AuthHandlers) handle(fn handlerFn) http.HandlerFunc {
|
|||||||
|
|
||||||
// make sure user (identity) is part of the context
|
// make sure user (identity) is part of the context
|
||||||
// so we can properly identify ourselves when interacting
|
// so we can properly identify ourselves when interacting
|
||||||
// with services
|
// with services, and set user's preferred language
|
||||||
if req.AuthUser != nil && !req.AuthUser.PendingMFA() {
|
if req.AuthUser != nil && !req.AuthUser.PendingMFA() {
|
||||||
req.Request = req.Request.Clone(auth.SetIdentityToContext(
|
req.Request = req.Request.Clone(auth.SetIdentityToContext(
|
||||||
req.Context(),
|
req.Context(),
|
||||||
auth.Authenticated(req.AuthUser.User.ID, req.AuthUser.User.Roles()...),
|
auth.Authenticated(req.AuthUser.User.ID, req.AuthUser.User.Roles()...),
|
||||||
))
|
))
|
||||||
|
|
||||||
|
userPreferredLanguage := language.Make(req.AuthUser.User.Meta.PreferredLanguage)
|
||||||
|
|
||||||
|
// set user's preferred language
|
||||||
|
if h.Locale.HasLanguage(userPreferredLanguage) {
|
||||||
|
ctx := req.Request.Context()
|
||||||
|
ctx = locale.SetAcceptLanguageToContext(ctx, userPreferredLanguage)
|
||||||
|
ctx = locale.SetContentLanguageToContext(ctx, userPreferredLanguage)
|
||||||
|
|
||||||
|
req.Request = req.Request.WithContext(ctx)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alerts show for 1 session only!
|
// Alerts show for 1 session only!
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user