From 854fde1e4cda86042563459dd3e6fc293f13c33e Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 19 Oct 2019 22:34:33 +0200 Subject: [PATCH] Fixed panic when using link share and metrics --- pkg/models/user.go | 28 ---------------------------- pkg/routes/metrics.go | 31 ++++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/pkg/models/user.go b/pkg/models/user.go index 7d4b215345..7a0406b2c0 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -27,7 +27,6 @@ import ( "github.com/labstack/echo/v4" "golang.org/x/crypto/bcrypt" "reflect" - "time" ) // UserLogin Object to recive user credentials in JSON format @@ -207,33 +206,6 @@ func GetUserFromClaims(claims jwt.MapClaims) (user *User, err error) { return } -// UpdateActiveUsersFromContext updates the currently active users in redis -func UpdateActiveUsersFromContext(c echo.Context) (err error) { - user, err := GetCurrentUser(c) - if err != nil { - return - } - - allActiveUsers, err := metrics.GetActiveUsers() - if err != nil { - return - } - - var uupdated bool - for in, u := range allActiveUsers { - if u.UserID == user.ID { - allActiveUsers[in].LastSeen = time.Now() - uupdated = true - } - } - - if !uupdated { - allActiveUsers = append(allActiveUsers, &metrics.ActiveUser{UserID: user.ID, LastSeen: time.Now()}) - } - - return metrics.SetActiveUsers(allActiveUsers) -} - // CreateUser creates a new user and inserts it into the database func CreateUser(user *User) (newUser *User, err error) { diff --git a/pkg/routes/metrics.go b/pkg/routes/metrics.go index 821994c356..d5b338a112 100644 --- a/pkg/routes/metrics.go +++ b/pkg/routes/metrics.go @@ -22,8 +22,10 @@ import ( "code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/metrics" "code.vikunja.io/api/pkg/models" + v1 "code.vikunja.io/api/pkg/routes/api/v1" "github.com/labstack/echo/v4" "github.com/prometheus/client_golang/prometheus/promhttp" + "time" ) func setupMetrics(a *echo.Group) { @@ -91,7 +93,7 @@ func setupMetricsMiddleware(a *echo.Group) { return func(c echo.Context) error { // Update currently active users - if err := models.UpdateActiveUsersFromContext(c); err != nil { + if err := updateActiveUsersFromContext(c); err != nil { log.Error(err) return next(c) } @@ -99,3 +101,30 @@ func setupMetricsMiddleware(a *echo.Group) { } }) } + +// updateActiveUsersFromContext updates the currently active users in redis +func updateActiveUsersFromContext(c echo.Context) (err error) { + auth, err := v1.GetAuthFromClaims(c) + if err != nil { + return + } + + allActiveUsers, err := metrics.GetActiveUsers() + if err != nil { + return + } + + var uupdated bool + for in, u := range allActiveUsers { + if u.UserID == auth.GetID() { + allActiveUsers[in].LastSeen = time.Now() + uupdated = true + } + } + + if !uupdated { + allActiveUsers = append(allActiveUsers, &metrics.ActiveUser{UserID: auth.GetID(), LastSeen: time.Now()}) + } + + return metrics.SetActiveUsers(allActiveUsers) +}