Refactor server routes
This commit is contained in:
parent
ca9b6e05b7
commit
5cbb20dcc4
21 changed files with 429 additions and 390 deletions
80
internal/server/routes/entries.go
Normal file
80
internal/server/routes/entries.go
Normal file
|
@ -0,0 +1,80 @@
|
|||
package routes
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"html/template"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"git.a71.su/Andrew71/hibiscus-txt/internal/files"
|
||||
"git.a71.su/Andrew71/hibiscus-txt/internal/templates"
|
||||
)
|
||||
|
||||
type EntryList struct {
|
||||
Title string
|
||||
Description template.HTML
|
||||
Entries []Entry
|
||||
}
|
||||
|
||||
type Entry struct {
|
||||
Title string
|
||||
Content string
|
||||
Link string
|
||||
}
|
||||
|
||||
type formatEntries func([]string) []Entry
|
||||
|
||||
// getEntries handles showing a list.
|
||||
func getEntries(w http.ResponseWriter, r *http.Request, title string, description template.HTML, dir string, format formatEntries) {
|
||||
filesList, err := files.List(dir)
|
||||
if err != nil {
|
||||
slog.Error("error reading file list", "directory", dir, "error", err)
|
||||
InternalError(w, r)
|
||||
return
|
||||
}
|
||||
var filesFormatted = format(filesList)
|
||||
|
||||
err = templates.List.ExecuteTemplate(w, "base", EntryList{Title: title, Description: description, Entries: filesFormatted})
|
||||
if err != nil {
|
||||
slog.Error("error executing template", "error", err)
|
||||
InternalError(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// getEntry handles showing a single file, editable or otherwise.
|
||||
func getEntry(w http.ResponseWriter, r *http.Request, title string, filename string, editable bool) {
|
||||
entry, err := files.Read(filename)
|
||||
if err != nil {
|
||||
if editable && errors.Is(err, os.ErrNotExist) {
|
||||
entry = []byte("")
|
||||
} else {
|
||||
slog.Error("error reading entry file", "error", err, "file", filename)
|
||||
InternalError(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if editable {
|
||||
err = templates.Edit.ExecuteTemplate(w, "base", Entry{Title: title, Content: string(entry)})
|
||||
} else {
|
||||
err = templates.View.ExecuteTemplate(w, "base", Entry{Title: title, Content: string(entry)})
|
||||
}
|
||||
if err != nil {
|
||||
InternalError(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// postEntry saves value of "text" HTML form component to a file and redirects back to Referer if present.
|
||||
func postEntry(filename string, w http.ResponseWriter, r *http.Request) {
|
||||
err := files.Save(filename, []byte(r.FormValue("text")))
|
||||
if err != nil {
|
||||
slog.Error("error saving file", "error", err, "file", filename)
|
||||
}
|
||||
if r.Referer() != "" {
|
||||
http.Redirect(w, r, r.Header.Get("Referer"), http.StatusFound)
|
||||
return
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue