Adding JWT functionality

This commit is contained in:
2026-04-02 17:02:58 -04:00
parent 82bb5a6356
commit 53f2274c87

55
jwt.go
View File

@@ -1,22 +1,67 @@
package libshared package libshared
import ( import (
"crypto/rsa"
"log"
"os"
"time" "time"
"github.com/golang-jwt/jwt/v5" "github.com/golang-jwt/jwt/v5"
) )
func LoadPrivateKey(path string) (*rsa.PrivateKey, error) {
keyData, err := os.ReadFile(path)
if err != nil {
log.Fatal("Error reading private key file:", err)
return nil, err
}
privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(keyData)
if err != nil {
log.Fatal("Error parsing private key:", err)
return nil, err
}
return privateKey, nil
}
func LoadPublicKey(path string) (*rsa.PublicKey, error) {
keyData, err := os.ReadFile(path)
if err != nil {
log.Fatal("Error reading public key file:", err)
return nil, err
}
publicKey, err := jwt.ParseRSAPublicKeyFromPEM(keyData)
if err != nil {
log.Fatal("Error parsing public key:", err)
return nil, err
}
return publicKey, nil
}
// CreateJWT generates a signed JWT // CreateJWT generates a signed JWT
func CreateJWT(secret []byte, account string, user string, purpose string) (string, error) { func CreateJWT(privateKey *rsa.PrivateKey, account string, user string, purpose string) (string, error) {
now := time.Now()
claims := jwt.MapClaims{ claims := jwt.MapClaims{
"sub": user, // subject (user id) "sub": user, // subject (user id)
"exp": time.Now().Add(time.Hour).Unix(), // expiration "exp": now.Add(time.Hour).Unix(), // expiration
"iat": time.Now().Unix(), // issued at "iat": now.Unix(), // issued at
"purpose": purpose, "purpose": purpose,
"account": account, "account": account,
} }
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
return token.SignedString(secret) signedToken, err := token.SignedString(privateKey)
if err != nil {
log.Println("Error signing token:", err)
return "", err
}
return signedToken, err
} }