Skip to content
Snippets Groups Projects
Commit 7559e661 authored by Neil-Jocelyn Schark's avatar Neil-Jocelyn Schark
Browse files

Check amount of tokens of user

parent 4a25ca03
No related branches found
No related tags found
1 merge request!977Resolve "Improve token usage for users"
This commit is part of merge request !977. Comments created here will be created in the context of that merge request.
...@@ -447,6 +447,7 @@ func ensureDefaultUserExists() error { ...@@ -447,6 +447,7 @@ func ensureDefaultUserExists() error {
} }
func deletAllExpiredUserTokens() error { func deletAllExpiredUserTokens() error {
var usersToUpdate []rbac.User
// Temporarly create JWT manager just to evaluate tokens here // Temporarly create JWT manager just to evaluate tokens here
jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration) jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration)
...@@ -454,7 +455,8 @@ func deletAllExpiredUserTokens() error { ...@@ -454,7 +455,8 @@ func deletAllExpiredUserTokens() error {
if err != nil { if err != nil {
return fmt.Errorf("error getting all users while deleting expires user tokens: %w", err) return fmt.Errorf("error getting all users while deleting expires user tokens: %w", err)
} }
for i, user := range users {
for _, user := range users {
tokens := user.GetTokens() tokens := user.GetTokens()
for _, token := range tokens { for _, token := range tokens {
claims, err := jwtManager.GetClaimsFromToken(token) claims, err := jwtManager.GetClaimsFromToken(token)
...@@ -462,15 +464,16 @@ func deletAllExpiredUserTokens() error { ...@@ -462,15 +464,16 @@ func deletAllExpiredUserTokens() error {
return fmt.Errorf("error getting claims from token while deleting expired user tokens: %w", err) return fmt.Errorf("error getting claims from token while deleting expired user tokens: %w", err)
} }
if claims.ExpiresAt < time.Now().Unix() { if claims.ExpiresAt < time.Now().Unix() {
err := users[i].RemoveToken(token) err := user.RemoveToken(token)
if err != nil { if err != nil {
return fmt.Errorf("error removing token while deleting expired user tokens: %w", err) return fmt.Errorf("error removing token while deleting expired user tokens: %w", err)
} }
usersToUpdate = append(usersToUpdate, user)
} }
} }
} }
for _, user := range users { for _, user := range usersToUpdate {
err := c.userService.Update(user) err := c.userService.Update(user)
if err != nil { if err != nil {
return fmt.Errorf("error updating user while deleting expired user tokens: %w", err) return fmt.Errorf("error updating user while deleting expired user tokens: %w", err)
......
...@@ -7,6 +7,7 @@ import ( ...@@ -7,6 +7,7 @@ import (
"time" "time"
apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac"
"code.fbi.h-da.de/danet/gosdn/controller/config"
rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" rbacInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac"
"code.fbi.h-da.de/danet/gosdn/controller/metrics" "code.fbi.h-da.de/danet/gosdn/controller/metrics"
"code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/rbac"
...@@ -93,7 +94,9 @@ func (s AuthServer) Login(ctx context.Context, request *apb.LoginRequest) (*apb. ...@@ -93,7 +94,9 @@ func (s AuthServer) Login(ctx context.Context, request *apb.LoginRequest) (*apb.
} }
userToUpdate.AddToken(token) userToUpdate.AddToken(token)
for len(userToUpdate.GetTokens()) > config.MaxTokensPerUser {
userToUpdate.RemoveToken(userToUpdate.GetTokens()[0])
}
err = s.userService.Update(userToUpdate) err = s.userService.Update(userToUpdate)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -100,10 +100,10 @@ func TestMain(m *testing.M) { ...@@ -100,10 +100,10 @@ func TestMain(m *testing.M) {
// a user and role and update the user because of the login. After then only logins are done, no user and role creations. // a user and role and update the user because of the login. After then only logins are done, no user and role creations.
// This means that this will block after trying once, because of the three attempts to read from eventChannels. // This means that this will block after trying once, because of the three attempts to read from eventChannels.
_ = <-application.addEventChannel <-application.addEventChannel
_ = <-application.addEventChannel <-application.addEventChannel
_ = <-application.addEventChannel <-application.addEventChannel
_ = <-application.updateEventChannel <-application.updateEventChannel
m.Run() m.Run()
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment