Skip to content
Snippets Groups Projects
Commit 23fa412a authored by Neil-Jocelyn Schark's avatar Neil-Jocelyn Schark Committed by Neil-Jocelyn Schark
Browse files

Check amount of tokens of user

parent a41353b8
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 {
}
func deletAllExpiredUserTokens() error {
var usersToUpdate []rbac.User
// Temporarly create JWT manager just to evaluate tokens here
jwtManager := rbacImpl.NewJWTManager(config.JWTSecret, config.JWTDuration)
......@@ -454,7 +455,8 @@ func deletAllExpiredUserTokens() error {
if err != nil {
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()
for _, token := range tokens {
claims, err := jwtManager.GetClaimsFromToken(token)
......@@ -462,15 +464,16 @@ func deletAllExpiredUserTokens() error {
return fmt.Errorf("error getting claims from token while deleting expired user tokens: %w", err)
}
if claims.ExpiresAt < time.Now().Unix() {
err := users[i].RemoveToken(token)
err := user.RemoveToken(token)
if err != nil {
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)
if err != nil {
return fmt.Errorf("error updating user while deleting expired user tokens: %w", err)
......
......@@ -7,6 +7,7 @@ import (
"time"
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"
"code.fbi.h-da.de/danet/gosdn/controller/metrics"
"code.fbi.h-da.de/danet/gosdn/controller/rbac"
......@@ -93,7 +94,9 @@ func (s AuthServer) Login(ctx context.Context, request *apb.LoginRequest) (*apb.
}
userToUpdate.AddToken(token)
for len(userToUpdate.GetTokens()) > config.MaxTokensPerUser {
userToUpdate.RemoveToken(userToUpdate.GetTokens()[0])
}
err = s.userService.Update(userToUpdate)
if err != nil {
return nil, err
......
......@@ -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.
// 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.updateEventChannel
<-application.addEventChannel
<-application.addEventChannel
<-application.addEventChannel
<-application.updateEventChannel
m.Run()
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment