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"
"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/parnurzeal/gorequest"
)
@ -46,12 +46,10 @@ func (cl *SettingsClient) GetClientCfg(token *http.Cookie) (*http.Response, *set
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")).
AddCookie(token).
Send(&settings.ClientCfgMsg{
ClientCfg: cfg,
}).
Send(cfgMsg).
End()
}

View file

@ -30,7 +30,10 @@ func (h *SettingsSvc) Health(c *gin.Context) {
}
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) {
@ -41,7 +44,12 @@ func (h *SettingsSvc) GetClientCfg(c *gin.Context) {
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) {
@ -52,7 +60,13 @@ func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
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))
return
}
@ -63,7 +77,7 @@ func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
return
}
err = h.deps.SiteStore().SetClientCfg(req.ClientCfg)
err = h.deps.SiteStore().SetClientCfg(clientCfg)
if err != nil {
c.JSON(q.ErrResp(c, 500, err))
return

View file

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