diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -38,6 +38,7 @@ func main() { )(http.HandlerFunc(finalHandler))) mux.Handle("POST /language", http.HandlerFunc(setUserLanguage)) + mux.Handle("POST /theme", http.HandlerFunc(setUserTheme)) portStr := ":" + strconv.Itoa(*port) log.Println("Listening on", portStr) @@ -95,3 +96,32 @@ func setUserLanguage(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, c.Value, http.StatusFound) } } + +func setUserTheme(w http.ResponseWriter, r *http.Request) { + c, err := r.Cookie("theme") + if errors.Is(err, http.ErrNoCookie) { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "No ‘theme’ cookie exists") + return + } + + var theme string + + switch c.Value { + case "dark": + theme = "light" + case "light": + theme = "dark" + default: + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "Theme ‘%s’ is invalid", c.Value) + return + } + + http.SetCookie(w, &http.Cookie{ + Name: "theme", + Value: theme, + MaxAge: math.MaxInt32, + }) + http.Redirect(w, r, r.Referer(), http.StatusFound) +} |