refactor: share package registry error status classification (#39133)

Signed-off-by: silverwind <me@silverwind.io>
This commit is contained in:
silverwind
2026-09-03 20:43:30 +02:00
committed by GitHub
parent 0fff5f481e
commit c285440e03
11 changed files with 22 additions and 62 deletions

View File

@@ -178,11 +178,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -170,11 +170,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -498,11 +498,7 @@ func downloadFile(ctx *context.Context, fileFilter container.Set[string], fileKe
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -68,11 +68,7 @@ func GetRepositoryFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -43,11 +43,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}
@@ -180,11 +176,7 @@ func DeletePackageFile(ctx *context.Context) {
return pv, pf, nil
}()
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -4,6 +4,7 @@
package helper
import (
"errors"
"fmt"
"io"
"net/http"
@@ -12,9 +13,18 @@ import (
packages_model "gitea.dev/models/packages"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
"gitea.dev/modules/util"
"gitea.dev/services/context"
)
// PackageErrorStatus returns the status to report for a package lookup error
func PackageErrorStatus(err error) int {
if errors.Is(err, util.ErrNotExist) {
return http.StatusNotFound
}
return http.StatusInternalServerError
}
// ProcessErrorForUser logs the error and returns a user-error message for the end user.
// If the status is http.StatusInternalServerError, the message is stripped for non-admin users in production.
func ProcessErrorForUser(ctx *context.Context, status int, errObj any) string {

View File

@@ -99,11 +99,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -414,11 +414,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}
@@ -667,11 +663,7 @@ func DownloadSymbolFile(ctx *context.Context) {
s, u, pf, err := packages_service.OpenFileForDownload(ctx, pfs[0], ctx.Req.Method)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -5,7 +5,6 @@ package pypi
import (
"encoding/hex"
"errors"
"io"
"net/http"
"regexp"
@@ -95,11 +94,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -70,11 +70,7 @@ func streamState(ctx *context.Context, name, serial string) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}

View File

@@ -4,7 +4,6 @@
package vagrant
import (
"errors"
"fmt"
"io"
"net/http"
@@ -231,11 +230,7 @@ func DownloadPackageFile(ctx *context.Context) {
ctx.Req.Method,
)
if err != nil {
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
apiError(ctx, http.StatusNotFound, err)
return
}
apiError(ctx, http.StatusInternalServerError, err)
apiError(ctx, helper.PackageErrorStatus(err), err)
return
}