From 8e5302b88a0025df33f2347d1efc90c26726a22c Mon Sep 17 00:00:00 2001 From: slaventius Date: Tue, 28 Feb 2023 15:48:23 +0300 Subject: [PATCH] * --- internal/auth.go | 57 +++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/internal/auth.go b/internal/auth.go index bd2d70c..65c005d 100644 --- a/internal/auth.go +++ b/internal/auth.go @@ -67,9 +67,31 @@ func (s *AuthServer) GracefulStop() error { return s.db.Close() } +// Парсинг токена +func (s *AuthServer) parseToken(token string) (*jwt.Token, error) { + return jwt.Parse(token, func(atoken *jwt.Token) (interface{}, error) { + if _, ok := atoken.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, errors.New("there was an error in parsing") + } + + return []byte(s.config.Auth.SecretKey), nil + }) +} + +// Проверка срока жизни токена +func (s *AuthServer) verifyExpirationToken(token *jwt.Token) error { + now := float64(time.Now().Unix()) + expiration := token.Claims.(jwt.MapClaims)["exp"].(float64) + if expiration < now { + return errors.New("the token has expired") + } + + return nil +} + func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + // ctx := r.Context() // Получим и проверим идентификатор сессии authorizationHeader := r.Header.Get(HeaderAuthToken) @@ -86,14 +108,7 @@ func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { return } else { - token := authorizationHeaderAttributes[1] - tokenParsed, err := jwt.Parse(token, func(atoken *jwt.Token) (interface{}, error) { - if _, ok := atoken.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, errors.New("there was an error in parsing") - } - - return []byte(s.config.Auth.SecretKey), nil - }) + tokenParsed, err := s.parseToken(authorizationHeaderAttributes[1]) if err != nil { s.logger.Error(err.Error()) @@ -105,13 +120,8 @@ func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { } // - now := float64(time.Now().Unix()) - expiration := tokenParsed.Claims.(jwt.MapClaims)["exp"].(float64) - - if expiration < now { - erf := errors.New("the token has expired") - - // + erf := s.verifyExpirationToken(tokenParsed) + if erf != nil { s.logger.Error(erf.Error()) // @@ -122,22 +132,19 @@ func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { } // - ctx = context.WithValue(ctx, ContextKey("email"), tokenParsed.Claims.(jwt.MapClaims)["email"]) - ctx = context.WithValue(ctx, ContextKey(HeaderAuthToken), token) - - // - next.ServeHTTP(w, r.WithContext(ctx)) + // next.ServeHTTP(w, r.WithContext(ctx)) + next.ServeHTTP(w, r) } }) } func healthz(s *AuthServer) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + // ctx := r.Context() - // - s.logger.Info(ctx.Value(ContextKey(HeaderAuthToken))) - s.logger.Info(ctx.Value(ContextKey("email"))) + // // + // s.logger.Info(ctx.Value(ContextKey(HeaderAuthToken))) + // s.logger.Info(ctx.Value(ContextKey("email"))) w.WriteHeader(http.StatusOK) w.Write([]byte("ok"))