From 95f0719ae1dae1b02484c34245b7bf7f6b4719ca Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Sun, 26 Jan 2025 11:21:57 +0100 Subject: [PATCH] Server --- rex_server/Makefile | 16 ++++++++++++++++ rex_server/go.mod | 3 +++ rex_server/server.go | 42 +++++++++++++++++++++++++++++++++++++----- 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 rex_server/Makefile create mode 100644 rex_server/go.mod diff --git a/rex_server/Makefile b/rex_server/Makefile new file mode 100644 index 0000000..7c311b1 --- /dev/null +++ b/rex_server/Makefile @@ -0,0 +1,16 @@ +NAME = rexserver + +build: commit.txt + go build -o $(NAME) + +run: commit.txt + go run . + +debug: commit.txt + go run . + +commit.txt: + go generate + +clean: + rm -f $(NAME) diff --git a/rex_server/go.mod b/rex_server/go.mod new file mode 100644 index 0000000..a1b4904 --- /dev/null +++ b/rex_server/go.mod @@ -0,0 +1,3 @@ +module rex_server + +go 1.23.5 diff --git a/rex_server/server.go b/rex_server/server.go index 3fa2167..5857f3d 100644 --- a/rex_server/server.go +++ b/rex_server/server.go @@ -1,15 +1,47 @@ -package server +package main import ( - "fmt" + "encoding/json" "html" + "log" "net/http" + "rex_model" + "time" ) func main() { - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) + port := ":8080" + addons := rex_model.AddonIndex + + mux := http.NewServeMux() + + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write([]byte("Hello, " + html.EscapeString(r.URL.Path))) }) - http.ListenAndServe(":8080", nil) + mux.HandleFunc("/api/index", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(addons); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + }) + + loggedMux := loggingMiddleware(mux) + + log.Printf("Listening on http://localhost%s", port) + log.Fatal(http.ListenAndServe(port, loggedMux)) +} + +func loggingMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + + log.Printf("[%s] %s %s %s", r.RemoteAddr, r.Method, r.URL.Path, start.Format("2006-01-02 15:04:05")) + + next.ServeHTTP(w, r) + duration := time.Since(start) + + log.Printf("[%s] Completed in %v\n", r.RemoteAddr, duration) + }) }