diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-01-18 21:53:31 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-01-20 13:25:20 -0800 |
commit | bdcc4134fa37a071d696afdcaadf21ffa5f3c323 (patch) | |
tree | f4a5d31f140713bd38c776d1f1c3aec152eaa0e8 /http | |
parent | 6302c3b2194e43add648724044bb293ea15c5116 (diff) |
Store language in session to show the login page translated
Diffstat (limited to 'http')
-rw-r--r-- | http/handler/context.go | 9 | ||||
-rw-r--r-- | http/handler/handler.go | 5 | ||||
-rw-r--r-- | http/middleware/context_keys.go | 3 | ||||
-rw-r--r-- | http/middleware/session.go | 1 | ||||
-rw-r--r-- | http/middleware/user_session.go | 10 |
5 files changed, 22 insertions, 6 deletions
diff --git a/http/handler/context.go b/http/handler/context.go index a04a816..35eb1ea 100644 --- a/http/handler/context.go +++ b/http/handler/context.go @@ -80,8 +80,12 @@ func (c *Context) LoggedUser() *model.User { // UserLanguage get the locale used by the current logged user. func (c *Context) UserLanguage() string { - user := c.LoggedUser() - return user.Language + if c.IsAuthenticated() { + user := c.LoggedUser() + return user.Language + } + + return c.getContextStringValue(middleware.UserLanguageContextKey) } // Translate translates a message in the current language. @@ -145,7 +149,6 @@ func (c *Context) getContextStringValue(key *middleware.ContextKey) string { return v.(string) } - logger.Error("[Core:Context] Missing key: %s", key) return "" } diff --git a/http/handler/handler.go b/http/handler/handler.go index 3dd1d1b..882e0bd 100644 --- a/http/handler/handler.go +++ b/http/handler/handler.go @@ -46,9 +46,10 @@ func (h *Handler) Use(f ControllerFunc) http.Handler { ctx := NewContext(r, h.store, h.router, h.translator) request := NewRequest(r) response := NewResponse(w, r, h.template) + language := ctx.UserLanguage() - if ctx.IsAuthenticated() { - h.template.SetLanguage(ctx.UserLanguage()) + if language != "" { + h.template.SetLanguage(language) } else { h.template.SetLanguage("en_US") } diff --git a/http/middleware/context_keys.go b/http/middleware/context_keys.go index 31ad286..887a90e 100644 --- a/http/middleware/context_keys.go +++ b/http/middleware/context_keys.go @@ -29,6 +29,9 @@ var ( // UserSessionTokenContextKey is the context key used to store the user session ID. UserSessionTokenContextKey = &ContextKey{"UserSessionToken"} + // UserLanguageContextKey is the context key to store user language. + UserLanguageContextKey = &ContextKey{"UserLanguageContextKey"} + // SessionIDContextKey is the context key used to store the session ID. SessionIDContextKey = &ContextKey{"SessionID"} diff --git a/http/middleware/session.go b/http/middleware/session.go index a0e9fbd..c3876f6 100644 --- a/http/middleware/session.go +++ b/http/middleware/session.go @@ -59,6 +59,7 @@ func (s *SessionMiddleware) Handler(next http.Handler) http.Handler { ctx = context.WithValue(ctx, OAuth2StateContextKey, session.Data.OAuth2State) ctx = context.WithValue(ctx, FlashMessageContextKey, session.Data.FlashMessage) ctx = context.WithValue(ctx, FlashErrorMessageContextKey, session.Data.FlashErrorMessage) + ctx = context.WithValue(ctx, UserLanguageContextKey, session.Data.Language) next.ServeHTTP(w, r.WithContext(ctx)) }) } diff --git a/http/middleware/user_session.go b/http/middleware/user_session.go index d67445f..820d093 100644 --- a/http/middleware/user_session.go +++ b/http/middleware/user_session.go @@ -50,7 +50,15 @@ func (s *UserSessionMiddleware) Handler(next http.Handler) http.Handler { func (s *UserSessionMiddleware) isPublicRoute(r *http.Request) bool { route := mux.CurrentRoute(r) switch route.GetName() { - case "login", "checkLogin", "stylesheet", "javascript", "oauth2Redirect", "oauth2Callback", "appIcon", "favicon", "webManifest": + case "login", + "checkLogin", + "stylesheet", + "javascript", + "oauth2Redirect", + "oauth2Callback", + "appIcon", + "favicon", + "webManifest": return true default: return false |