summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-06 19:57:36 +0300
committerPaul Buetow <paul@buetow.org>2024-05-06 19:57:36 +0300
commit8a9b9038dd46f296747699613a14cadbc2f9934c (patch)
tree6a5593ed83713f0a60af59ad1b637bc5538b704b
parent1383e8a198313341ad1734e65a91de6e56267fb4 (diff)
can get entry by path
-rw-r--r--handlers.go19
-rw-r--r--health.go3
-rw-r--r--main.go15
3 files changed, 35 insertions, 2 deletions
diff --git a/handlers.go b/handlers.go
index ed030eb..f293e9c 100644
--- a/handlers.go
+++ b/handlers.go
@@ -5,9 +5,13 @@ import (
"fmt"
"io"
"net/http"
+ "os"
+ "regexp"
"time"
)
+var getIDRe = regexp.MustCompile(`^/[0-9]{4}/[a-z0-9]{64}\.json$`)
+
func handleSubmit(w http.ResponseWriter, r *http.Request, dataDir string) error {
if r.Method != "POST" {
return fmt.Errorf("expexted POST request")
@@ -55,3 +59,18 @@ func handleList(w http.ResponseWriter, r *http.Request, dataDir string) error {
fmt.Fprint(w, string(jsonData))
return nil
}
+
+func handleGet(w http.ResponseWriter, r *http.Request, dataDir string) error {
+ path := r.URL.Query().Get("path")
+ if !getIDRe.MatchString(path) {
+ return fmt.Errorf("invalid path %s", path)
+ }
+
+ data, err := os.ReadFile(fmt.Sprintf("%s/%s", dataDir, path))
+ if err != err {
+ return err
+ }
+
+ fmt.Fprint(w, string(data))
+ return nil
+}
diff --git a/health.go b/health.go
index 043c80f..e0e27ad 100644
--- a/health.go
+++ b/health.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "log"
"strings"
"sync"
)
@@ -51,6 +52,8 @@ func newHealthStatus() healthStatus {
}
func (hs healthStatus) set(s alertSeverity, what, text string) {
+ log.Println("setting health status for", what, "to", text, "with severity", s)
+
hs.mu.Lock()
defer hs.mu.Unlock()
diff --git a/main.go b/main.go
index a383aeb..f4a3e5c 100644
--- a/main.go
+++ b/main.go
@@ -13,13 +13,14 @@ func main() {
health := newHealthStatus()
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
+ log.Println("Someone requested /health")
fmt.Fprint(w, health.String())
})
http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
+ log.Println("Someone requested /submit")
if err := handleSubmit(w, r, *dataDir); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
- log.Println(err)
health.set(critical, "submitHandler", err.Error())
return
}
@@ -27,15 +28,25 @@ func main() {
})
http.HandleFunc("/list", func(w http.ResponseWriter, r *http.Request) {
+ log.Println("Someone requested /list")
if err := handleList(w, r, *dataDir); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
- log.Println(err)
health.set(critical, "listHandler", err.Error())
return
}
health.clear("listHandler")
})
+ http.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) {
+ log.Println("Someone requested /get")
+ if err := handleGet(w, r, *dataDir); err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ health.set(critical, "getHandler", err.Error())
+ return
+ }
+ health.clear("getHandler")
+ })
+
log.Println("Server is starting on ", *listenAddr)
if err := http.ListenAndServe(*listenAddr, nil); err != err {
log.Fatal("Error starting server: ", err)