119 lines
2.6 KiB
Go
119 lines
2.6 KiB
Go
package settings
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/ihexxa/gocfg"
|
|
|
|
"github.com/ihexxa/quickshare/src/db/sitestore"
|
|
"github.com/ihexxa/quickshare/src/depidx"
|
|
q "github.com/ihexxa/quickshare/src/handlers"
|
|
)
|
|
|
|
type SettingsSvc struct {
|
|
cfg gocfg.ICfg
|
|
deps *depidx.Deps
|
|
}
|
|
|
|
func NewSettingsSvc(cfg gocfg.ICfg, deps *depidx.Deps) (*SettingsSvc, error) {
|
|
return &SettingsSvc{
|
|
cfg: cfg,
|
|
deps: deps,
|
|
}, nil
|
|
}
|
|
|
|
func (h *SettingsSvc) Health(c *gin.Context) {
|
|
// TODO: currently it checks nothing
|
|
c.JSON(q.Resp(200))
|
|
}
|
|
|
|
type ClientCfgMsg struct {
|
|
SiteName string `json:"siteName"`
|
|
SiteDesc string `json:"siteDesc"`
|
|
Bg *sitestore.BgConfig `json:"bg"`
|
|
CaptchaEnabled bool `json:"captchaEnabled"`
|
|
}
|
|
|
|
func (h *SettingsSvc) GetClientCfg(c *gin.Context) {
|
|
// TODO: add cache
|
|
siteCfg, err := h.deps.SiteStore().GetCfg()
|
|
if err != nil {
|
|
c.JSON(q.ErrResp(c, 500, err))
|
|
return
|
|
}
|
|
|
|
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) {
|
|
var err error
|
|
req := &ClientCfgMsg{}
|
|
if err = c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(q.ErrResp(c, 400, err))
|
|
return
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
err = h.deps.SiteStore().SetClientCfg(clientCfg)
|
|
if err != nil {
|
|
c.JSON(q.ErrResp(c, 500, err))
|
|
return
|
|
}
|
|
c.JSON(q.Resp(200))
|
|
}
|
|
|
|
func validateClientCfg(cfg *sitestore.ClientConfig) error {
|
|
if cfg.SiteName == "" {
|
|
return errors.New("site name is empty")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type ClientErrorReport struct {
|
|
Report string `json:"report"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
type ClientErrorReports struct {
|
|
Reports []*ClientErrorReport `json:"reports"`
|
|
}
|
|
|
|
func (h *SettingsSvc) ReportErrors(c *gin.Context) {
|
|
var err error
|
|
req := &ClientErrorReports{}
|
|
if err = c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(q.ErrResp(c, 400, err))
|
|
return
|
|
}
|
|
|
|
for _, report := range req.Reports {
|
|
h.deps.Log().Errorf("version:%s,error:%s", report.Version, report.Report)
|
|
}
|
|
c.JSON(q.Resp(200))
|
|
}
|
|
|
|
type WorkerQueueLenResp struct {
|
|
QueueLen int `json:"queueLen"`
|
|
}
|
|
|
|
func (h *SettingsSvc) WorkerQueueLen(c *gin.Context) {
|
|
c.JSON(200, &WorkerQueueLenResp{
|
|
QueueLen: h.deps.Workers().QueueLen(),
|
|
})
|
|
}
|