From 370a1a0c9f49afd8829dcd9d0858b2ca10f85547 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Fri, 22 Nov 2019 19:33:06 +0800 Subject: [PATCH] Feat: GET Site/Config getting global configuration --- pkg/serializer/setting.go | 37 +++++++++++++++++++++++++++++++++++++ routers/controllers/site.go | 24 ++++++++++++++++++++++++ routers/router.go | 4 +++- routers/router_test.go | 2 +- 4 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 pkg/serializer/setting.go create mode 100644 routers/controllers/site.go diff --git a/pkg/serializer/setting.go b/pkg/serializer/setting.go new file mode 100644 index 0000000..23117c8 --- /dev/null +++ b/pkg/serializer/setting.go @@ -0,0 +1,37 @@ +package serializer + +import model "github.com/HFO4/cloudreve/models" + +// SiteConfig 站点全局设置序列 +type SiteConfig struct { + SiteName string `json:"title"` + LoginCaptcha bool `json:"loginCaptcha"` + RegCaptcha bool `json:"regCaptcha"` + ForgetCaptcha bool `json:"forgetCaptcha"` + EmailActive bool `json:"emailActive"` + QQLogin bool `json:"QQLogin"` + Themes string `json:"themes"` + DefaultTheme string `json:"defaultTheme"` +} + +func checkSettingValue(setting map[string]string, key string) string { + if v, ok := setting[key]; ok { + return v + } + return "" +} + +// BuildSiteConfig 站点全局设置 +func BuildSiteConfig(settings map[string]string) Response { + return Response{ + Data: SiteConfig{ + SiteName: checkSettingValue(settings, "siteName"), + LoginCaptcha: model.IsTrueVal(checkSettingValue(settings, "login_captcha")), + RegCaptcha: model.IsTrueVal(checkSettingValue(settings, "reg_captcha")), + ForgetCaptcha: model.IsTrueVal(checkSettingValue(settings, "forget_captcha")), + EmailActive: model.IsTrueVal(checkSettingValue(settings, "email_active")), + QQLogin: model.IsTrueVal(checkSettingValue(settings, "qq_login")), + Themes: checkSettingValue(settings, "themes"), + DefaultTheme: checkSettingValue(settings, "defaultTheme"), + }} +} diff --git a/routers/controllers/site.go b/routers/controllers/site.go new file mode 100644 index 0000000..7512f95 --- /dev/null +++ b/routers/controllers/site.go @@ -0,0 +1,24 @@ +package controllers + +import ( + model "github.com/HFO4/cloudreve/models" + "github.com/HFO4/cloudreve/pkg/serializer" + "github.com/gin-gonic/gin" +) + +// SiteConfig 获取站点全局配置 +func SiteConfig(c *gin.Context) { + siteConfig := model.GetSettingByNames([]string{ + "siteName", + "login_captcha", + "qq_login", + "reg_captcha", + "email_active", + "forget_captcha", + "email_active", + "themes", + "defaultTheme", + }) + + c.JSON(200, serializer.BuildSiteConfig(siteConfig)) +} diff --git a/routers/router.go b/routers/router.go index 353f278..acf6fba 100644 --- a/routers/router.go +++ b/routers/router.go @@ -29,11 +29,13 @@ func InitRouter() *gin.Engine { v3 := r.Group("/Api/V3") { // 测试用路由 - v3.GET("Ping", controllers.Ping) + v3.GET("Site/Ping", controllers.Ping) // 用户登录 v3.POST("User/Session", controllers.UserLogin) // 验证码 v3.GET("Captcha", controllers.Captcha) + // 站点全局配置 + v3.GET("Site/Config", controllers.SiteConfig) // 需要登录保护的 auth := v3.Group("") diff --git a/routers/router_test.go b/routers/router_test.go index b45ccda..b45732c 100644 --- a/routers/router_test.go +++ b/routers/router_test.go @@ -42,7 +42,7 @@ func TestPing(t *testing.T) { router := InitRouter() w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/Api/V3/Ping", nil) + req, _ := http.NewRequest("GET", "/Api/V3/Site/Ping", nil) router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code)