summaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-06-21 11:49:42 +0200
committerxengineering <me@xengineering.eu>2026-06-21 11:55:44 +0200
commit7ab03af3f662c90b1868f5ef14e70f443b2d91cd (patch)
treeb82e9fc9b102bec32aa9f0705b52c446df8da60b /handlers.go
parent383cf7a521f7bfcdf552cd18ea9919930af2e9cf (diff)
downloadfinserv-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.go51
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
+ }
+ })
}