From 1a5f1bc002a388fff50cf1d50c08b52f0b186bcd Mon Sep 17 00:00:00 2001 From: Anirudh Oppiliappan Date: Sat, 23 Aug 2025 13:01:13 +0300 Subject: [PATCH] appview: show error pages Signed-off-by: Anirudh Oppiliappan --- appview/middleware/middleware.go | 4 ++-- appview/pages/pages.go | 4 ++++ appview/pages/templates/errors/knot404.html | 9 +++++++++ appview/repo/repo.go | 9 +++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 appview/pages/templates/errors/knot404.html diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index 94b16969..7a32032c 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -234,7 +234,7 @@ func (mw Middleware) ResolvePull() middlewareFunc { f, err := mw.repoResolver.Resolve(r) if err != nil { log.Println("failed to fully resolve repo", err) - http.Error(w, "invalid repo url", http.StatusNotFound) + mw.pages.ErrorKnot404(w) return } @@ -283,7 +283,7 @@ func (mw Middleware) GoImport() middlewareFunc { f, err := mw.repoResolver.Resolve(r) if err != nil { log.Println("failed to fully resolve repo", err) - http.Error(w, "invalid repo url", http.StatusNotFound) + mw.pages.ErrorKnot404(w) return } diff --git a/appview/pages/pages.go b/appview/pages/pages.go index d0c4d504..97ea6030 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -1272,6 +1272,10 @@ func (p *Pages) Error404(w io.Writer) error { return p.execute("errors/404", w, nil) } +func (p *Pages) ErrorKnot404(w io.Writer) error { + return p.execute("errors/knot404", w, nil) +} + func (p *Pages) Error503(w io.Writer) error { return p.execute("errors/503", w, nil) } diff --git a/appview/pages/templates/errors/knot404.html b/appview/pages/templates/errors/knot404.html new file mode 100644 index 00000000..dcda54b6 --- /dev/null +++ b/appview/pages/templates/errors/knot404.html @@ -0,0 +1,9 @@ +{{ define "title" }}404 · tangled{{ end }} + +{{ define "content" }} +

404 — repository not found!

+

+ The repository you were looking for could not be found. + The knot serving the repository may be unavailable. +

+{{ end }} diff --git a/appview/repo/repo.go b/appview/repo/repo.go index b4a9aa50..48e33eb8 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -125,12 +125,14 @@ func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) { repolog, err := us.Log(f.OwnerDid(), f.Name, ref, page) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } tagResult, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -146,6 +148,7 @@ func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) { branchResult, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -312,6 +315,7 @@ func (rp *Repo) RepoCommit(w http.ResponseWriter, r *http.Request) { resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/commit/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref)) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -382,6 +386,7 @@ func (rp *Repo) RepoTree(w http.ResponseWriter, r *http.Request) { resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/tree/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref, treePath)) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -451,6 +456,7 @@ func (rp *Repo) RepoTags(w http.ResponseWriter, r *http.Request) { result, err := us.Tags(f.OwnerDid(), f.Name) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -508,6 +514,7 @@ func (rp *Repo) RepoBranches(w http.ResponseWriter, r *http.Request) { result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -537,6 +544,7 @@ func (rp *Repo) RepoBlob(w http.ResponseWriter, r *http.Request) { } resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/blob/%s/%s", protocol, f.Knot, f.OwnerDid(), f.Repo.Name, ref, filePath)) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } @@ -1260,6 +1268,7 @@ func (rp *Repo) generalSettings(w http.ResponseWriter, r *http.Request) { result, err := us.Branches(f.OwnerDid(), f.Name) if err != nil { + rp.pages.Error503(w) log.Println("failed to reach knotserver", err) return } -- 2.54.0