diff --git a/jwt/login.go b/jwt/login.go index dedf8ef..7db743e 100644 --- a/jwt/login.go +++ b/jwt/login.go @@ -44,11 +44,17 @@ func (tv *TokenVerifier) CreateToken(user *postgres.User) (string, error) { return t, nil } +var ( + ErrUnexpectedSigningMethod = fmt.Errorf("Unexpected signing method") + ErrInvalidToken = fmt.Errorf("Token is invalid") + ErrTokenExpired = fmt.Errorf("Token has expired") +) + // VerifyToken verifys a given string-token func (tv *TokenVerifier) VerifyToken(tokenString string) (budgeteer.Token, error) { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + return nil, fmt.Errorf("method '%v': %w", token.Header["alg"], ErrUnexpectedSigningMethod) } return []byte(secret), nil }) @@ -72,16 +78,16 @@ func (tv *TokenVerifier) VerifyToken(tokenString string) (budgeteer.Token, error func verifyToken(token *jwt.Token) (jwt.MapClaims, error) { if !token.Valid { - return nil, fmt.Errorf("Token is not valid") + return nil, ErrInvalidToken } claims, ok := token.Claims.(jwt.MapClaims) if !ok { - return nil, fmt.Errorf("Claims are not of Type MapClaims") + return nil, ErrInvalidToken } if !claims.VerifyExpiresAt(time.Now().Unix(), true) { - return nil, fmt.Errorf("Claims have expired") + return nil, ErrTokenExpired } return claims, nil