Changes
2 changed files (+267/-7)
-
-
@@ -76,10 +76,85 @@ index f8ba6ba..6a89c93 100644github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= diff --git a/routes/handler.go b/routes/handler.go index 5544767..2ecd2f8 100644 --- a/routes/handler.go +++ b/routes/handler.go @@ -1,7 +1,9 @@ package routes import ( + "html/template" "net/http" + "path/filepath" "github.com/pocka/legit/config" ) @@ -30,7 +32,11 @@ func (d *deps) Multiplex(w http.ResponseWriter, r *http.Request) { func Handlers(c *config.Config) *http.ServeMux { mux := http.NewServeMux() - d := deps{c} + + tpath := filepath.Join(c.Dirs.Templates, "*") + t := template.Must(template.ParseGlob(tpath)) + + d := deps{c, t} mux.HandleFunc("GET /", d.Index) mux.HandleFunc("GET /static/{file}", d.ServeStatic) diff --git a/routes/preview/renderer.go b/routes/preview/renderer.go index 10ea2ec..c0701f9 100644 --- a/routes/preview/renderer.go +++ b/routes/preview/renderer.go @@ -20,12 +20,13 @@ type Renderer interface { type MarkdownToHtmlRenderer struct{} +var sanitizer = bluemonday.UGCPolicy() + func (r MarkdownToHtmlRenderer) GetPreviewType() string { return "html" } func (r MarkdownToHtmlRenderer) Render(code []byte) ([]byte, error) { - sanitizer := bluemonday.UGCPolicy() unsafe := blackfriday.Run(code, blackfriday.WithExtensions(blackfriday.CommonExtensions)) return sanitizer.SanitizeBytes(unsafe), nil } diff --git a/routes/routes.go b/routes/routes.go index 71a0d67..4767e48 100644 index 71a0d67..5aacc95 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -25,8 +25,11 @@ import ( type deps struct { c *config.Config + t *template.Template } +var ugcPolicy = bluemonday.UGCPolicy() + func (d *deps) Index(w http.ResponseWriter, r *http.Request) { dirs, err := os.ReadDir(d.c.Repo.ScanPath) if err != nil { @@ -76,15 +79,12 @@ func (d *deps) Index(w http.ResponseWriter, r *http.Request) { return summaries[j].LastCommit.Committer.When.Before(summaries[i].LastCommit.Committer.When) }) - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := repoListData{ Config: d.c, Repositories: summaries, } - if err := t.ExecuteTemplate(w, "repo-list", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-list", data); err != nil { log.Println(err) return } @@ -138,7 +138,7 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { return blackfriday.GoToNext }
-
@@ -100,7 +175,20 @@ index 71a0d67..4767e48 100644node.LinkData.Destination = fmt.Appendf([]byte{}, "/%s/tree/%s/%s", name, mainBranch, href) node.LinkData.Destination = node.LinkData.Destination[:len(node.LinkData.Destination)-1] } else { @@ -188,6 +190,7 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { @@ -175,10 +177,10 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { writer.Bytes(), blackfriday.WithExtensions(blackfriday.CommonExtensions), ) - html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) + html := ugcPolicy.SanitizeBytes(unsafe) readmeContent = template.HTML(html) default: - safe := bluemonday.UGCPolicy().SanitizeBytes([]byte(content)) + safe := ugcPolicy.SanitizeBytes([]byte(content)) readmeContent = template.HTML( fmt.Sprintf(`<pre>%s</pre>`, safe), ) @@ -188,12 +190,10 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { } if readmeContent == "" {
-
@@ -108,7 +196,53 @@ index 71a0d67..4767e48 100644log.Printf("no readme found for %s", name) } @@ -404,13 +407,11 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - if len(commits) >= 3 { commits = commits[:3] } @@ -212,7 +212,7 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { IsGoModule: isGoModule(gr), } - if err := t.ExecuteTemplate(w, "repo-top", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-top", data); err != nil { log.Println(err) return } @@ -266,10 +266,7 @@ func (d *deps) RepoTree(w http.ResponseWriter, r *http.Request) { Files: files, } - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - - if err := t.ExecuteTemplate(w, "repo-tree-ref", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-tree-ref", data); err != nil { log.Println(err) return } @@ -330,9 +327,6 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) { relpath = strings.Split(treePath, "/") } - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - if r.URL.Query().Has("preview") { previewType := r.URL.Query().Get("preview") @@ -359,7 +353,7 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) { Content: template.HTML(html), } - if err := t.ExecuteTemplate(w, "repo-blob-ref-html-preview", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-blob-ref-html-preview", data); err != nil { log.Println(err) return } @@ -404,16 +398,14 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) { PreviewTypes: previewTypes, }
-
@@ -126,7 +260,133 @@ index 71a0d67..4767e48 100644+ data.SyntaxHighlightedContent = highlighted } if err := t.ExecuteTemplate(w, "repo-blob-ref", data); err != nil { - if err := t.ExecuteTemplate(w, "repo-blob-ref", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-blob-ref", data); err != nil { log.Println(err) return } @@ -506,9 +498,6 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) { return } - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := repoLogRefData{ Config: d.c, Meta: repositoryMeta{ @@ -520,7 +509,7 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) { Commits: commits, } - if err := t.ExecuteTemplate(w, "repo-log-ref", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-log-ref", data); err != nil { log.Println(err) return } @@ -553,9 +542,6 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) { return } - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := repoCommitData{ Config: d.c, Meta: repositoryMeta{ @@ -569,7 +555,7 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) { Diff: diff, } - if err := t.ExecuteTemplate(w, "repo-commit", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-commit", data); err != nil { log.Println(err) return } @@ -615,9 +601,6 @@ func (d *deps) Refs(w http.ResponseWriter, r *http.Request) { return } - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := repoRefsData{ Config: d.c, Meta: repositoryMeta{ @@ -630,7 +613,7 @@ func (d *deps) Refs(w http.ResponseWriter, r *http.Request) { Branches: branches, } - if err := t.ExecuteTemplate(w, "repo-refs", data); err != nil { + if err := d.t.ExecuteTemplate(w, "repo-refs", data); err != nil { log.Println(err) return } diff --git a/routes/template.go b/routes/template.go index d83ce06..9e0b51e 100644 --- a/routes/template.go +++ b/routes/template.go @@ -1,36 +1,28 @@ package routes import ( - "html/template" "log" "net/http" - "path/filepath" ) func (d *deps) Write404(w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := error404Data{ Config: d.c, } w.WriteHeader(404) - if err := t.ExecuteTemplate(w, "404", data); err != nil { + if err := d.t.ExecuteTemplate(w, "404", data); err != nil { log.Printf("404 template: %s", err) } } func (d *deps) Write500(w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - data := error500Data{ Config: d.c, } w.WriteHeader(500) - if err := t.ExecuteTemplate(w, "500", data); err != nil { + if err := d.t.ExecuteTemplate(w, "500", data); err != nil { log.Printf("500 template: %s", err) } } diff --git a/routes/util.go b/routes/util.go index 2b5b853..5b91553 100644 --- a/routes/util.go +++ b/routes/util.go @@ -90,6 +90,8 @@ func countLines(r io.Reader) (int, error) { } } +var formatter = html.New(html.WithClasses(true), html.ClassPrefix("chroma-")) + func highlightCode(fileName string, code string) (template.HTML, error) { lexer := lexers.Get(fileName) @@ -98,8 +100,6 @@ func highlightCode(fileName string, code string) (template.HTML, error) { return "", nil } - formatter := html.New(html.WithClasses(true), html.ClassPrefix("chroma-")) - iter, err := lexer.Tokenise(nil, code) if err != nil { return "", fmt.Errorf("Failed to tokenize code: %s", err) diff --git a/templates/repo-blob-ref.html.tmpl b/templates/repo-blob-ref.html.tmpl index a0876df..7518c2f 100644 --- a/templates/repo-blob-ref.html.tmpl
-
-
-
@@ -43,11 +43,11 @@}, "nixpkgs": { "locked": { "lastModified": 1783224372, "narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=", "lastModified": 1783522502, "narHash": "sha256-iffAls3iaNTyJC2faYcUXSI+Gp02cDjYl+MygxKl2GI=", "owner": "NixOS", "repo": "nixpkgs", "rev": "d407951447dcd00442e97087bf374aad70c04cea", "rev": "0bb7ec54c8483066ec9d7720e780a5caa71f8612", "type": "github" }, "original": {
-