package server import ( "code.smartsheep.studio/hydrogen/identity/pkg/security" "code.smartsheep.studio/hydrogen/identity/pkg/services" "github.com/gofiber/fiber/v2" "strings" ) func authMiddleware(c *fiber.Ctx) error { var token string if cookie := c.Cookies(security.CookieAccessKey); len(cookie) > 0 { token = cookie } if header := c.Get(fiber.HeaderAuthorization); len(header) > 0 { tk := strings.Replace(header, "Bearer", "", 1) token = strings.TrimSpace(tk) } c.Locals("token", token) if err := authFunc(c); err != nil { return err } return c.Next() } func authFunc(c *fiber.Ctx, overrides ...string) error { var token string if len(overrides) > 0 { token = overrides[0] } else { if tk, ok := c.Locals("token").(string); !ok { return fiber.NewError(fiber.StatusUnauthorized) } else { token = tk } } rtk := c.Cookies(security.CookieRefreshKey) if user, atk, rtk, err := services.Authenticate(token, rtk, 0); err == nil { if atk != token { security.SetJwtCookieSet(c, atk, rtk) } c.Locals("principal", user) return nil } else { return err } }