appview/middleware: 404 page on invalid issue/PR id #734

merged
opened by boltless.me targeting master from push-pxkksnmwqzwo
Changed files
+23 -13
appview
db
middleware
+17
appview/db/issues.go
···
return issues, nil
}
+
func GetIssue(e Execer, repoAt syntax.ATURI, issueId int) (*models.Issue, error) {
+
issues, err := GetIssuesPaginated(
+
e,
+
pagination.Page{},
+
FilterEq("repo_at", repoAt),
+
FilterEq("issue_id", issueId),
+
)
+
if err != nil {
+
return nil, err
+
}
+
if len(issues) != 1 {
+
return nil, sql.ErrNoRows
+
}
+
+
return &issues[0], nil
+
}
+
func GetIssues(e Execer, filters ...filter) ([]models.Issue, error) {
return GetIssuesPaginated(e, pagination.Page{}, filters...)
}
+6 -13
appview/middleware/middleware.go
···
prId := chi.URLParam(r, "pull")
prIdInt, err := strconv.Atoi(prId)
if err != nil {
-
http.Error(w, "bad pr id", http.StatusBadRequest)
log.Println("failed to parse pr id", err)
+
mw.pages.Error404(w)
return
}
pr, err := db.GetPull(mw.db, f.RepoAt(), prIdInt)
if err != nil {
log.Println("failed to get pull and comments", err)
+
mw.pages.Error404(w)
return
}
···
issueId, err := strconv.Atoi(issueIdStr)
if err != nil {
log.Println("failed to fully resolve issue ID", err)
-
mw.pages.ErrorKnot404(w)
+
mw.pages.Error404(w)
return
}
-
issues, err := db.GetIssues(
-
mw.db,
-
db.FilterEq("repo_at", f.RepoAt()),
-
db.FilterEq("issue_id", issueId),
-
)
+
issue, err := db.GetIssue(mw.db, f.RepoAt(), issueId)
if err != nil {
log.Println("failed to get issues", "err", err)
+
mw.pages.Error404(w)
return
}
-
if len(issues) != 1 {
-
log.Println("got incorrect number of issues", "len(issuse)", len(issues))
-
return
-
}
-
issue := issues[0]
-
ctx := context.WithValue(r.Context(), "issue", &issue)
+
ctx := context.WithValue(r.Context(), "issue", issue)
next.ServeHTTP(w, r.WithContext(ctx))
})
}