feat: ToNav-go v1.0.0 - 内部服务导航系统
功能: - 前台导航: 分类Tab切换、实时搜索、健康状态指示、响应式适配 - 后台管理: 服务/分类CRUD、系统设置、登录认证(bcrypt) - 健康检查: 定时检测(5min)、独立检查URL、三态指示(在线/离线/未检测) - 云端备份: WebDAV上传/下载/恢复/删除、定时自动备份、本地备份管理 技术栈: Go + Gin + GORM + SQLite
This commit is contained in:
75
main.go
Normal file
75
main.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"tonav-go/database"
|
||||
"tonav-go/handlers"
|
||||
config "tonav-go/utils"
|
||||
|
||||
"github.com/gin-contrib/sessions"
|
||||
"github.com/gin-contrib/sessions/cookie"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg := config.LoadConfig()
|
||||
database.InitDB(cfg.DBPath)
|
||||
database.Seed()
|
||||
handlers.StartHealthCheck()
|
||||
handlers.StartAutoBackup()
|
||||
|
||||
r := gin.Default()
|
||||
store := cookie.NewStore([]byte(cfg.SecretKey))
|
||||
r.Use(sessions.Sessions("tonav_session", store))
|
||||
r.Static("/static", "./static")
|
||||
|
||||
// 显式逐个加载,彻底杜绝路径猜测问题
|
||||
r.LoadHTMLFiles(
|
||||
"templates/index.html",
|
||||
"templates/admin/login.html",
|
||||
"templates/admin/dashboard.html",
|
||||
"templates/admin/categories.html",
|
||||
"templates/admin/services.html",
|
||||
"templates/admin/change_password.html",
|
||||
)
|
||||
|
||||
r.GET("/", handlers.IndexHandler)
|
||||
|
||||
r.GET("/admin/login", func(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "login.html", nil)
|
||||
})
|
||||
r.POST("/admin/login", handlers.LoginHandler)
|
||||
r.GET("/admin/logout", handlers.LogoutHandler)
|
||||
|
||||
admin := r.Group("/admin")
|
||||
admin.Use(handlers.AuthRequired())
|
||||
{
|
||||
admin.GET("", func(c *gin.Context) {
|
||||
c.Redirect(http.StatusFound, "/admin/dashboard")
|
||||
})
|
||||
admin.GET("/dashboard", handlers.DashboardHandler)
|
||||
admin.GET("/services", handlers.ServicesPageHandler)
|
||||
admin.GET("/categories", handlers.CategoriesPageHandler)
|
||||
admin.GET("/change-password", handlers.ChangePasswordHandler)
|
||||
admin.POST("/change-password", handlers.ChangePasswordHandler)
|
||||
|
||||
admin.GET("/api/services", handlers.GetServices)
|
||||
admin.POST("/api/services", handlers.SaveService)
|
||||
admin.PUT("/api/services/:id", handlers.SaveService)
|
||||
admin.DELETE("/api/services/:id", handlers.DeleteService)
|
||||
admin.GET("/api/categories", handlers.GetCategories)
|
||||
admin.POST("/api/categories", handlers.SaveCategory)
|
||||
admin.PUT("/api/categories/:id", handlers.SaveCategory)
|
||||
admin.DELETE("/api/categories/:id", handlers.DeleteCategory)
|
||||
admin.GET("/api/settings", handlers.GetSettings)
|
||||
admin.POST("/api/settings", handlers.SaveSettings)
|
||||
admin.POST("/api/backup/webdav", handlers.RunCloudBackup)
|
||||
admin.GET("/api/backup/list", handlers.ListCloudBackups)
|
||||
admin.DELETE("/api/backup/delete", handlers.DeleteCloudBackup)
|
||||
admin.POST("/api/backup/restore", handlers.RestoreCloudBackup)
|
||||
}
|
||||
|
||||
log.Printf("ToNav-go 启动在端口 %s...", cfg.Port)
|
||||
r.Run(":" + cfg.Port)
|
||||
}
|
||||
Reference in New Issue
Block a user