diff options
| author | xengineering <me@xengineering.eu> | 2026-06-21 11:49:42 +0200 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-06-21 11:55:44 +0200 |
| commit | 7ab03af3f662c90b1868f5ef14e70f443b2d91cd (patch) | |
| tree | b82e9fc9b102bec32aa9f0705b52c446df8da60b /handlers.go | |
| parent | 383cf7a521f7bfcdf552cd18ea9919930af2e9cf (diff) | |
| download | finserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.tar finserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.tar.zst finserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.zip | |
Add `register` HTTP handler
This allows users to register.
Diffstat (limited to 'handlers.go')
| -rw-r--r-- | handlers.go | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/handlers.go b/handlers.go index d28a491..e6d60fb 100644 --- a/handlers.go +++ b/handlers.go @@ -1,7 +1,9 @@ package main import ( + "database/sql" "embed" + "encoding/json" "fmt" "io/fs" "log" @@ -13,8 +15,9 @@ import ( //go:embed build/frontend/public var frontendEmbed embed.FS -func registerHandlers(r *mux.Router) { - r.HandleFunc("/api/version", version) +func registerHandlers(r *mux.Router, db *sql.DB) { + r.Handle("/api/version", version(db)) + r.Handle("/api/registration", register(db)) // frontend must come last to make sure /api takes precedence frontend, err := fs.Sub(frontendEmbed, "build/frontend/public") @@ -24,6 +27,46 @@ func registerHandlers(r *mux.Router) { r.PathPrefix("/").Handler(http.FileServerFS(frontend)) } -func version(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, versionTxt) +func version(db *sql.DB) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, versionTxt) + }) +} + +func register(db *sql.DB) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var data struct { + Username string + Password string + } + + dec := json.NewDecoder(r.Body) + dec.DisallowUnknownFields() + + err := dec.Decode(&data) + if err != nil { + log.Printf("Failed to decode: %v", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + if data.Username == "" { + log.Print("Got registration request with empty username") + w.WriteHeader(http.StatusBadRequest) + return + } + + if data.Password == "" { + log.Print("Got registration request with empty password") + w.WriteHeader(http.StatusBadRequest) + return + } + + err = Register(db, data.Username, data.Password) + if err != nil { + log.Printf("Failed to register new user: %v", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + }) } |
