diff options
| author | Paul Buetow <paul@buetow.org> | 2024-05-05 15:43:29 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-05-05 15:43:29 +0300 |
| commit | f173d052d3f8679716862d233d8751f67d3b197c (patch) | |
| tree | bfb1e7ca88b669cac319c78aa5c2ebbd737818f1 | |
| parent | 2e1e698f3232d72f441bbac7d4bc2c2b29accaf8 (diff) | |
can retrieve JSON payload
| -rw-r--r-- | docs/sample-payload.json | 3 | ||||
| -rw-r--r-- | entry.go | 29 | ||||
| -rw-r--r-- | io.go | 16 | ||||
| -rw-r--r-- | main.go | 36 | ||||
| -rw-r--r-- | submit.go | 39 |
5 files changed, 87 insertions, 36 deletions
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) +} @@ -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) +} @@ -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 +} |
