فهرست منبع

Show last login and session creation date in current timezone

Frédéric Guillot 8 سال پیش
والد
کامیت
609c57332e
6فایلهای تغییر یافته به همراه41 افزوده شده و 6 حذف شده
  1. 2 0
      api/user.go
  2. 16 0
      model/user.go
  3. 20 4
      model/user_session.go
  4. 1 2
      storage/user.go
  5. 1 0
      ui/session.go
  6. 1 0
      ui/user.go

+ 2 - 0
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)
 }
 

+ 16 - 0
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)
+	}
+}

+ 20 - 4
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)
+	}
+}

+ 1 - 2
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"
 )
 

+ 1 - 0
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(),

+ 1 - 0
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",