From fbd23fe2cf2e978c915e8fd5ea1bd2d8f9bf239d Mon Sep 17 00:00:00 2001 From: grngxd <36968271+grngxd@users.noreply.github.com> Date: Tue, 6 May 2025 21:34:26 +0100 Subject: [PATCH] idk but it did something --- internal/auth/client/client.go | 8 +++--- internal/auth/jwt.go | 48 ++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/internal/auth/client/client.go b/internal/auth/client/client.go index ae172d9..3a922bc 100644 --- a/internal/auth/client/client.go +++ b/internal/auth/client/client.go @@ -30,10 +30,10 @@ func New(redirectUri, clientId, clientSecret string) Client { } func (c Client) GetUser(t auth.TokenResponse) (auth.User, error) { - user := auth.User { - Blacklisted: false, - CreatedAt: time.Now(), - } + user := auth.User{ + Blacklisted: false, + CreatedAt: time.Now(), + } req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/%s", api, "users/@me"), nil) diff --git a/internal/auth/jwt.go b/internal/auth/jwt.go index 6a01712..9e7aec2 100644 --- a/internal/auth/jwt.go +++ b/internal/auth/jwt.go @@ -1,6 +1,7 @@ package auth import ( + "encoding/json" "fmt" "net/http" "strings" @@ -20,30 +21,45 @@ func GenerateJWT(key string, user User, expiryTimestamp uint64) (string, error) } func invalidAuth(c *gin.Context) { - c.String(http.StatusUnauthorized, "Unauthorized.") - c.Abort() + c.String(http.StatusUnauthorized, "Unauthorized.") + c.Abort() } func JwtMiddleware(secret string) gin.HandlerFunc { - return func(c *gin.Context) { - jwtSplit := strings.Split(c.GetHeader("Authorization"), " ") + return func(c *gin.Context) { + jwtSplit := strings.Split(c.GetHeader("Authorization"), " ") - if jwtSplit[0] != "Bearer" { - invalidAuth(c) - return - } + if len(jwtSplit) < 2 || jwtSplit[0] != "Bearer" { + invalidAuth(c) + return + } - claims, err := ValidateJWT(jwtSplit[1], secret) + claims, err := ValidateJWT(jwtSplit[1], secret) + if err != nil { + invalidAuth(c) + return + } - if err != nil { - invalidAuth(c) - return - } + if userClaims, ok := claims["user"].(map[string]interface{}); ok { + userJSON, err := json.Marshal(userClaims) // Convert map to JSON + if err != nil { + invalidAuth(c) + return + } - c.Set("claims", claims) + var user User + err = json.Unmarshal(userJSON, &user) + if err != nil { + invalidAuth(c) + return + } - c.Next() - } + claims["user"] = user + } + + c.Set("claims", claims) + c.Next() + } } func ValidateJWT(jwtString, key string) (jwt.MapClaims, error) {