// GenerateJWTToken generates a JWT token for a given UserID and signs it with // the given private key. The token will be valid for 3 days. func GenerateJWTToken(user models.User) (string, error) { if user.PrivateKey == "" { privateKey, err := GenerateNewPrivateKey() if err != nil { return "", err } user.PrivateKey = PrivateKeyToString(privateKey) user.Save() if err != nil { return "", err } } privateKey, err := StringToPrivateKey(user.PrivateKey) if err != nil { return "", err } token := jwt.New(jwt.SigningMethodRS256) token.Claims["user"] = user.ID token.Header["user"] = user.ID token.Claims["exp"] = time.Now().Add(time.Hour * 72).Unix() token.Header["exp"] = token.Claims["exp"] tokenString, err := token.SignedString(privateKey) return tokenString, err }