From 4c9b51b8c6b2ebeea0481d219df89ed4fec1e360 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 25 Mar 2024 13:58:48 +0100 Subject: feat(ods): implement basic ods functionality --- main.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 main.go (limited to 'main.go') diff --git a/main.go b/main.go new file mode 100644 index 0000000..3afc7cc --- /dev/null +++ b/main.go @@ -0,0 +1,75 @@ +package main + +import ( + "embed" + "html/template" + "log/slog" + "net/http" + "strings" +) + +// Variables to customise the search behaviour +const ( + listenStr = "0.0.0.0:8090" +) + +//go:embed ods.txt +var ods string + +//go:embed index.html +var templatesFS embed.FS + +//go:embed static/* +var static embed.FS + +// html templates +var indexTemplate = template.Must(template.New("index").ParseFS(templatesFS, "index.html")) + +type IndexData struct { + HasQuery bool + Query string + Invalid bool +} + +func getIndex() http.Handler { + data := IndexData{ + HasQuery: false, + Query: "", + Invalid: true, + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-store, no-cache") + indexTemplate.ExecuteTemplate(w, "index.html", data) + }) +} + +func postIndex() http.Handler { + words := strings.Split(ods,"\n") + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + data := IndexData{ + HasQuery: true, + Query: r.FormValue("query"), + Invalid: true, + } + query := strings.ToUpper(data.Query) + for _, w := range words { + if w == query { + data.Invalid = false + break + } + } + w.Header().Set("Cache-Control", "no-store, no-cache") + indexTemplate.ExecuteTemplate(w, "index.html", data) + }) +} + +// The main function +func main() { + http.Handle("GET /static/", http.FileServer(http.FS(static))) + http.Handle("GET /", getIndex()) + http.Handle("POST /", postIndex()) + slog.Info("listening", "addr", listenStr) + if err := http.ListenAndServe(listenStr, nil); err != nil && err != http.ErrServerClosed { + slog.Error("error listening and serving", "error", err) + } +} -- cgit v1.2.3