From a9b84f3f3b1d92335188d43048587e32e0921079 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Wed, 2 Apr 2025 19:31:12 +0200 Subject: Init login and frontend --- api/auth/auth.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 api/auth/auth.go (limited to 'api/auth/auth.go') diff --git a/api/auth/auth.go b/api/auth/auth.go new file mode 100644 index 0000000..23b4f53 --- /dev/null +++ b/api/auth/auth.go @@ -0,0 +1,48 @@ +package auth + +import ( + "github.com/golang-jwt/jwt/v5" + "os" + "time" +) + +var jwtKey = []byte(os.Getenv("JWT_SECRET")) + +type Claims struct { + UserID int `json:"user_id"` + jwt.RegisteredClaims +} + +func GenerateJWT(userID int) (string, error) { + expirationTime := time.Now().Add(5 * time.Hour) + claims := &Claims{ + UserID: userID, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(expirationTime), + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + tokenString, err := token.SignedString(jwtKey) + if err != nil { + return "", err + } + return tokenString, nil +} + +func ValidateJWT(tokenString string) (*Claims, error) { + claims := &Claims{} + token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { + return jwtKey, nil + }) + + if err != nil { + return nil, err + } + + if !token.Valid { + return nil, err + } + + return claims, nil +} -- cgit v1.2.3-18-g5258