From f173d052d3f8679716862d233d8751f67d3b197c Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 5 May 2024 15:43:29 +0300 Subject: can retrieve JSON payload --- docs/sample-payload.json | 3 +++ entry.go | 29 +++++++++++++++++++++++++++++ io.go | 16 ++++++++++++++++ main.go | 36 ------------------------------------ submit.go | 39 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 36 deletions(-) create mode 100644 docs/sample-payload.json create mode 100644 entry.go create mode 100644 io.go create mode 100644 submit.go diff --git a/docs/sample-payload.json b/docs/sample-payload.json new file mode 100644 index 0000000..a4ead89 --- /dev/null +++ b/docs/sample-payload.json @@ -0,0 +1,3 @@ +{ + "body": "hello world" +} diff --git a/entry.go b/entry.go new file mode 100644 index 0000000..1615392 --- /dev/null +++ b/entry.go @@ -0,0 +1,29 @@ +package main + +import ( + "encoding/json" + "fmt" +) + +type shared struct { + Name string `json:"id"` + Is bool `json:"is,omitempty"` +} + +type entry struct { + Body string `json:"body"` + Shared []shared `json:"shared,omitempty"` + Epoch int `json:"epoch,omitempty"` +} + +func newEntry(data []byte) (entry, error) { + var entry entry + if err := json.Unmarshal(data, &entry); err != nil { + return entry, fmt.Errorf("unable to deserialise payload: %w", err) + } + return entry, nil +} + +func (e entry) serialize() ([]byte, error) { + return json.Marshal(e) +} diff --git a/io.go b/io.go new file mode 100644 index 0000000..4bf795f --- /dev/null +++ b/io.go @@ -0,0 +1,16 @@ +package main + +import ( + "os" + "path/filepath" +) + +func saveFile(filePath string, bytes []byte) error { + dir := filepath.Dir(filePath) + if _, err := os.Stat(dir); os.IsNotExist(err) { + if err := os.MkdirAll(dir, 0755); err != nil { + return err + } + } + return os.WriteFile(filePath, bytes, 0644) +} diff --git a/main.go b/main.go index 05720bb..3735b5b 100644 --- a/main.go +++ b/main.go @@ -1,15 +1,9 @@ package main import ( - "crypto/sha256" "flag" - "fmt" - "io" "log" "net/http" - "os" - "path/filepath" - "time" ) func main() { @@ -28,33 +22,3 @@ func main() { log.Fatal("Error starting server: ", err) } } - -func handleSubmit(w http.ResponseWriter, r *http.Request, dataDir string) error { - if r.Method != "POST" { - return fmt.Errorf("Expexted POST request") - } - - data, err := io.ReadAll(r.Body) - if err != nil { - return err - } - - filePath := fmt.Sprintf("%s/%s/%x.txt", dataDir, - time.Now().Format("2006"), sha256.Sum256(data)) - - if err := saveFile(filePath, data); err != nil { - return err - } - - return nil -} - -func saveFile(filePath string, bytes []byte) error { - dir := filepath.Dir(filePath) - if _, err := os.Stat(dir); os.IsNotExist(err) { - if err := os.MkdirAll(dir, 0755); err != nil { - return err - } - } - return os.WriteFile(filePath, bytes, 0644) -} diff --git a/submit.go b/submit.go new file mode 100644 index 0000000..2c65d6b --- /dev/null +++ b/submit.go @@ -0,0 +1,39 @@ +package main + +import ( + "crypto/sha256" + "fmt" + "io" + "net/http" + "time" +) + +func handleSubmit(w http.ResponseWriter, r *http.Request, dataDir string) error { + if r.Method != "POST" { + return fmt.Errorf("Expexted POST request") + } + + bytes, err := io.ReadAll(r.Body) + if err != nil { + return err + } + + entry, err := newEntry(bytes) + if err != nil { + return err + } + + filePath := fmt.Sprintf("%s/%s/%x.json", dataDir, + time.Now().Format("2006"), sha256.Sum256(bytes)) + + jsonStr, err := entry.serialize() + if err != nil { + return err + } + + if err := saveFile(filePath, jsonStr); err != nil { + return err + } + + return nil +} -- cgit v1.2.3