diff --git a/handlers/auth.go b/handlers/auth.go index e86c029..3f73949 100644 --- a/handlers/auth.go +++ b/handlers/auth.go @@ -131,6 +131,13 @@ func Login(c *fiber.Ctx) error { return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "Successfully logged in", "username": u.Username, "user_id": userId}) } -//func ValidateToken(c *fiber.Ctx) error { -// -//} +func ValidateToken(c *fiber.Ctx) error { + username := c.Locals("username") + userId := c.Locals("user_id") + + if userId == nil || username == nil { + fmt.Println("userId or username is nil") + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid token"}) + } + return c.Status(fiber.StatusOK).JSON(fiber.Map{"message": "authorized", "username": c.Locals("username").(string), "user_id": c.Locals("userId").(string)}) +} diff --git a/middleware/protected.go b/middleware/protected.go index c6c6103..2065a4c 100644 --- a/middleware/protected.go +++ b/middleware/protected.go @@ -3,7 +3,9 @@ package middleware import ( jwtware "github.com/gofiber/contrib/jwt" "github.com/gofiber/fiber/v2" + "github.com/golang-jwt/jwt/v5" "os" + "relay-server/model" ) func Protected() fiber.Handler { @@ -11,6 +13,15 @@ func Protected() fiber.Handler { SigningKey: jwtware.SigningKey{Key: []byte(os.Getenv("JWT_SECRET"))}, ErrorHandler: jwtError, TokenLookup: "cookie:token", + Claims: &model.UserClaims{}, + SuccessHandler: func(c *fiber.Ctx) error { + user := c.Locals("user").(*jwt.Token) + claims := user.Claims.(*model.UserClaims) + + c.Locals("userId", claims.UserId) + c.Locals("username", claims.Username) + return c.Next() + }, }) } diff --git a/model/model.go b/model/model.go index d4998f6..88b1910 100644 --- a/model/model.go +++ b/model/model.go @@ -1,5 +1,7 @@ package model +import "github.com/golang-jwt/jwt/v5" + type LoginStruct struct { Username string `json:"username" xml:"username" form:"username"` Password string `json:"password" xml:"password" form:"password"` @@ -9,3 +11,9 @@ type SignupStruct struct { Username string `json:"username" xml:"username" form:"username"` Password string `json:"password" xml:"password" form:"password"` } + +type UserClaims struct { + Username string `json:"username"` + UserId string `json:"user_id"` + jwt.RegisteredClaims +} diff --git a/router/router.go b/router/router.go index dcc7848..b3cb6e3 100644 --- a/router/router.go +++ b/router/router.go @@ -14,8 +14,8 @@ func SetupRoutes(app *fiber.App) { api := app.Group("/api", logger.New()) // Auth group - auth := api.Group("/auth") + auth := api.Group("/auth", middleware.Protected(), handlers.ValidateToken) auth.Post("/signup", handlers.Signup) auth.Post("/login", handlers.Login) - + auth.Get("/validate", handlers.ValidateToken) }