Files
Note Manager c8f03dd932 feat: 初始化云笔记项目
功能特性:
- Markdown 编辑与实时预览
- 代码语法高亮
- 目录树形结构管理
- 图片粘贴上传
- Markdown 文件导入导出
- 笔记密码保护
- 前后端分离架构

技术栈:
- Go + Gin + GORM + SQLite
- 原生 HTML/CSS/JavaScript
- Highlight.js
2026-05-08 15:07:22 +08:00

89 lines
1.9 KiB
Go

package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"note-manager/config"
"note-manager/service"
)
// AdminHandler 后台管理处理器
type AdminHandler struct {
noteSvc *service.NoteService
config *config.Config
}
// NewAdminHandler 创建后台管理处理器
func NewAdminHandler(noteSvc *service.NoteService, cfg *config.Config) *AdminHandler {
return &AdminHandler{noteSvc: noteSvc, config: cfg}
}
// Login 登录页面
func (h *AdminHandler) LoginPage(c *gin.Context) {
c.HTML(http.StatusOK, "login.html", gin.H{
"title": "后台管理登录",
})
}
// Login 验证登录
func (h *AdminHandler) Login(c *gin.Context) {
password := c.PostForm("password")
if password == h.config.AdminPass {
// 设置 cookie,有效期 7 天
c.SetCookie("admin_token", "authenticated", 7*24*3600, "/", "", false, true)
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "登录成功",
})
return
}
c.JSON(http.StatusUnauthorized, gin.H{
"code": 401,
"message": "密码错误",
})
}
// Logout 登出
func (h *AdminHandler) Logout(c *gin.Context) {
c.SetCookie("admin_token", "", -1, "/", "", false, true)
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "已退出登录",
})
}
// CheckAuth 检查是否已登录
func (h *AdminHandler) CheckAuth(c *gin.Context) {
token, err := c.Cookie("admin_token")
if err == nil && token == "authenticated" {
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "已登录",
"data": gin.H{
"authenticated": true,
},
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "未登录",
"data": gin.H{
"authenticated": false,
},
})
}
// IndexPage 后台管理首页
func (h *AdminHandler) IndexPage(c *gin.Context) {
token, err := c.Cookie("admin_token")
if err != nil || token != "authenticated" {
c.Redirect(http.StatusFound, "/admin/login")
return
}
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "笔记管理后台",
})
}