feat(server): init site settings from config

This commit is contained in:
hexxa 2021-10-09 17:42:04 +08:00 committed by Hexxa
parent 8cce087c1f
commit 961bafa66c
6 changed files with 100 additions and 34 deletions

View file

@ -37,3 +37,12 @@ workers:
queueSize: 1024 queueSize: 1024
sleepCyc: 1 # in second sleepCyc: 1 # in second
workerCount: 2 workerCount: 2
site:
clientCfg:
siteName: "Quickshare"
siteDesc: "quick and simple file sharing"
bg:
url: "/static/img/textured_paper.png"
repeat: "repeat"
position: "fixed"
align: "center"

View file

@ -36,4 +36,13 @@ users:
workers: workers:
queueSize: 1024 queueSize: 1024
sleepCyc: 1 # in second sleepCyc: 1 # in second
workerCount: 2 workerCount: 2
site:
clientCfg:
siteName: "Quickshare"
siteDesc: "quick and simple file sharing"
bg:
url: "/static/img/textured_paper.png"
repeat: "repeat"
position: "fixed"
align: "center"

View file

@ -32,4 +32,13 @@ users:
workers: workers:
queueSize: 1024 queueSize: 1024
sleepCyc: 1 # in second sleepCyc: 1 # in second
workerCount: 2 workerCount: 2
site:
clientCfg:
siteName: "Quickshare"
siteDesc: "quick and simple file sharing"
bg:
url: "/static/img/textured_paper.png"
repeat: "repeat"
position: "fixed"
align: "center"

View file

