92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"caddydash/apic"
|
|
"caddydash/config"
|
|
"caddydash/db"
|
|
"caddydash/user"
|
|
|
|
"github.com/infinite-iroha/touka"
|
|
)
|
|
|
|
func ApiGroup(v0 touka.IRouter, cdb *db.ConfigDB, cfg *config.Config) {
|
|
api := v0.Group("/api")
|
|
api.GET("/config/filenames", func(c *touka.Context) {
|
|
filenames, err := cdb.GetFileNames()
|
|
if err != nil {
|
|
c.JSON(500, touka.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, filenames)
|
|
})
|
|
|
|
// 配置参数相关
|
|
api.GET("/config/file/:filename", GetConfig(cdb)) // 读取配置(与写入一致)
|
|
api.PUT("/config/file/:filename", PutConfig(cdb, cfg)) // 写入配置
|
|
api.DELETE("/config/file/:filename", DeleteConfig(cdb, cfg)) //删除配置
|
|
|
|
api.GET("/config/files/params", FilesParams(cdb)) // 获取所有配置, 需进行decode
|
|
api.GET("/config/files/templates", FilesTemplates(cdb)) // 获取所有模板
|
|
api.GET("/config/files/rendered", FilesRendered(cdb)) // 获取所有渲染产物
|
|
|
|
api.GET("/config/templates", GetTemplates(cdb)) // 获取可用模板名称
|
|
|
|
// caddy实例相关
|
|
api.POST("/caddy/stop", apic.StopCaddy()) // 无需payload
|
|
api.POST("/caddy/run", apic.StartCaddy(cfg))
|
|
api.POST("/caddy/restart", apic.RestartCaddy(cfg))
|
|
api.GET("/caddy/status", apic.IsCaddyRunning())
|
|
|
|
auth := api.Group("/auth")
|
|
{
|
|
auth.POST("/login", func(c *touka.Context) {
|
|
AuthLogin(c, cfg, cdb)
|
|
})
|
|
auth.POST("/logout", func(c *touka.Context) {
|
|
AuthLogout(c)
|
|
})
|
|
auth.GET("/logout", func(c *touka.Context) {
|
|
// 重定向到/
|
|
c.Redirect(302, "/")
|
|
c.Abort()
|
|
return
|
|
})
|
|
auth.GET("/init", func(c *touka.Context) {
|
|
// 返回是否init管理员
|
|
isInit := user.IsAdminInit()
|
|
if isInit {
|
|
c.JSON(200, touka.H{"admin_init": true})
|
|
} else {
|
|
c.JSON(200, touka.H{"admin_init": false})
|
|
}
|
|
})
|
|
auth.POST("/init", func(c *touka.Context) {
|
|
username := c.PostForm("username")
|
|
password := c.PostForm("password")
|
|
// 验证是否为空
|
|
if username == "" || password == "" {
|
|
c.JSON(400, touka.H{"error": "username and password are required"})
|
|
return
|
|
}
|
|
// 初始化管理员
|
|
err := user.InitAdminUser(username, password, cdb)
|
|
if err != nil {
|
|
c.JSON(500, touka.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, touka.H{"message": "admin initialized"})
|
|
})
|
|
}
|
|
}
|
|
|
|
// GetTemplates 获取可用的tmpls name
|
|
func GetTemplates(cdb *db.ConfigDB) touka.HandlerFunc {
|
|
return func(c *touka.Context) {
|
|
templates, err := cdb.RangeTemplates()
|
|
if err != nil {
|
|
c.JSON(500, touka.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, templates)
|
|
}
|
|
}
|