summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-05 01:08:36 +0300
committerPaul Buetow <paul@buetow.org>2024-05-05 01:08:36 +0300
commit2e1e698f3232d72f441bbac7d4bc2c2b29accaf8 (patch)
tree311ad39f4ebb3b9695f694790f92be3586f001c0
parentd8056ae52ce574d36cd0657d230731166f171327 (diff)
can post some data
-rw-r--r--.gitignore1
-rw-r--r--LICENSE2
-rw-r--r--main.go45
3 files changed, 40 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1269488
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+data
diff --git a/LICENSE b/LICENSE
index 200a059..e35519f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2024 snonux.
+Copyright (c) 2024 Paul Buetow.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
diff --git a/main.go b/main.go
index e7729d0..05720bb 100644
--- a/main.go
+++ b/main.go
@@ -1,25 +1,26 @@
package main
import (
+ "crypto/sha256"
"flag"
"fmt"
+ "io"
"log"
"net/http"
"os"
+ "path/filepath"
+ "time"
)
func main() {
listenAddr := flag.String("listenAddr", "localhost:8080", "The listen address")
dataDir := flag.String("dataDir", "./data", "The data directory")
- if _, err := os.Stat(*dataDir); os.IsNotExist(err) {
- if err := os.MkdirAll(*dataDir, 700); err != nil {
- log.Fatal(*dataDir, err)
- }
- }
-
http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Hello, you've submitted somthing")
+ if err := handleSubmit(w, r, *dataDir); err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ log.Println(err)
+ }
})
log.Println("Server is starting on ", *listenAddr)
@@ -27,3 +28,33 @@ 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)
+}