fix: enable allowSetBg in be
This commit is contained in:
parent
503bafb604
commit
1694e9026b
8 changed files with 99 additions and 29 deletions
|
@ -63,6 +63,7 @@ func (st *SiteStore) getCfg() (*db.SiteConfig, error) {
|
||||||
if err = db.CheckSiteCfg(cfg, true); err != nil {
|
if err = db.CheckSiteCfg(cfg, true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -654,6 +654,11 @@ func (h *MultiUsersSvc) Self(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allowSetBg := h.cfg.BoolOr("Site.ClientCfg.AllowSetBg", false)
|
||||||
|
if !allowSetBg {
|
||||||
|
user.Preferences.Bg = db.DefaultBgConfig
|
||||||
|
}
|
||||||
|
|
||||||
c.JSON(200, &SelfResp{
|
c.JSON(200, &SelfResp{
|
||||||
ID: claims[q.UserIDParam],
|
ID: claims[q.UserIDParam],
|
||||||
Name: claims[q.UserParam],
|
Name: claims[q.UserParam],
|
||||||
|
@ -708,7 +713,11 @@ func (h *MultiUsersSvc) SetPreferences(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: validate
|
allowSetBg := h.cfg.BoolOr("Site.ClientCfg.AllowSetBg", false)
|
||||||
|
if !allowSetBg {
|
||||||
|
req.Preferences.Bg = db.DefaultBgConfig
|
||||||
|
}
|
||||||
|
|
||||||
err = h.deps.Users().SetPreferences(uid, req.Preferences)
|
err = h.deps.Users().SetPreferences(uid, req.Preferences)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(q.ErrResp(c, 500, err))
|
c.JSON(q.ErrResp(c, 500, err))
|
||||||
|
|
|
@ -29,9 +29,7 @@ func (h *SettingsSvc) Health(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClientCfgMsg struct {
|
type ClientCfgMsg struct {
|
||||||
SiteName string `json:"siteName"`
|
ClientCfg *db.ClientConfig `json:"cfg"`
|
||||||
SiteDesc string `json:"siteDesc"`
|
|
||||||
Bg *db.BgConfig `json:"bg"`
|
|
||||||
CaptchaEnabled bool `json:"captchaEnabled"`
|
CaptchaEnabled bool `json:"captchaEnabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,9 +42,7 @@ func (h *SettingsSvc) GetClientCfg(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
c.JSON(200, &ClientCfgMsg{
|
c.JSON(200, &ClientCfgMsg{
|
||||||
SiteName: siteCfg.ClientCfg.SiteName,
|
ClientCfg: siteCfg.ClientCfg,
|
||||||
SiteDesc: siteCfg.ClientCfg.SiteDesc,
|
|
||||||
Bg: siteCfg.ClientCfg.Bg,
|
|
||||||
CaptchaEnabled: h.cfg.BoolOr("Users.CaptchaEnabled", true),
|
CaptchaEnabled: h.cfg.BoolOr("Users.CaptchaEnabled", true),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -59,17 +55,25 @@ func (h *SettingsSvc) SetClientCfg(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
clientCfg := &db.ClientConfig{
|
|
||||||
SiteName: req.SiteName,
|
|
||||||
SiteDesc: req.SiteDesc,
|
|
||||||
Bg: req.Bg,
|
|
||||||
// TODO: captchaEnabled is not persisted in db
|
// TODO: captchaEnabled is not persisted in db
|
||||||
}
|
clientCfg := req.ClientCfg
|
||||||
if err = validateClientCfg(clientCfg); err != nil {
|
if err = validateClientCfg(clientCfg); err != nil {
|
||||||
c.JSON(q.ErrResp(c, 400, err))
|
c.JSON(q.ErrResp(c, 400, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update config
|
||||||
|
// TODO: refine the model
|
||||||
|
h.cfg.SetString("Site.ClientCfg.SiteName", req.ClientCfg.SiteName)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.SiteDesc", req.ClientCfg.SiteDesc)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.Bg.Url", req.ClientCfg.Bg.Url)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.Bg.Repeat", req.ClientCfg.Bg.Repeat)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.Bg.Position", req.ClientCfg.Bg.Position)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.Bg.Align", req.ClientCfg.Bg.Align)
|
||||||
|
h.cfg.SetString("Site.ClientCfg.Bg.BgColor", req.ClientCfg.Bg.BgColor)
|
||||||
|
h.cfg.SetBool("Site.ClientCfg.AllowSetBg", req.ClientCfg.AllowSetBg)
|
||||||
|
h.cfg.SetBool("Site.ClientCfg.AutoTheme", req.ClientCfg.AutoTheme)
|
||||||
|
|
||||||
err = h.deps.SiteStore().SetClientCfg(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))
|
||||||
|
|
|
@ -129,6 +129,8 @@ func DefaultConfigStruct() *Config {
|
||||||
Align: "fixed",
|
Align: "fixed",
|
||||||
BgColor: "#ccc",
|
BgColor: "#ccc",
|
||||||
},
|
},
|
||||||
|
AllowSetBg: false,
|
||||||
|
AutoTheme: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Db: &DbConfig{
|
Db: &DbConfig{
|
||||||
|
|
|
@ -751,7 +751,7 @@ func TestPermissions(t *testing.T) {
|
||||||
assertResp(t, resp, errs, expectedCodes["GetClientCfg"], fmt.Sprintf("%s-%s", desc, "GetClientCfg"))
|
assertResp(t, resp, errs, expectedCodes["GetClientCfg"], fmt.Sprintf("%s-%s", desc, "GetClientCfg"))
|
||||||
|
|
||||||
clientCfg := gccResp
|
clientCfg := gccResp
|
||||||
clientCfg.SiteName = "new site name"
|
clientCfg.ClientCfg.SiteName = "new site name"
|
||||||
|
|
||||||
resp, _, errs = settingsCl.SetClientCfg(clientCfg, token)
|
resp, _, errs = settingsCl.SetClientCfg(clientCfg, token)
|
||||||
assertResp(t, resp, errs, expectedCodes["SetClientCfg"], fmt.Sprintf("%s-%s", desc, "SetClientCfg"))
|
assertResp(t, resp, errs, expectedCodes["SetClientCfg"], fmt.Sprintf("%s-%s", desc, "SetClientCfg"))
|
||||||
|
|
|
@ -90,9 +90,8 @@ func TestSettingsHandlers(t *testing.T) {
|
||||||
|
|
||||||
for _, cfg := range cfgs {
|
for _, cfg := range cfgs {
|
||||||
clientCfgMsg := &settings.ClientCfgMsg{
|
clientCfgMsg := &settings.ClientCfgMsg{
|
||||||
SiteName: cfg.SiteName,
|
ClientCfg: cfg,
|
||||||
SiteDesc: cfg.SiteDesc,
|
CaptchaEnabled: false,
|
||||||
Bg: cfg.Bg,
|
|
||||||
}
|
}
|
||||||
resp, _, errs := settingsCl.SetClientCfg(clientCfgMsg, adminToken)
|
resp, _, errs := settingsCl.SetClientCfg(clientCfgMsg, adminToken)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
|
@ -108,13 +107,7 @@ func TestSettingsHandlers(t *testing.T) {
|
||||||
t.Fatal(resp.StatusCode)
|
t.Fatal(resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfgEqual := func(cfg1, cfg2 *settings.ClientCfgMsg) bool {
|
if !reflect.DeepEqual(clientCfgMsg, clientCfgMsgGot) {
|
||||||
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)
|
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +127,7 @@ func TestSettingsHandlers(t *testing.T) {
|
||||||
t.Fatal(resp.StatusCode)
|
t.Fatal(resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !cfgEqual(clientCfgMsg, clientCfgMsgGot) {
|
if !reflect.DeepEqual(clientCfgMsg, clientCfgMsgGot) {
|
||||||
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
|
t.Fatalf("client cfgs are not equal: got(%v) expected(%v)", clientCfgMsg, clientCfgMsgGot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/ihexxa/quickshare/src/client"
|
"github.com/ihexxa/quickshare/src/client"
|
||||||
"github.com/ihexxa/quickshare/src/db"
|
"github.com/ihexxa/quickshare/src/db"
|
||||||
q "github.com/ihexxa/quickshare/src/handlers"
|
q "github.com/ihexxa/quickshare/src/handlers"
|
||||||
|
"github.com/ihexxa/quickshare/src/handlers/settings"
|
||||||
su "github.com/ihexxa/quickshare/src/handlers/singleuserhdr"
|
su "github.com/ihexxa/quickshare/src/handlers/singleuserhdr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -44,6 +45,21 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
},
|
},
|
||||||
"db": {
|
"db": {
|
||||||
"dbPath": "tmpTestData/quickshare"
|
"dbPath": "tmpTestData/quickshare"
|
||||||
|
},
|
||||||
|
"site": {
|
||||||
|
"clientCfg": {
|
||||||
|
"siteName": "Quickshare",
|
||||||
|
"siteDesc": "Quick and simple file sharing",
|
||||||
|
"bg": {
|
||||||
|
"url": "/static/img/textured_paper.png",
|
||||||
|
"repeat": "repeat",
|
||||||
|
"position": "center",
|
||||||
|
"align": "fixed",
|
||||||
|
"bgColor": "#ccc"
|
||||||
|
},
|
||||||
|
"allowSetBg": true,
|
||||||
|
"autoTheme": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}`
|
}`
|
||||||
adminName := "qs"
|
adminName := "qs"
|
||||||
|
@ -57,6 +73,7 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
fs := srv.depsFS()
|
fs := srv.depsFS()
|
||||||
|
|
||||||
usersCl := client.NewSingleUserClient(addr)
|
usersCl := client.NewSingleUserClient(addr)
|
||||||
|
settingsCl := client.NewSettingsClient(addr)
|
||||||
|
|
||||||
if !isServerReady(addr) {
|
if !isServerReady(addr) {
|
||||||
t.Fatal("fail to start server")
|
t.Fatal("fail to start server")
|
||||||
|
@ -433,7 +450,7 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Login,SetPreferences, Self, Logout", func(t *testing.T) {
|
t.Run("Login, SetPreferences, Self, Logout", func(t *testing.T) {
|
||||||
usersCl := client.NewSingleUserClient(addr)
|
usersCl := client.NewSingleUserClient(addr)
|
||||||
resp, _, errs := usersCl.Login(adminName, adminNewPwd)
|
resp, _, errs := usersCl.Login(adminName, adminNewPwd)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
|
@ -445,7 +462,7 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
token := client.GetCookie(resp.Cookies(), su.TokenCookie)
|
token := client.GetCookie(resp.Cookies(), su.TokenCookie)
|
||||||
|
|
||||||
prefers := []*db.Preferences{
|
prefers := []*db.Preferences{
|
||||||
&db.Preferences{
|
{
|
||||||
Bg: &db.BgConfig{
|
Bg: &db.BgConfig{
|
||||||
Url: "/bgurl",
|
Url: "/bgurl",
|
||||||
Repeat: "no-repeat",
|
Repeat: "no-repeat",
|
||||||
|
@ -460,7 +477,7 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
Lan: "en_US",
|
Lan: "en_US",
|
||||||
Theme: "light",
|
Theme: "light",
|
||||||
},
|
},
|
||||||
&db.Preferences{
|
{
|
||||||
Bg: &db.BgConfig{
|
Bg: &db.BgConfig{
|
||||||
Url: "/bgurl2",
|
Url: "/bgurl2",
|
||||||
Repeat: "repeat",
|
Repeat: "repeat",
|
||||||
|
@ -490,6 +507,50 @@ func TestUsersHandlers(t *testing.T) {
|
||||||
} else if resp.StatusCode != 200 {
|
} else if resp.StatusCode != 200 {
|
||||||
t.Fatal(resp.StatusCode)
|
t.Fatal(resp.StatusCode)
|
||||||
} else if !reflect.DeepEqual(selfResp.Preferences, prefer) {
|
} else if !reflect.DeepEqual(selfResp.Preferences, prefer) {
|
||||||
|
fmt.Printf("\n%+v\n%+v\n", selfResp.Preferences, selfResp.Preferences.Bg)
|
||||||
|
fmt.Printf("\n%+v\n%+v\n", prefer, prefer.Bg)
|
||||||
|
t.Fatal("preference not equal")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable setting bg in preferences
|
||||||
|
resp, _, errs = settingsCl.SetClientCfg(&settings.ClientCfgMsg{
|
||||||
|
ClientCfg: &db.ClientConfig{
|
||||||
|
SiteName: "Quickshare",
|
||||||
|
SiteDesc: "Quick and simple file sharing",
|
||||||
|
Bg: db.DefaultBgConfig,
|
||||||
|
AllowSetBg: false,
|
||||||
|
AutoTheme: true,
|
||||||
|
},
|
||||||
|
CaptchaEnabled: false,
|
||||||
|
},
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, prefer := range prefers {
|
||||||
|
resp, _, errs := usersCl.SetPreferences(prefer, token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, selfResp, errs := usersCl.Self(token)
|
||||||
|
if len(errs) > 0 {
|
||||||
|
t.Fatal(errs)
|
||||||
|
} else if resp.StatusCode != 200 {
|
||||||
|
t.Fatal(resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
prefer.Bg = db.DefaultPreferences.Bg
|
||||||
|
if !reflect.DeepEqual(selfResp.Preferences, prefer) {
|
||||||
|
fmt.Printf("\n%+v\n%+v\n", selfResp.Preferences, selfResp.Preferences.Bg)
|
||||||
|
fmt.Printf("\n%+v\n%+v\n", prefer, prefer.Bg)
|
||||||
t.Fatal("preference not equal")
|
t.Fatal("preference not equal")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
src/server/testdata/test_quickshare.db
vendored
BIN
src/server/testdata/test_quickshare.db
vendored
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue