| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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 Fail(c, "Invalid request body")
- }
- auth, err := services.Login(body)
- if err != nil {
- zap.L().Error("登录请求错误。", zap.String("err", err.Error()))
- return Error(c, "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 Success(c, auth.AccessToken)
- }
- func GetSession(c *fiber.Ctx) error {
- sid := c.Cookies(sessionCookieName)
- if sid == "" {
- return Forbidden(c, "no session")
- }
- res, err := services.GetSession(sid)
- if err != nil {
- zap.L().Error("读取会话信息失败。", zap.String("err", err.Error()))
- return Forbidden(c, "Get session error. (casdoor)")
- }
- return Success(c, res)
- }
- func RefreshToken(c *fiber.Ctx) error {
- sid := c.Cookies(sessionCookieName)
- if sid == "" {
- return Forbidden(c, "no session")
- }
- res, err := services.RefreshToken(sid)
- if err != nil {
- zap.L().Error("刷新Token失败。", zap.String("err", err.Error()))
- return Forbidden(c, "Refresh token error. (casdoor)")
- }
- return Success(c, 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 Error(c, "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 NoContent(c)
- }
|