From e022d60b61378f6f25eabc40770dbdad79b9389f Mon Sep 17 00:00:00 2001 From: Piotr Biernat Date: Wed, 22 Oct 2025 13:41:44 +0200 Subject: [PATCH] Added GetTokenFromAuthorizationHeader in AuthService --- src/internal/service/auth.go | 67 ++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/src/internal/service/auth.go b/src/internal/service/auth.go index 622d6c5..40f666f 100644 --- a/src/internal/service/auth.go +++ b/src/internal/service/auth.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" @@ -17,6 +18,7 @@ var ( ErrLoginIncorrect = errors.New("login incorrect") ErrUnableToCacheToken = errors.New("unable to save tokens in cache") ErrInvalidAccessToken = errors.New("invalid access token") + ErrParsingAccessToken = errors.New("error while parsing access token") ) func init() { @@ -55,6 +57,12 @@ func (a *Auth) Login(login, passwd string) (string, error) { return "", ErrUnableToCacheToken } + // REFACTOR: save uid in cache under user:$ACCES_TOKEN key + res := a.cache.Set(context.Background(), "user:"+accessToken, user.ID, accessTokenExpireTime) + if err := res.Err(); err != nil { + fmt.Println("failed to save user:$ACCESS_TOKEN in cache: ", err.Error()) + } + return accessToken, nil } @@ -64,22 +72,29 @@ func (a *Auth) RefreshToken(accessToken string) (string, error) { return "", ErrInvalidAccessToken } - id := claims["sub"] + userID := claims["sub"] - newAccessToken, _ := jwtSrv.CreateAccessToken(id.(string)) - newRefreshToken, _ := jwtSrv.CreateRefreshToken(id.(string)) - if err = a.saveTokensToCache(id.(string), newAccessToken, newRefreshToken); err != nil { + newAccessToken, _ := jwtSrv.CreateAccessToken(userID.(string)) + newRefreshToken, _ := jwtSrv.CreateRefreshToken(userID.(string)) + if err = a.saveTokensToCache(userID.(string), newAccessToken, newRefreshToken); err != nil { return "", ErrUnableToCacheToken } + // REFACTOR + del := a.cache.Del(context.Background(), "user:"+accessToken) + if err := del.Err(); err != nil { + fmt.Println("failed to invalidate user:$ACCESS_TOKEN from cache: ", err.Error()) + } + + // REFACTOR: save uid in cache under user:$ACCES_TOKEN key + res := a.cache.Set(context.Background(), "user:"+newAccessToken, userID, accessTokenExpireTime) + if err := res.Err(); err != nil { + fmt.Println("failed to save user:$ACCESS_TOKEN in cache: ", err.Error()) + } + return newAccessToken, nil } -func (a *Auth) VerifyToken(token string) (string, error) { - - return token, nil -} - func (a *Auth) Register(email, login, passwd string) (string, error) { passwd, _ = passSrv.Hash(passwd) @@ -95,15 +110,39 @@ func (a *Auth) Register(email, login, passwd string) (string, error) { return id, nil } -func (a *Auth) saveTokensToCache(id, accessToken, refreshToken string) error { - res := a.cache.Set(context.Background(), "auth:access_token:"+id, accessToken, accessTokenExpireTime) - if err := res.Err(); err != nil { - fmt.Println("failed to save access token in cache: ", err.Error()) +func (a *Auth) GetTokenFromAuthorizationHeader(header string) (string, error) { + split := strings.Split(header, " ") + if len(split) != 2 { + return "", ErrParsingAccessToken } - res = a.cache.Set(context.Background(), "auth:refresh_token:"+id, refreshToken, refreshTokenExpireTime) + return split[1], nil +} + +func (a *Auth) GetUIDByAccesssToken(aToken string) (string, error) { + res := a.cache.Get(context.Background(), "user:"+aToken) + if err := res.Err(); err != nil { + return "", err + } + + uid, _ := res.Result() + + return uid, nil +} + +func (a *Auth) saveTokensToCache(id, aToken, rToken string) error { + res := a.cache.Set(context.Background(), "auth:access_token:"+id, aToken, accessTokenExpireTime) + if err := res.Err(); err != nil { + fmt.Println("failed to save access token in cache: ", err.Error()) + + return err + } + + res = a.cache.Set(context.Background(), "auth:refresh_token:"+id, rToken, refreshTokenExpireTime) if err := res.Err(); err != nil { fmt.Println("failed to save refresh token in cache: ", err.Error()) + + return err } return nil