mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 10:12:42 +01:00
[GITEA] Fix /issues/search endpoint
- The endpoint was moved from being an API endpoint to an web endpoint with JSON result. However the API context isn't the same as the web context, for example the `ctx.Error` only takes in the first two arguments into consideration and doesn't do logging, which is not the same behavior as the API context where there's three arguments and does do logging and only reveal the function + error if the user is admin. - Remove any details in the error message and do the logging seperatly, this is somewhat consistent with how other API endpoints behave. - Ref: https://codeberg.org/forgejo/forgejo/issues/1998 (cherry picked from commitfe71e32ace
) (cherry picked from commitc89e0735fa
) (cherry picked from commit4c04dcfc59
) (cherry picked from commit66eae1041c
)
This commit is contained in:
parent
42c55e494e
commit
7b70fa9392
1 changed files with 18 additions and 10 deletions
|
@ -2501,7 +2501,8 @@ func UpdatePullReviewRequest(ctx *context.Context) {
|
||||||
func SearchIssues(ctx *context.Context) {
|
func SearchIssues(ctx *context.Context) {
|
||||||
before, since, err := context.GetQueryBeforeSince(ctx.Base)
|
before, since, err := context.GetQueryBeforeSince(ctx.Base)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusUnprocessableEntity, err.Error())
|
log.Error("GetQueryBeforeSince: %v", err)
|
||||||
|
ctx.Error(http.StatusUnprocessableEntity, "invalid before or since")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2538,10 +2539,11 @@ func SearchIssues(ctx *context.Context) {
|
||||||
if ctx.FormString("owner") != "" {
|
if ctx.FormString("owner") != "" {
|
||||||
owner, err := user_model.GetUserByName(ctx, ctx.FormString("owner"))
|
owner, err := user_model.GetUserByName(ctx, ctx.FormString("owner"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("GetUserByName: %v", err)
|
||||||
if user_model.IsErrUserNotExist(err) {
|
if user_model.IsErrUserNotExist(err) {
|
||||||
ctx.Error(http.StatusBadRequest, "Owner not found", err.Error())
|
ctx.Error(http.StatusBadRequest, "Owner not found", err.Error())
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserByName", err.Error())
|
ctx.Error(http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -2552,15 +2554,16 @@ func SearchIssues(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
if ctx.FormString("team") != "" {
|
if ctx.FormString("team") != "" {
|
||||||
if ctx.FormString("owner") == "" {
|
if ctx.FormString("owner") == "" {
|
||||||
ctx.Error(http.StatusBadRequest, "", "Owner organisation is required for filtering on team")
|
ctx.Error(http.StatusBadRequest, "Owner organisation is required for filtering on team")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
team, err := organization.GetTeam(ctx, opts.OwnerID, ctx.FormString("team"))
|
team, err := organization.GetTeam(ctx, opts.OwnerID, ctx.FormString("team"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("GetTeam: %v", err)
|
||||||
if organization.IsErrTeamNotExist(err) {
|
if organization.IsErrTeamNotExist(err) {
|
||||||
ctx.Error(http.StatusBadRequest, "Team not found", err.Error())
|
ctx.Error(http.StatusBadRequest)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetUserByName", err.Error())
|
ctx.Error(http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -2573,7 +2576,8 @@ func SearchIssues(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
repoIDs, _, err = repo_model.SearchRepositoryIDs(ctx, opts)
|
repoIDs, _, err = repo_model.SearchRepositoryIDs(ctx, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "SearchRepositoryIDs", err.Error())
|
log.Error("SearchRepositoryIDs: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(repoIDs) == 0 {
|
if len(repoIDs) == 0 {
|
||||||
|
@ -2607,7 +2611,8 @@ func SearchIssues(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
includedAnyLabels, err = issues_model.GetLabelIDsByNames(ctx, includedLabelNames)
|
includedAnyLabels, err = issues_model.GetLabelIDsByNames(ctx, includedLabelNames)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetLabelIDsByNames", err.Error())
|
log.Error("GetLabelIDsByNames: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2621,7 +2626,8 @@ func SearchIssues(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
includedMilestones, err = issues_model.GetMilestoneIDsByNames(ctx, includedMilestoneNames)
|
includedMilestones, err = issues_model.GetMilestoneIDsByNames(ctx, includedMilestoneNames)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetMilestoneIDsByNames", err.Error())
|
log.Error("GetMilestoneIDsByNames: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2688,12 +2694,14 @@ func SearchIssues(ctx *context.Context) {
|
||||||
|
|
||||||
ids, total, err := issue_indexer.SearchIssues(ctx, searchOpt)
|
ids, total, err := issue_indexer.SearchIssues(ctx, searchOpt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "SearchIssues", err.Error())
|
log.Error("SearchIssues: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
issues, err := issues_model.GetIssuesByIDs(ctx, ids, true)
|
issues, err := issues_model.GetIssuesByIDs(ctx, ids, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "FindIssuesByIDs", err.Error())
|
log.Error("GetIssuesByIDs: %v", err)
|
||||||
|
ctx.Error(http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue