fix(settings): add captchaEnabled switch to client config

This commit is contained in:
hexxa 2022-01-27 22:24:35 +08:00 committed by Hexxa
parent 99b424ee2a
commit 67da1ea0eb
3 changed files with 40 additions and 17 deletions

View file

@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/ihexxa/quickshare/src/db/sitestore" // "github.com/ihexxa/quickshare/src/db/sitestore"
"github.com/ihexxa/quickshare/src/handlers/settings" "github.com/ihexxa/quickshare/src/handlers/settings"
"github.com/parnurzeal/gorequest" "github.com/parnurzeal/gorequest"
) )
@ -46,12 +46,10 @@ func (cl *SettingsClient) GetClientCfg(token *http.Cookie) (*http.Response, *set
return resp, mResp, nil return resp, mResp, nil
} }
func (cl *SettingsClient) SetClientCfg(cfg *sitestore.ClientConfig, token *http.Cookie) (*http.Response, string, []error) { func (cl *SettingsClient) SetClientCfg(cfgMsg *settings.ClientCfgMsg, token *http.Cookie) (*http.Response, string, []error) {
return cl.r.Patch(cl.url("/v1/settings/client")). return cl.r.Patch(cl.url("/v1/settings/client")).
AddCookie(token). AddCookie(token).
Send(&settings.ClientCfgMsg{ Send(cfgMsg).
ClientCfg: cfg,
}).
End() End()
} }

View file

@ -30,7 +30,10 @@ func (h *SettingsSvc) Health(c *gin.Context) {
} }
type ClientCfgMsg struct { type ClientCfgMsg struct {
ClientCfg *sitestore.ClientConfig `json:"clientCfg"` SiteName string `json:"siteName"`
SiteDesc string `json:"siteDesc"`
Bg *sitestore.BgConfig `json:"bg"`
CaptchaEnabled bool `json:"captchaEnabled"`
} }
func (h *SettingsSvc) GetClientCfg(c *gin.Context) { func (h *SettingsSvc) GetClientCfg(c *gin.Context) {
@ -41,7 +44,12 @@ func (h *SettingsSvc) GetClientCfg(c *gin.Context) {
return return
} }
c.JSON(200, &ClientCfgMsg{ClientCfg: siteCfg.ClientCfg}) c.JSON(200, &ClientCfgMsg{
SiteName: siteCfg.ClientCfg.SiteName,
SiteDesc: siteCfg.ClientCfg.SiteDesc,
Bg: siteCfg.ClientCfg.Bg,
CaptchaEnabled: h.cfg.BoolOr("Users.CaptchaEnabled", true),
})
} }
func (h *SettingsSvc) SetClientCfg(c *gin.Context) { func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
@ -52,7 +60,13 @@ func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
return return
} }
if err = validateClientCfg(req.ClientCfg); err != nil { clientCfg := &sitestore.ClientConfig{
SiteName: req.SiteName,
SiteDesc: req.SiteDesc,
Bg: req.Bg,
// TODO: captchaEnabled is not persisted in db
}
if err = validateClientCfg(clientCfg); err != nil {
c.JSON(q.ErrResp(c, 400, err)) c.JSON(q.ErrResp(c, 400, err))
return return
} }
@ -63,7 +77,7 @@ func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
return return
} }
err = h.deps.SiteStore().SetClientCfg(req.ClientCfg) err = h.deps.SiteStore().SetClientCfg(clientCfg)
if err != nil { if err != nil {
c.JSON(q.ErrResp(c, 500, err)) c.JSON(q.ErrResp(c, 500, err))
return return

View file

@ -2,7 +2,6 @@ package server
import ( import (
"fmt" "fmt"
"github.com/ihexxa/quickshare/src/handlers/settings"
"io/ioutil" "io/ioutil"
"os" "os"
"reflect" "reflect"
@ -13,6 +12,7 @@ import (
"github.com/ihexxa/quickshare/src/client" "github.com/ihexxa/quickshare/src/client"
"github.com/ihexxa/quickshare/src/db/sitestore" "github.com/ihexxa/quickshare/src/db/sitestore"
q "github.com/ihexxa/quickshare/src/handlers" q "github.com/ihexxa/quickshare/src/handlers"
"github.com/ihexxa/quickshare/src/handlers/settings"
) )
func TestSettingsHandlers(t *testing.T) { func TestSettingsHandlers(t *testing.T) {
@ -85,22 +85,33 @@ func TestSettingsHandlers(t *testing.T) {
} }
for _, cfg := range cfgs { for _, cfg := range cfgs {
resp, _, errs := settingsCl.SetClientCfg(cfg, adminToken) clientCfgMsg := &settings.ClientCfgMsg{
SiteName: cfg.SiteName,
SiteDesc: cfg.SiteDesc,
Bg: cfg.Bg,
}
resp, _, errs := settingsCl.SetClientCfg(clientCfgMsg, adminToken)
if len(errs) > 0 { if len(errs) > 0 {
t.Fatal(errs) t.Fatal(errs)
} else if resp.StatusCode != 200 { } else if resp.StatusCode != 200 {
t.Fatal(resp.StatusCode) t.Fatal(resp.StatusCode)
} }
resp, clientCfgMsg, errs := settingsCl.GetClientCfg(adminToken) resp, clientCfgMsgGot, errs := settingsCl.GetClientCfg(adminToken)
if len(errs) > 0 { if len(errs) > 0 {
t.Fatal(errs) t.Fatal(errs)
} else if resp.StatusCode != 200 { } else if resp.StatusCode != 200 {
t.Fatal(resp.StatusCode) t.Fatal(resp.StatusCode)
} }
if !reflect.DeepEqual(cfg, clientCfgMsg.ClientCfg) { cfgEqual := func(cfg1, cfg2 *settings.ClientCfgMsg) bool {
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg.ClientCfg, cfg) return cfg1.SiteName == cfg2.SiteName &&
cfg1.SiteDesc == cfg2.SiteDesc &&
reflect.DeepEqual(cfg1.Bg, cfg2.Bg)
}
if !cfgEqual(clientCfgMsg, clientCfgMsgGot) {
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
} }
for userName := range users { for userName := range users {
@ -112,15 +123,15 @@ func TestSettingsHandlers(t *testing.T) {
} }
userToken := client.GetCookie(resp.Cookies(), q.TokenCookie) userToken := client.GetCookie(resp.Cookies(), q.TokenCookie)
resp, clientCfgMsg, errs := settingsCl.GetClientCfg(userToken) resp, clientCfgMsgGot, errs := settingsCl.GetClientCfg(userToken)
if len(errs) > 0 { if len(errs) > 0 {
t.Fatal(errs) t.Fatal(errs)
} else if resp.StatusCode != 200 { } else if resp.StatusCode != 200 {
t.Fatal(resp.StatusCode) t.Fatal(resp.StatusCode)
} }
if !reflect.DeepEqual(cfg, clientCfgMsg.ClientCfg) { if !cfgEqual(clientCfgMsg, clientCfgMsgGot) {
t.Fatalf("client cfgs are not equal for user: got(%v) expected(%v)", clientCfgMsg.ClientCfg, cfg) t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
} }
} }
} }