github.com/wrgl/wrgl@v0.14.0/pkg/auth/fs/jwt.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright © 2022 Wrangle Ltd
     3  
     4  package authfs
     5  
     6  import (
     7  	"fmt"
     8  	"time"
     9  
    10  	"github.com/golang-jwt/jwt"
    11  	"github.com/wrgl/wrgl/pkg/auth"
    12  )
    13  
    14  func createIDToken(email, name string, jwtSecret []byte, duration time.Duration) (string, error) {
    15  	claims := &auth.Claims{
    16  		StandardClaims: jwt.StandardClaims{
    17  			Issuer:    "Wrgld",
    18  			ExpiresAt: time.Now().Add(duration).Unix(),
    19  			IssuedAt:  time.Now().Unix(),
    20  		},
    21  		Email: email,
    22  		Name:  name,
    23  	}
    24  	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    25  	return token.SignedString(jwtSecret)
    26  }
    27  
    28  func validateIDToken(tokenString string, jwtSecret []byte) (claims *auth.Claims, err error) {
    29  	token, err := jwt.ParseWithClaims(tokenString, &auth.Claims{}, func(token *jwt.Token) (interface{}, error) {
    30  		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
    31  			return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
    32  		}
    33  		return jwtSecret, nil
    34  	})
    35  	if err != nil {
    36  		return
    37  	}
    38  	if claims, ok := token.Claims.(*auth.Claims); ok && token.Valid {
    39  		return claims, nil
    40  	}
    41  	return nil, fmt.Errorf("invalid token")
    42  }