diff options
| author | Paul Buetow <paul@buetow.org> | 2024-05-19 12:22:25 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-05-19 12:22:25 +0300 |
| commit | 7111e1bd5c2ecb43cf86a43b9781269f2abe265c (patch) | |
| tree | c37ede9dca87eccb9507608e63d0163f536c77ae | |
| parent | dfb17b8690409242418dc5e127cdc6ebcdaa2073 (diff) | |
handler is now a struct
| -rw-r--r-- | cmd/gosd/main.go | 9 | ||||
| -rw-r--r-- | internal/server/handle/handle.go | 40 |
2 files changed, 30 insertions, 19 deletions
diff --git a/cmd/gosd/main.go b/cmd/gosd/main.go index f8173b7..1e97798 100644 --- a/cmd/gosd/main.go +++ b/cmd/gosd/main.go @@ -20,6 +20,7 @@ func main() { } serv := server.New(conf) + hand := handle.New(conf) serv.Handle("health", func(w http.ResponseWriter, r *http.Request) error { fmt.Fprint(w, serv.Status.String()) @@ -27,19 +28,19 @@ func main() { }) serv.Handle("submit", func(w http.ResponseWriter, r *http.Request) error { - return handle.Submit(w, r, conf.DataDir) + return hand.Submit(w, r) }) serv.Handle("list", func(w http.ResponseWriter, r *http.Request) error { - return handle.List(w, r, conf.DataDir) + return hand.List(w, r) }) serv.Handle("get", func(w http.ResponseWriter, r *http.Request) error { - return handle.Get(w, r, conf.DataDir) + return hand.Get(w, r) }) serv.Handle("merge", func(w http.ResponseWriter, r *http.Request) error { - return handle.Merge(w, r, conf) + return hand.Merge(w, r) }) log.Println("Server is starting on", conf.ListenAddr) diff --git a/internal/server/handle/handle.go b/internal/server/handle/handle.go index 1a99750..ba6bee8 100644 --- a/internal/server/handle/handle.go +++ b/internal/server/handle/handle.go @@ -16,10 +16,20 @@ import ( "codeberg.org/snonux/gos/internal/types" ) -var getIDRe = regexp.MustCompile(`^/[0-9]{4}/[a-z0-9]{64}\.json$`) +type Handle struct { + conf server.ServerConfig + getIdRe *regexp.Regexp +} + +func New(conf server.ServerConfig) Handle { + return Handle{ + conf: conf, + getIdRe: regexp.MustCompile(`^/[0-9]{4}/[a-z0-9]{64}\.json$`), + } +} // TODO: Use repository.Repository to store the file to the file system -func Submit(w http.ResponseWriter, r *http.Request, dataDir string) error { +func (h Handle) Submit(w http.ResponseWriter, r *http.Request) error { if r.Method != "POST" { return fmt.Errorf("expexted POST request") } @@ -33,7 +43,7 @@ func Submit(w http.ResponseWriter, r *http.Request, dataDir string) error { if err != nil { return err } - filePath := fmt.Sprintf("%s/%s/%s.json", dataDir, time.Now().Format("2006"), entry.ID) + filePath := fmt.Sprintf("%s/%s/%s.json", h.conf.DataDir, time.Now().Format("2006"), entry.ID) jsonStr, err := entry.Serialize() if err != nil { @@ -47,12 +57,12 @@ func Submit(w http.ResponseWriter, r *http.Request, dataDir string) error { return nil } -func List(w http.ResponseWriter, r *http.Request, dataDir string) error { +func (h Handle) List(w http.ResponseWriter, r *http.Request) error { if r.Method != "GET" { return fmt.Errorf("expexted GET request") } - list, err := repository.Instance(dataDir).List() + list, err := repository.Instance(h.conf.DataDir).List() if err != nil { return err } @@ -61,13 +71,13 @@ func List(w http.ResponseWriter, r *http.Request, dataDir string) error { return err } -func Get(w http.ResponseWriter, r *http.Request, dataDir string) error { +func (h Handle) Get(w http.ResponseWriter, r *http.Request) error { id := r.URL.Query().Get("id") - if !getIDRe.MatchString(id) { + if !h.getIdRe.MatchString(id) { return fmt.Errorf("invalid id %s", id) } - data, err := os.ReadFile(fmt.Sprintf("%s/%s", dataDir, id)) + data, err := os.ReadFile(fmt.Sprintf("%s/%s", h.conf.DataDir, id)) if err != err { return err } @@ -76,11 +86,11 @@ func Get(w http.ResponseWriter, r *http.Request, dataDir string) error { return nil } -func Merge(w http.ResponseWriter, r *http.Request, conf server.ServerConfig) error { +func (h Handle) Merge(w http.ResponseWriter, r *http.Request) error { var errs []error - for _, partner := range conf.Partners() { - if err := mergeFromPartner(conf, partner); err != nil { + for _, partner := range h.conf.Partners() { + if err := h.mergeFromPartner(partner); err != nil { errs = append(errs, err) } } @@ -93,15 +103,15 @@ func Merge(w http.ResponseWriter, r *http.Request, conf server.ServerConfig) err return nil } -func mergeFromPartner(conf server.ServerConfig, partner string) error { +func (h Handle) mergeFromPartner(partner string) error { var ( errs []error uri = fmt.Sprintf("%s/list", partner) - repo = repository.Instance(conf.DataDir) + repo = repository.Instance(h.conf.DataDir) pairs []repository.EntryPair ) - if err := easyhttp.GetData(uri, conf.ApiKey, &pairs); err != nil { + if err := easyhttp.GetData(uri, h.conf.ApiKey, &pairs); err != nil { return err } @@ -115,7 +125,7 @@ func mergeFromPartner(conf server.ServerConfig, partner string) error { uri = fmt.Sprintf("%s/get?id=%s", partner, pair.ID) ) - if err := easyhttp.GetData(uri, conf.ApiKey, &entry); err != nil { + if err := easyhttp.GetData(uri, h.conf.ApiKey, &entry); err != nil { errs = append(errs, err) continue } |