@ -53,36 +53,45 @@ type SiteStore struct {
} }
func NewSiteStore(store kvstore.IKVStore) (*SiteStore, error) { func NewSiteStore(store kvstore.IKVStore) (*SiteStore, error) {
_, ok := store.GetStringIn(InitNs, InitTimeKey)
if !ok {
var err error
for _, nsName := range []string{
InitNs,
SiteNs,
} {
if err = store.AddNamespace(nsName); err != nil {
return nil, err
}
}
}
err := store.SetStringIn(InitNs, InitTimeKey, fmt.Sprintf("%d", time.Now().Unix()))
if err != nil {
return nil, err
}
return &SiteStore{ return &SiteStore{
store: store, store: store,
mtx: &sync.RWMutex{}, mtx: &sync.RWMutex{},
}, nil }, nil
} }
func (fi *SiteStore) SetClientCfg(cfg *ClientConfig) error { func (st *SiteStore) Init(cfg *SiteConfig) error {
fi.mtx.Lock() _, ok := st.store.GetStringIn(InitNs, InitTimeKey)
defer fi.mtx.Unlock() if !ok {
var err error
for _, nsName := range []string{
InitNs,
SiteNs,
} {
if err = st.store.AddNamespace(nsName); err != nil {
return err
}
}
// TODO: replace following with setConfig
err = st.SetClientCfg(cfg.ClientCfg)
if err != nil {
return err
}
err = st.store.SetStringIn(InitNs, InitTimeKey, fmt.Sprintf("%d", time.Now().Unix()))
if err != nil {
return err
}
}
return nil
}
func (st *SiteStore) SetClientCfg(cfg *ClientConfig) error {
st.mtx.Lock()
defer st.mtx.Unlock()
siteCfg := &SiteConfig{} siteCfg := &SiteConfig{}
cfgStr, ok := fi.store.GetStringIn(SiteNs, SiteCfgKey) cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey)
if ok { if ok {
err := json.Unmarshal([]byte(cfgStr), siteCfg) err := json.Unmarshal([]byte(cfgStr), siteCfg)
if err != nil { if err != nil {
@ -95,14 +104,14 @@ func (fi *SiteStore) SetClientCfg(cfg *ClientConfig) error {
if err != nil { if err != nil {
return err return err
} }
return fi.store.SetStringIn(SiteNs, SiteCfgKey, string(cfgBytes)) return st.store.SetStringIn(SiteNs, SiteCfgKey, string(cfgBytes))
} }
func (fi *SiteStore) GetCfg() (*SiteConfig, error) { func (st *SiteStore) GetCfg() (*SiteConfig, error) {
fi.mtx.RLock() st.mtx.RLock()
defer fi.mtx.RUnlock() defer st.mtx.RUnlock()
cfgStr, ok := fi.store.GetStringIn(SiteNs, SiteCfgKey) cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey)
if !ok { if !ok {
return nil, ErrNotFound return nil, ErrNotFound
} }

View file

@ -3,6 +3,7 @@ package server
import ( import (
"encoding/json" "encoding/json"
"github.com/ihexxa/quickshare/src/db/sitestore"
"github.com/ihexxa/quickshare/src/db/userstore" "github.com/ihexxa/quickshare/src/db/userstore"
) )
@ -53,11 +54,12 @@ type WorkerPoolCfg struct {
} }
type Config struct { type Config struct {
Fs *FSConfig `json:"fs" yaml:"fs"` Fs *FSConfig `json:"fs" yaml:"fs"`
Secrets *Secrets `json:"secrets" yaml:"secrets"` Secrets *Secrets `json:"secrets" yaml:"secrets"`
Server *ServerCfg `json:"server" yaml:"server"` Server *ServerCfg `json:"server" yaml:"server"`
Users *UsersCfg `json:"users" yaml:"users"` Users *UsersCfg `json:"users" yaml:"users"`
Workers *WorkerPoolCfg `json:"workers" yaml:"workers"` Workers *WorkerPoolCfg `json:"workers" yaml:"workers"`
Site *sitestore.SiteConfig `json:"site" yaml:"site"`
} }
func NewConfig() *Config { func NewConfig() *Config {
@ -106,6 +108,18 @@ func DefaultConfig() (string, error) {
SleepCyc: 1, SleepCyc: 1,
WorkerCount: 2, WorkerCount: 2,
}, },
Site: &sitestore.SiteConfig{
ClientCfg: &sitestore.ClientConfig{
SiteName: "Quickshare",
SiteDesc: "quick and simple file sharing",
Bg: &sitestore.BgConfig{
Url: "/static/img/textured_paper.png",
Repeat: "repeat",
Position: "fixed",
Align: "center",
},
},
},
} }
cfgBytes, err := json.Marshal(defaultCfg) cfgBytes, err := json.Marshal(defaultCfg)

View file

@ -126,6 +126,22 @@ func initDeps(cfg gocfg.ICfg) *depidx.Deps {
panic(fmt.Sprintf("fail to init file info store: %s", err)) panic(fmt.Sprintf("fail to init file info store: %s", err))
} }
siteStore, err := sitestore.NewSiteStore(kv) siteStore, err := sitestore.NewSiteStore(kv)
if err != nil {
panic(fmt.Sprintf("fail to new site config store: %s", err))
}
err = siteStore.Init(&sitestore.SiteConfig{
ClientCfg: &sitestore.ClientConfig{
SiteName: cfg.StringOr("Site.ClientCfg.SiteName", "Quickshare"),
SiteDesc: cfg.StringOr("Site.ClientCfg.SiteDesc", "quick and simple file sharing"),
Bg: &sitestore.BgConfig{
Url: cfg.StringOr("Site.ClientCfg.Bg.Url", "/static/img/textured_paper.png"),
Repeat: cfg.StringOr("Site.ClientCfg.Bg.Repeat", "repeat"),
Position: cfg.StringOr("Site.ClientCfg.Bg.Position", "fixed"),
Align: cfg.StringOr("Site.ClientCfg.Bg.Align", "center"),
},
},
})
if err != nil { if err != nil {
panic(fmt.Sprintf("fail to init site config store: %s", err)) panic(fmt.Sprintf("fail to init site config store: %s", err))
} }