| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package controllers
- import (
- "fwh-toolbox-server/domain"
- "fwh-toolbox-server/dto"
- "fwh-toolbox-server/services"
- "time"
- "github.com/gofiber/fiber/v2"
- "go.uber.org/zap"
- )
- var (
- // session cookie name
- sessionCookieName = "sid"
- )
- func Login(c *fiber.Ctx) error {
- var body dto.LoginParam
- if err := c.BodyParser(&body); err != nil {
- return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
- "code": 400,
- "message": "Invalid request body",
- })
- }
- auth, err := services.Login(body)
- if err != nil {
- zap.L().Error("登录请求错误。", zap.String("err", err.Error()))
- return JSONResponseNoData(c, 500, "Login error. (casdoor)")
- }
- // 设置 HttpOnly cookie 保存 sid
- c.Cookie(&fiber.Cookie{
- Name: sessionCookieName,
- Value: auth.SessionId,
- Expires: time.Now().Add(domain.SessionTTL),
- HTTPOnly: true,
- Secure: false, // production: true
- SameSite: "Lax",
- Path: "/fwh-toolbox/",
- })
- return JSONResponse(c, 0, "success", auth.AccessToken)
- }
- func GetSession(c *fiber.Ctx) error {
- sid := c.Cookies(sessionCookieName)
- if sid == "" {
- return c.Status(403).JSON(fiber.Map{"error": "no session"})
- }
- res, err := services.GetSession(sid)
- if err != nil {
- zap.L().Error("读取会话信息失败。", zap.String("err", err.Error()))
- return JSONResponseNoData(c, 403, "Get session error. (casdoor)")
- }
- return JSONResponse(c, 0, "success", res)
- }
- func RefreshToken(c *fiber.Ctx) error {
- sid := c.Cookies(sessionCookieName)
- if sid == "" {
- return c.Status(403).JSON(fiber.Map{"error": "no session"})
- }
- res, err := services.RefreshToken(sid)
- if err != nil {
- zap.L().Error("刷新Token失败。", zap.String("err", err.Error()))
- return JSONResponseNoData(c, 403, "Refresh token error. (casdoor)")
- }
- return JSONResponse(c, 0, "success", res)
- }
- func Logout(c *fiber.Ctx) error {
- sid := c.Cookies(sessionCookieName)
- err := services.Logout(sid)
- if err != nil {
- zap.L().Error("登出请求失败。", zap.String("err", err.Error()))
- return JSONResponseNoData(c, 500, "Logout error. (casdoor)")
- }
- // 清除 cookie
- c.Cookie(&fiber.Cookie{
- Name: sessionCookieName,
- Value: "",
- Expires: time.Now().Add(-time.Hour),
- HTTPOnly: true,
- Secure: false,
- Path: "/fwh-toolbox/",
- })
- return c.SendStatus(fiber.StatusNoContent)
- }
|