diff --git a/README.md b/README.md index e85d6b1..3c57f8a 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ Instead, the web interface can be locked behind a password set via `intake passw Parity features * [ ] source batching -* [ ] web source add +* [x] web source add * [x] first-party replacement for cron * [x] NixOS module * [x] NixOS vm demo diff --git a/web/html/home.html b/web/html/home.html index 0610f57..9ce6985 100644 --- a/web/html/home.html +++ b/web/html/home.html @@ -45,6 +45,13 @@ {{ else }}
No sources found.
{{ end }} ++
+ diff --git a/web/main.go b/web/main.go index a3cb9b1..18cb20f 100644 --- a/web/main.go +++ b/web/main.go @@ -39,6 +39,7 @@ func RunServer(db core.DB, addr string, port string) error { handleFunc("GET /style.css", env.getStyle, logged) handleFunc("GET /htmx.org@2.0.4.js", env.getScript, logged) handleFunc("POST /login", env.login, logged) + handleFunc("POST /source", env.addSource, env.authed, logged) handleFunc("GET /source/{source}", env.getSource, env.authed, logged) handleFunc("GET /source/{source}/edit", env.getEditSource, env.authed, logged) handleFunc("POST /source/{source}/edit", env.editSource, env.authed, logged) diff --git a/web/source.go b/web/source.go index 66dba38..f0a91b0 100644 --- a/web/source.go +++ b/web/source.go @@ -162,3 +162,16 @@ func (env *Env) editSource(writer http.ResponseWriter, req *http.Request) { writer.Header()["HX-Refresh"] = []string{"true"} writer.WriteHeader(http.StatusNoContent) } + +func (env *Env) addSource(writer http.ResponseWriter, req *http.Request) { + if err := req.ParseForm(); err != nil { + http.Error(writer, err.Error(), 400) + return + } + name := req.PostForm.Get("name") + if err := core.AddSource(env.db, name); err != nil { + http.Error(writer, err.Error(), 500) + return + } + http.Redirect(writer, req, "/source/"+name+"/edit", http.StatusFound) +}