From 2e1e698f3232d72f441bbac7d4bc2c2b29accaf8 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 5 May 2024 01:08:36 +0300 Subject: can post some data --- .gitignore | 1 + LICENSE | 2 +- main.go | 45 ++++++++++++++++++++++++++++++++++++++------- 3 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 .gitignore 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) +} -- cgit v1.2.3