|
|
|
@ -81,6 +81,16 @@ func (s *AuthServer) parseToken(token string) (*jwt.Token, error) { |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Проверка наличия токена
|
|
|
|
|
func (s *AuthServer) verifyValueToken(tokenHeader string) (string, error) { |
|
|
|
|
authorizationHeaderAttributes := strings.Split(tokenHeader, " ") |
|
|
|
|
if tokenHeader == "" || len(authorizationHeaderAttributes) < 2 { |
|
|
|
|
return "", errors.New("token is empty") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return authorizationHeaderAttributes[1], nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Проверка срока жизни токена
|
|
|
|
|
func (s *AuthServer) verifyExpirationToken(token *jwt.Token) error { |
|
|
|
|
now := float64(time.Now().Unix()) |
|
|
|
@ -96,13 +106,9 @@ func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { |
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
// ctx := r.Context()
|
|
|
|
|
|
|
|
|
|
// Получим и проверим идентификатор сессии
|
|
|
|
|
authorizationHeader := r.Header.Get(HeaderAuthToken) |
|
|
|
|
authorizationHeaderAttributes := strings.Split(authorizationHeader, " ") |
|
|
|
|
if authorizationHeader == "" || len(authorizationHeaderAttributes) < 2 { |
|
|
|
|
err := errors.New("token is empty") |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
token, err := s.verifyValueToken(r.Header.Get(HeaderAuthToken)) |
|
|
|
|
if err != nil { |
|
|
|
|
s.logger.Error(err.Error()) |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
@ -110,34 +116,35 @@ func (s *AuthServer) requireAuth(next http.Handler) http.HandlerFunc { |
|
|
|
|
w.Write([]byte(err.Error())) |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} else { |
|
|
|
|
tokenParsed, err := s.parseToken(authorizationHeaderAttributes[1]) |
|
|
|
|
if err != nil { |
|
|
|
|
s.logger.Error(err.Error()) |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
w.WriteHeader(http.StatusUnauthorized) |
|
|
|
|
w.Write([]byte(err.Error())) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
//
|
|
|
|
|
tokenParsed, err := s.parseToken(token) |
|
|
|
|
if err != nil { |
|
|
|
|
s.logger.Error(err.Error()) |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
erf := s.verifyExpirationToken(tokenParsed) |
|
|
|
|
if erf != nil { |
|
|
|
|
s.logger.Error(erf.Error()) |
|
|
|
|
w.WriteHeader(http.StatusUnauthorized) |
|
|
|
|
w.Write([]byte(err.Error())) |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
w.WriteHeader(http.StatusUnauthorized) |
|
|
|
|
w.Write([]byte(erf.Error())) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
//
|
|
|
|
|
erf := s.verifyExpirationToken(tokenParsed) |
|
|
|
|
if erf != nil { |
|
|
|
|
s.logger.Error(erf.Error()) |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// next.ServeHTTP(w, r.WithContext(ctx))
|
|
|
|
|
next.ServeHTTP(w, r) |
|
|
|
|
w.WriteHeader(http.StatusUnauthorized) |
|
|
|
|
w.Write([]byte(erf.Error())) |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// next.ServeHTTP(w, r.WithContext(ctx))
|
|
|
|
|
next.ServeHTTP(w, r) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|