fierj
PublicTiny personal git forge
f7772b440f50569594efdf378a7fa925179490f8
diff --git a/repo_handlers.go b/repo_handlers.go
index 10b569f..70a7eb8 100644
--- a/repo_handlers.go
+++ b/repo_handlers.go
@@ -73,11 +73,13 @@ var funcMap = template.FuncMap{
},
}
-func renderError(w http.ResponseWriter, tmpl *template.Template, code int, message string) {
+func renderError(w http.ResponseWriter, r *http.Request, tmpl *template.Template, code int, message string) {
w.WriteHeader(code)
tmpl.ExecuteTemplate(w, "error.html", map[string]any{
"Code": code,
"Message": message,
+ "User": User(r),
+ "CSRF": CSRF(r),
})
}
@@ -103,6 +105,7 @@ func withUser(r *http.Request, data map[string]any) map[string]any {
data = map[string]any{}
}
data["User"] = User(r)
+ data["CSRF"] = CSRF(r)
return data
}
@@ -120,7 +123,7 @@ func Repos(cfg Config, tmpl *template.Template) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
repos, err := ListRepos(cfg)
if err != nil {
- renderError(w, tmpl, http.StatusInternalServerError, "failed to list repositories: "+err.Error())
+ renderError(w, r, tmpl, http.StatusInternalServerError, "failed to list repositories: "+err.Error())
return
}
// Filter private repos for anonymous users.
@@ -134,6 +137,7 @@ func Repos(cfg Config, tmpl *template.Template) http.HandlerFunc {
tmpl.ExecuteTemplate(w, "repo_list.html", map[string]any{
"Repos": visible,
"User": user,
+ "CSRF": CSRF(r),
})
}
}
@@ -207,7 +211,7 @@ func Tree(cfg Config, tmpl *template.Template) http.HandlerFunc {
}
entries, err := git.List(ref, treePath)
if err != nil {
- renderError(w, tmpl, http.StatusInternalServerError, "failed to list tree: "+err.Error())
+ renderError(w, r, tmpl, http.StatusInternalServerError, "failed to list tree: "+err.Error())
return
}
// directories first
@@ -257,7 +261,7 @@ func Blob(cfg Config, tmpl *template.Template) http.HandlerFunc {
content, err := git.Blob(ref, filePath)
if err != nil {
- renderError(w, tmpl, http.StatusNotFound, err.Error())
+ renderError(w, r, tmpl, http.StatusNotFound, err.Error())
return
}
tmpl.ExecuteTemplate(w, "repo_blob.html", withUser(r, map[string]any{
@@ -285,11 +289,12 @@ func Log(cfg Config, tmpl *template.Template) http.HandlerFunc {
ref, _ := splitRefPath(git, r.PathValue("refpath"))
commits, err := git.Log(ref, 50)
if err != nil {
- renderError(w, tmpl, http.StatusInternalServerError, err.Error())
+ renderError(w, r, tmpl, http.StatusInternalServerError, err.Error())
return
}
data := map[string]any{
"User": User(r),
+ "CSRF": CSRF(r),
"Repo": git.Repo(),
"IsPrivate": git.IsPrivate(),
"Ref": ref,
@@ -313,7 +318,7 @@ func Diff(cfg Config, tmpl *template.Template) http.HandlerFunc {
ref := r.PathValue("hash")
commit, err := git.Diff(ref)
if err != nil || len(commit) == 0 {
- renderError(w, tmpl, http.StatusNotFound, "commit not found")
+ renderError(w, r, tmpl, http.StatusNotFound, "commit not found")
return
}
if err := tmpl.ExecuteTemplate(w, "repo_commit.html", withUser(r, map[string]any{
@@ -339,7 +344,7 @@ func NewRepoGet(tmpl *template.Template) http.HandlerFunc {
http.Redirect(w, r, "/login", http.StatusSeeOther)
return
}
- tmpl.ExecuteTemplate(w, "repo_new.html", map[string]any{"User": User(r)})
+ tmpl.ExecuteTemplate(w, "repo_new.html", map[string]any{"User": User(r), "CSRF": CSRF(r)})
}
}
@@ -356,7 +361,7 @@ func NewRepoPost(cfg Config, tmpl *template.Template) http.HandlerFunc {
if importURL != "" {
importedName, err := ImportRepo(cfg, importURL, desc)
if err != nil {
- renderError(w, tmpl, http.StatusBadRequest, "failed to import: "+err.Error())
+ renderError(w, r, tmpl, http.StatusBadRequest, "failed to import: "+err.Error())
return
}
http.Redirect(w, r, "/"+importedName, http.StatusSeeOther)
@@ -364,11 +369,11 @@ func NewRepoPost(cfg Config, tmpl *template.Template) http.HandlerFunc {
}
if name == "" {
- renderError(w, tmpl, http.StatusBadRequest, "repository name is required")
+ renderError(w, r, tmpl, http.StatusBadRequest, "repository name is required")
return
}
if err := InitRepo(cfg, name, desc); err != nil {
- renderError(w, tmpl, http.StatusBadRequest, "failed to create repository: "+err.Error())
+ renderError(w, r, tmpl, http.StatusBadRequest, "failed to create repository: "+err.Error())
return
}
http.Redirect(w, r, "/"+name, http.StatusSeeOther)
@@ -416,6 +421,7 @@ func SettingsGet(cfg Config, tmpl *template.Template) http.HandlerFunc {
"ProtectedBranches": strings.Join(meta.ProtectedBranches, "\n"),
"ActiveTab": "settings",
"User": User(r),
+ "CSRF": CSRF(r),
})
}
}
@@ -460,7 +466,7 @@ func SettingsPost(cfg Config, tmpl *template.Template) http.HandlerFunc {
}
if err := git.SaveMeta(meta); err != nil {
- renderError(w, tmpl, http.StatusInternalServerError, "failed to save settings: "+err.Error())
+ renderError(w, r, tmpl, http.StatusInternalServerError, "failed to save settings: "+err.Error())
return
}
// Re-install hook in case protected branches changed.