58 lines
1.4 KiB
Go
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")
|
|
}
|