From 961bafa66cd0cefa31dccab648f3d11faa4d34c1 Mon Sep 17 00:00:00 2001 From: hexxa Date: Sat, 9 Oct 2021 17:42:04 +0800 Subject: [PATCH] feat(server): init site settings from config --- configs/dev.yml | 9 +++++ configs/docker.yml | 11 +++++- configs/lan.yml | 11 +++++- src/db/sitestore/site_store.go | 63 +++++++++++++++++++--------------- src/server/config.go | 24 ++++++++++--- src/server/server.go | 16 +++++++++ 6 files changed, 100 insertions(+), 34 deletions(-) diff --git a/configs/dev.yml b/configs/dev.yml index 2c1a476..085e859 100644 --- a/configs/dev.yml +++ b/configs/dev.yml @@ -37,3 +37,12 @@ workers: queueSize: 1024 sleepCyc: 1 # in second 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" diff --git a/configs/docker.yml b/configs/docker.yml index b015c22..1186fb1 100644 --- a/configs/docker.yml +++ b/configs/docker.yml @@ -36,4 +36,13 @@ users: workers: queueSize: 1024 sleepCyc: 1 # in second - workerCount: 2 \ No newline at end of file + 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" diff --git a/configs/lan.yml b/configs/lan.yml index b366efc..26c0312 100644 --- a/configs/lan.yml +++ b/configs/lan.yml @@ -32,4 +32,13 @@ users: workers: queueSize: 1024 sleepCyc: 1 # in second - workerCount: 2 \ No newline at end of file + 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" diff --git a/src/db/sitestore/site_store.go b/src/db/sitestore/site_store.go index b52c8aa..74faebf 100644 --- a/src/db/sitestore/site_store.go +++ b/src/db/sitestore/site_store.go @@ -53,36 +53,45 @@ type SiteStore struct { } 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{ store: store, mtx: &sync.RWMutex{}, }, nil } -func (fi *SiteStore) SetClientCfg(cfg *ClientConfig) error { - fi.mtx.Lock() - defer fi.mtx.Unlock() +func (st *SiteStore) Init(cfg *SiteConfig) error { + _, ok := st.store.GetStringIn(InitNs, InitTimeKey) + 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{} - cfgStr, ok := fi.store.GetStringIn(SiteNs, SiteCfgKey) + cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey) if ok { err := json.Unmarshal([]byte(cfgStr), siteCfg) if err != nil { @@ -95,14 +104,14 @@ func (fi *SiteStore) SetClientCfg(cfg *ClientConfig) error { if err != nil { return err } - return fi.store.SetStringIn(SiteNs, SiteCfgKey, string(cfgBytes)) + return st.store.SetStringIn(SiteNs, SiteCfgKey, string(cfgBytes)) } -func (fi *SiteStore) GetCfg() (*SiteConfig, error) { - fi.mtx.RLock() - defer fi.mtx.RUnlock() +func (st *SiteStore) GetCfg() (*SiteConfig, error) { + st.mtx.RLock() + defer st.mtx.RUnlock() - cfgStr, ok := fi.store.GetStringIn(SiteNs, SiteCfgKey) + cfgStr, ok := st.store.GetStringIn(SiteNs, SiteCfgKey) if !ok { return nil, ErrNotFound } diff --git a/src/server/config.go b/src/server/config.go index aa286a4..cda486b 100644 --- a/src/server/config.go +++ b/src/server/config.go @@ -3,6 +3,7 @@ package server import ( "encoding/json" + "github.com/ihexxa/quickshare/src/db/sitestore" "github.com/ihexxa/quickshare/src/db/userstore" ) @@ -53,11 +54,12 @@ type WorkerPoolCfg struct { } type Config struct { - Fs *FSConfig `json:"fs" yaml:"fs"` - Secrets *Secrets `json:"secrets" yaml:"secrets"` - Server *ServerCfg `json:"server" yaml:"server"` - Users *UsersCfg `json:"users" yaml:"users"` - Workers *WorkerPoolCfg `json:"workers" yaml:"workers"` + Fs *FSConfig `json:"fs" yaml:"fs"` + Secrets *Secrets `json:"secrets" yaml:"secrets"` + Server *ServerCfg `json:"server" yaml:"server"` + Users *UsersCfg `json:"users" yaml:"users"` + Workers *WorkerPoolCfg `json:"workers" yaml:"workers"` + Site *sitestore.SiteConfig `json:"site" yaml:"site"` } func NewConfig() *Config { @@ -106,6 +108,18 @@ func DefaultConfig() (string, error) { SleepCyc: 1, 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) diff --git a/src/server/server.go b/src/server/server.go index 8f7b42f..5693354 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -126,6 +126,22 @@ func initDeps(cfg gocfg.ICfg) *depidx.Deps { panic(fmt.Sprintf("fail to init file info store: %s", err)) } 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 { panic(fmt.Sprintf("fail to init site config store: %s", err)) }