slaventius 2 years ago
parent 5d4b4f1439
commit 8e5302b88a
  1. 57
      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"))

Loading…
Cancel
Save