From ffe6167d968d852cda1b38019f4a61728790f246 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Thu, 2 Nov 2023 16:15:45 +1300 Subject: [PATCH] Feature: Add URL redirect (`/view/latest`) to view latest message in web UI (#166) --- .../{message-rendered.go => messages.go} | 22 +++++++++++++++++++ server/server.go | 3 +++ 2 files changed, 25 insertions(+) rename server/handlers/{message-rendered.go => messages.go} (89%) diff --git a/server/handlers/message-rendered.go b/server/handlers/messages.go similarity index 89% rename from server/handlers/message-rendered.go rename to server/handlers/messages.go index 48894d3..110056b 100644 --- a/server/handlers/message-rendered.go +++ b/server/handlers/messages.go @@ -3,6 +3,7 @@ package handlers import ( "fmt" "net/http" + "net/url" "regexp" "strings" @@ -11,6 +12,27 @@ import ( "github.com/gorilla/mux" ) +// RedirectToLatestMessage (method: GET) redirects the web UI to the latest message +func RedirectToLatestMessage(w http.ResponseWriter, r *http.Request) { + messages, err := storage.List(0, 1) + if err != nil { + httpError(w, err.Error()) + return + } + + uri := config.Webroot + + if len(messages) == 1 { + uri, err = url.JoinPath(uri, "/view/"+messages[0].ID) + if err != nil { + httpError(w, err.Error()) + return + } + } + + http.Redirect(w, r, uri, 302) +} + // GetMessageHTML (method: GET) returns a rendered version of a message's HTML part func GetMessageHTML(w http.ResponseWriter, r *http.Request) { // swagger:route GET /view/{ID}.html testing GetMessageHTML diff --git a/server/server.go b/server/server.go index 084ffd8..866dc4b 100644 --- a/server/server.go +++ b/server/server.go @@ -68,6 +68,9 @@ func Listen() { r.HandleFunc(redirect, middleWareFunc(addSlashToWebroot)).Methods("GET") } + // UI shortcut + r.HandleFunc(config.Webroot+"view/latest", handlers.RedirectToLatestMessage).Methods("GET") + // frontend testing r.HandleFunc(config.Webroot+"view/{id}.html", handlers.GetMessageHTML).Methods("GET") r.HandleFunc(config.Webroot+"view/{id}.txt", handlers.GetMessageText).Methods("GET")