diff --git a/api/user.go b/api/user.go index 96571b03..359a9f70 100644 --- a/api/user.go +++ b/api/user.go @@ -100,6 +100,7 @@ func (c *Controller) Users(ctx *handler.Context, request *handler.Request, respo return } + users.UseTimezone(ctx.UserTimezone()) response.JSON().Standard(users) } @@ -127,6 +128,7 @@ func (c *Controller) UserByID(ctx *handler.Context, request *handler.Request, re return } + user.UseTimezone(ctx.UserTimezone()) response.JSON().Standard(user) } diff --git a/model/user.go b/model/user.go index aa1156d3..d2283f1a 100644 --- a/model/user.go +++ b/model/user.go @@ -7,6 +7,8 @@ package model import ( "errors" "time" + + "github.com/miniflux/miniflux/timezone" ) // User represents a user in the system. @@ -99,5 +101,19 @@ func (u *User) Merge(override *User) { } } +// UseTimezone converts last login date to the given timezone. +func (u *User) UseTimezone(tz string) { + if u.LastLoginAt != nil { + *u.LastLoginAt = timezone.Convert(tz, *u.LastLoginAt) + } +} + // Users represents a list of users. type Users []*User + +// UseTimezone converts last login timestamp of all users to the given timezone. +func (u Users) UseTimezone(tz string) { + for _, user := range u { + user.UseTimezone(tz) + } +} diff --git a/model/user_session.go b/model/user_session.go index 7112159c..51b25438 100644 --- a/model/user_session.go +++ b/model/user_session.go @@ -4,8 +4,12 @@ package model -import "time" -import "fmt" +import ( + "fmt" + "time" + + "github.com/miniflux/miniflux/timezone" +) // UserSession represents a user session in the system. type UserSession struct { @@ -17,9 +21,21 @@ type UserSession struct { IP string } -func (s *UserSession) String() string { - return fmt.Sprintf(`ID="%d", UserID="%d", IP="%s", Token="%s"`, s.ID, s.UserID, s.IP, s.Token) +func (u *UserSession) String() string { + return fmt.Sprintf(`ID="%d", UserID="%d", IP="%s", Token="%s"`, u.ID, u.UserID, u.IP, u.Token) +} + +// UseTimezone converts creation date to the given timezone. +func (u *UserSession) UseTimezone(tz string) { + u.CreatedAt = timezone.Convert(tz, u.CreatedAt) } // UserSessions represents a list of sessions. type UserSessions []*UserSession + +// UseTimezone converts creation date of all sessions to the given timezone. +func (u UserSessions) UseTimezone(tz string) { + for _, session := range u { + session.UseTimezone(tz) + } +} diff --git a/storage/user.go b/storage/user.go index 41e565af..fea59d4f 100644 --- a/storage/user.go +++ b/storage/user.go @@ -11,11 +11,10 @@ import ( "strings" "time" - "github.com/lib/pq/hstore" - "github.com/miniflux/miniflux/model" "github.com/miniflux/miniflux/timer" + "github.com/lib/pq/hstore" "golang.org/x/crypto/bcrypt" ) diff --git a/ui/session.go b/ui/session.go index 4134ac61..7ceb8e55 100644 --- a/ui/session.go +++ b/ui/session.go @@ -24,6 +24,7 @@ func (c *Controller) ShowSessions(ctx *handler.Context, request *handler.Request return } + sessions.UseTimezone(user.Timezone) response.HTML().Render("sessions", args.Merge(tplParams{ "sessions": sessions, "currentSessionToken": ctx.UserSessionToken(), diff --git a/ui/user.go b/ui/user.go index caeb4bfd..b1f98bdb 100644 --- a/ui/user.go +++ b/ui/user.go @@ -34,6 +34,7 @@ func (c *Controller) ShowUsers(ctx *handler.Context, request *handler.Request, r return } + users.UseTimezone(user.Timezone) response.HTML().Render("users", args.Merge(tplParams{ "users": users, "menu": "settings",