diff options
Diffstat (limited to 'roseh.moe.go')
| -rw-r--r-- | roseh.moe.go | 95 |
1 files changed, 13 insertions, 82 deletions
diff --git a/roseh.moe.go b/roseh.moe.go index 98febd1..df86f2d 100644 --- a/roseh.moe.go +++ b/roseh.moe.go @@ -10,7 +10,6 @@ import ( "net/http" "net/http/httputil" "net/url" - "slices" "strings" "time" ) @@ -47,89 +46,14 @@ var ( ) var ( - //go:embed templates/blog/post.html.template - postString string - - //go:embed templates/blog/posts - blogPostFiles embed.FS -) - -func mustParseBlogPostTemplates() map[string]*template.Template { - base, err := outlineTemplate.Clone() - if err != nil { - log.Fatalf("outlineTemplate.Clone: %s", err) - } - if _, err := base.New("body").Parse(postString); err != nil { - log.Fatalf("post.html.template: %s", err) - } - postFiles, err := blogPostFiles.ReadDir("templates/blog/posts") - if err != nil { - log.Fatalf("read blog post templates: %s", err) - } - posts := make(map[string]*template.Template, len(postFiles)) - for _, file := range postFiles { - fileContent, err := blogPostFiles.ReadFile("templates/blog/posts/" + file.Name()) - if err != nil { - log.Fatalf("read blog post template %q: %s", file.Name(), err) - } - tmpl, err := base.Clone() - if err != nil { - log.Fatalf("base.Clone: %s", err) - } - if _, err := tmpl.New("post").Parse(string(fileContent)); err != nil { - log.Fatalf("%q: %s", file.Name(), err) - } - posts[strings.TrimSuffix(file.Name(), ".html.template")] = tmpl - } - return posts -} - -var blogPostTemplates = mustParseBlogPostTemplates() - -func blog(w http.ResponseWriter, r *http.Request) { - tmpl, ok := blogPostTemplates[strings.TrimPrefix(r.URL.Path, "/blog/")] - if !ok { - notFound(w, r) - return - } - if err := tmpl.ExecuteTemplate(w, "outline", nil); err != nil { - log.Printf("Warning: blog: %s", err) - } -} - -type blogPost struct { - Name string - Slug string -} - -func mustLoadBlogPosts() []blogPost { - buf := new(strings.Builder) - posts := make([]blogPost, 0, len(blogPostTemplates)) - for slug, tmpl := range blogPostTemplates { - buf.Reset() - if err := tmpl.ExecuteTemplate(buf, "title", nil); err != nil { - log.Fatalf("blog post %q: title: %s", slug, err) - } - posts = append(posts, blogPost{ - Name: buf.String(), - Slug: slug, - }) - } - slices.SortFunc(posts, func(x, y blogPost) int { return strings.Compare(y.Slug, x.Slug) }) - return posts -} - -var ( //go:embed templates/index.html.template indexString string indexTemplate = template.Must(template.Must(outlineTemplate.Clone()).New("body").Parse(indexString)) - - blogPostsList = mustLoadBlogPosts() ) func index(w http.ResponseWriter, _ *http.Request) { - if err := indexTemplate.ExecuteTemplate(w, "outline", blogPostsList); err != nil { + if err := indexTemplate.ExecuteTemplate(w, "outline", nil); err != nil { log.Printf("Warning: index: %s", err) } } @@ -150,22 +74,28 @@ func pong(w http.ResponseWriter, _ *http.Request) { //go:embed static var staticFiles embed.FS -func static(w http.ResponseWriter, r *http.Request) { - fileName := strings.TrimPrefix(r.URL.Path, "/") - f, err := staticFiles.Open(fileName) +func serveStaticFile(w http.ResponseWriter, r *http.Request, path string) { + f, err := staticFiles.Open(path) if err != nil { notFound(w, r) return } defer f.Close() - http.ServeContent(w, r, fileName, serverStartTime, f.(io.ReadSeeker)) + http.ServeContent(w, r, path, serverStartTime, f.(io.ReadSeeker)) +} + +func static(w http.ResponseWriter, r *http.Request) { + serveStaticFile(w, r, strings.TrimPrefix(r.URL.Path, "/")) +} + +func favicon(w http.ResponseWriter, r *http.Request) { + serveStaticFile(w, r, "static/favicon.ico") } func main() { flag.Parse() mux := http.NewServeMux() - mux.HandleFunc("/blog/", blog) mux.HandleFunc("/pong", pong) jellyfinURL, err := url.Parse("http://localhost:8096") if err != nil { @@ -173,6 +103,7 @@ func main() { } mux.Handle("/cinema/", httputil.NewSingleHostReverseProxy(jellyfinURL)) mux.HandleFunc("/static/", static) + mux.HandleFunc("/favicon.ico", favicon) mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { index(w, r) |
