irc working

This commit is contained in:
2026-03-11 20:08:33 +01:00
parent 58fc553f04
commit afdc3f96a0
4 changed files with 47 additions and 32 deletions
+29 -10
View File
@@ -12,32 +12,51 @@ import (
var secretKey = []byte("replace-with-env-variable")
type UserClaims struct {
Name string `json:"name"`
Color string `json:"color"`
jwt.RegisteredClaims
}
func GetToken(user *User) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256,
jwt.RegisteredClaims{
Subject: strconv.Itoa(int(user.Id)),
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),
IssuedAt: jwt.NewNumericDate(time.Now()),
UserClaims{
Name: user.Name,
Color: user.Color,
RegisteredClaims: jwt.RegisteredClaims{
Subject: strconv.Itoa(int(user.Id)),
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour)),
IssuedAt: jwt.NewNumericDate(time.Now()),
},
},
)
return token.SignedString(secretKey)
}
func GetSubject(tokenString string) (string, error) {
token, err := jwt.ParseWithClaims(tokenString, &jwt.RegisteredClaims{}, func(t *jwt.Token) (interface{}, error) {
func GetUserFromToken(tokenString string) (User, error) {
token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(t *jwt.Token) (interface{}, error) {
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
}
return secretKey, nil
})
if err != nil {
return "", err
return User{}, err
}
claims, ok := token.Claims.(*jwt.RegisteredClaims)
claims, ok := token.Claims.(*UserClaims)
if !ok || !token.Valid {
return "", errors.New("invalid token")
return User{}, errors.New("invalid token")
}
return claims.Subject, nil
id, err := strconv.ParseUint(claims.Subject, 10, 32)
if err != nil {
return User{}, fmt.Errorf("invalid subject: %w", err)
}
return User{
Id: uint32(id),
Name: claims.Name,
Color: claims.Color,
}, nil
}