Monorepo for Tangled tangled.org

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

Close: #277
Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me b6a0ebf9 0d498da5

verified
Changed files
+23 -13
appview
db
middleware
+17
appview/db/issues.go
··· 246 246 return issues, nil 247 247 } 248 248 249 + func GetIssue(e Execer, repoAt syntax.ATURI, issueId int) (*models.Issue, error) { 250 + issues, err := GetIssuesPaginated( 251 + e, 252 + pagination.Page{}, 253 + FilterEq("repo_at", repoAt), 254 + FilterEq("issue_id", issueId), 255 + ) 256 + if err != nil { 257 + return nil, err 258 + } 259 + if len(issues) != 1 { 260 + return nil, sql.ErrNoRows 261 + } 262 + 263 + return &issues[0], nil 264 + } 265 + 249 266 func GetIssues(e Execer, filters ...filter) ([]models.Issue, error) { 250 267 return GetIssuesPaginated(e, pagination.Page{}, filters...) 251 268 }
+6 -13
appview/middleware/middleware.go
··· 244 244 prId := chi.URLParam(r, "pull") 245 245 prIdInt, err := strconv.Atoi(prId) 246 246 if err != nil { 247 - http.Error(w, "bad pr id", http.StatusBadRequest) 248 247 log.Println("failed to parse pr id", err) 248 + mw.pages.Error404(w) 249 249 return 250 250 } 251 251 252 252 pr, err := db.GetPull(mw.db, f.RepoAt(), prIdInt) 253 253 if err != nil { 254 254 log.Println("failed to get pull and comments", err) 255 + mw.pages.Error404(w) 255 256 return 256 257 } 257 258 ··· 292 293 issueId, err := strconv.Atoi(issueIdStr) 293 294 if err != nil { 294 295 log.Println("failed to fully resolve issue ID", err) 295 - mw.pages.ErrorKnot404(w) 296 + mw.pages.Error404(w) 296 297 return 297 298 } 298 299 299 - issues, err := db.GetIssues( 300 - mw.db, 301 - db.FilterEq("repo_at", f.RepoAt()), 302 - db.FilterEq("issue_id", issueId), 303 - ) 300 + issue, err := db.GetIssue(mw.db, f.RepoAt(), issueId) 304 301 if err != nil { 305 302 log.Println("failed to get issues", "err", err) 306 - return 307 - } 308 - if len(issues) != 1 { 309 - log.Println("got incorrect number of issues", "len(issuse)", len(issues)) 303 + mw.pages.Error404(w) 310 304 return 311 305 } 312 - issue := issues[0] 313 306 314 - ctx := context.WithValue(r.Context(), "issue", &issue) 307 + ctx := context.WithValue(r.Context(), "issue", issue) 315 308 next.ServeHTTP(w, r.WithContext(ctx)) 316 309 }) 317 310 }