initial commit
This commit is contained in:
commit
e8da0f7874
15 files changed
+722
No files matched your search
@@ -0,0 +1,79 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"desq.com.ru/testjwtauth/handlers"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func setRTCookie(c *fiber.Ctx, RT string, expires time.Time) {
|
||||
c.Cookie(&fiber.Cookie{
|
||||
Name: "refreshToken",
|
||||
Value: RT,
|
||||
HTTPOnly: true,
|
||||
Expires: expires,
|
||||
})
|
||||
}
|
||||
|
||||
func CreateToken(c *fiber.Ctx) error {
|
||||
DB := c.Locals("db").(*gorm.DB)
|
||||
|
||||
uID := c.Params("id")
|
||||
userID, err := uuid.Parse(uID)
|
||||
if err != nil {
|
||||
return c.Status(500).SendString(err.Error())
|
||||
}
|
||||
|
||||
expires := time.Now().Add(time.Hour * 24)
|
||||
|
||||
T, RT, err := handlers.CreateToken(DB, userID, c.IP(), expires.Unix())
|
||||
if err != nil {
|
||||
return c.Status(500).SendString(err.Error())
|
||||
}
|
||||
|
||||
setRTCookie(c, RT, expires)
|
||||
|
||||
return c.Status(201).JSON(fiber.Map{
|
||||
"token": T,
|
||||
})
|
||||
}
|
||||
|
||||
func RefreshToken(c *fiber.Ctx) error {
|
||||
DB := c.Locals("db").(*gorm.DB)
|
||||
claims := c.Locals("user").(*jwt.Token).Claims.(jwt.MapClaims)
|
||||
|
||||
RT := c.Cookies("refreshToken")
|
||||
if RT == "" {
|
||||
return c.Status(400).SendString("Refresh cookie must be set")
|
||||
}
|
||||
|
||||
uID := claims["userId"].(string)
|
||||
|
||||
userID, err := uuid.Parse(uID)
|
||||
if err != nil {
|
||||
return c.Status(500).SendString(err.Error())
|
||||
}
|
||||
|
||||
err = handlers.RefreshToken(DB, userID, claims, RT, c.IP())
|
||||
if err != nil {
|
||||
return c.Status(401).SendString(err.Error())
|
||||
}
|
||||
|
||||
expires := time.Now().Add(time.Hour * 24)
|
||||
|
||||
t, RT, err := handlers.CreateToken(DB, userID, c.IP(), expires.Unix())
|
||||
if err != nil {
|
||||
return c.Status(500).SendString(err.Error())
|
||||
}
|
||||
|
||||
setRTCookie(c, RT, expires)
|
||||
|
||||
return c.Status(200).JSON(fiber.Map{
|
||||
"token": t,
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user