2025-03-27 16:27:41 +08:00

58 lines
1.4 KiB
Go

package handler
import (
"github.com/gofiber/fiber/v2"
"gitee.ltd/lxh/wechat-robot/internal/config"
"gitee.ltd/lxh/wechat-robot/internal/middleware"
)
// LoginPage 登录页面处理器
func LoginPage(c *fiber.Ctx) error {
// 如果已经认证,重定向到首页
if middleware.IsAuthenticated(c) {
return c.Redirect("/admin/robots")
}
return c.Render("auth/login", fiber.Map{
"Title": "登录",
"Error": c.Query("error"),
})
}
// LoginSubmit 处理登录表单提交
func LoginSubmit(c *fiber.Ctx) error {
// 获取提交的口令
token := c.FormValue("token")
// 从应用程序配置中获取认证配置
cfg, err := config.Load()
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, "无法加载配置")
}
// 验证口令
if !cfg.Auth.IsValidToken(token) {
return c.Redirect("/login?error=无效的口令")
}
// 设置认证会话
if err := middleware.SetAuthenticated(c, true); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, "无法设置会话")
}
// 重定向到机器人列表页面
return c.Redirect("/admin/robots")
}
// Logout 退出登录处理器
func Logout(c *fiber.Ctx) error {
// 清除认证状态
if err := middleware.SetAuthenticated(c, false); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, "无法清除会话")
}
// 重定向到登录页面
return c.Redirect("/login")
}