mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-18 21:42:56 +02:00
Fix error logs and improve some comments/messages (#35105)
This commit is contained in:
parent
891a827158
commit
de1114b4e8
@ -59,8 +59,12 @@ type Object interface {
|
|||||||
// ObjectStorage represents an object storage to handle a bucket and files
|
// ObjectStorage represents an object storage to handle a bucket and files
|
||||||
type ObjectStorage interface {
|
type ObjectStorage interface {
|
||||||
Open(path string) (Object, error)
|
Open(path string) (Object, error)
|
||||||
// Save store a object, if size is unknown set -1
|
|
||||||
|
// Save store an object, if size is unknown set -1
|
||||||
|
// NOTICE: Some storage SDK will close the Reader after saving if it is also a Closer,
|
||||||
|
// DO NOT use the reader anymore after Save, or wrap it to a non-Closer reader.
|
||||||
Save(path string, r io.Reader, size int64) (int64, error)
|
Save(path string, r io.Reader, size int64) (int64, error)
|
||||||
|
|
||||||
Stat(path string) (os.FileInfo, error)
|
Stat(path string) (os.FileInfo, error)
|
||||||
Delete(path string) error
|
Delete(path string) error
|
||||||
URL(path, name, method string, reqParams url.Values) (*url.URL, error)
|
URL(path, name, method string, reqParams url.Values) (*url.URL, error)
|
||||||
|
@ -99,7 +99,7 @@ func verifyAuth(r *web.Router, authMethods []auth.Method) {
|
|||||||
ctx.Doer, err = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
|
ctx.Doer, err = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Failed to verify user: %v", err)
|
log.Error("Failed to verify user: %v", err)
|
||||||
ctx.HTTPError(http.StatusUnauthorized, "authGroup.Verify")
|
ctx.HTTPError(http.StatusUnauthorized, "Failed to authenticate user")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.IsSigned = ctx.Doer != nil
|
ctx.IsSigned = ctx.Doer != nil
|
||||||
|
@ -34,7 +34,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
|
|||||||
|
|
||||||
u, err := user_model.GetUserByID(req.Context(), packageMeta.UserID)
|
u, err := user_model.GetUserByID(req.Context(), packageMeta.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("GetUserByID: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if packageMeta.Scope != "" {
|
if packageMeta.Scope != "" {
|
||||||
|
@ -55,9 +55,7 @@ func jsonResponse(ctx *context.Context, status int, obj any) {
|
|||||||
// https://github.com/conan-io/conan/issues/6613
|
// https://github.com/conan-io/conan/issues/6613
|
||||||
ctx.Resp.Header().Set("Content-Type", "application/json")
|
ctx.Resp.Header().Set("Content-Type", "application/json")
|
||||||
ctx.Status(status)
|
ctx.Status(status)
|
||||||
if err := json.NewEncoder(ctx.Resp).Encode(obj); err != nil {
|
_ = json.NewEncoder(ctx.Resp).Encode(obj)
|
||||||
log.Error("JSON encode: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func apiError(ctx *context.Context, status int, obj any) {
|
func apiError(ctx *context.Context, status int, obj any) {
|
||||||
@ -392,7 +390,6 @@ func uploadFile(ctx *context.Context, fileFilter container.Set[string], fileKey
|
|||||||
if isConanfileFile {
|
if isConanfileFile {
|
||||||
metadata, err := conan_module.ParseConanfile(buf)
|
metadata, err := conan_module.ParseConanfile(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Error parsing package metadata: %v", err)
|
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -418,7 +415,6 @@ func uploadFile(ctx *context.Context, fileFilter container.Set[string], fileKey
|
|||||||
} else {
|
} else {
|
||||||
info, err := conan_module.ParseConaninfo(buf)
|
info, err := conan_module.ParseConaninfo(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Error parsing conan info: %v", err)
|
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
conda_model "code.gitea.io/gitea/models/packages/conda"
|
conda_model "code.gitea.io/gitea/models/packages/conda"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
packages_module "code.gitea.io/gitea/modules/packages"
|
packages_module "code.gitea.io/gitea/modules/packages"
|
||||||
conda_module "code.gitea.io/gitea/modules/packages/conda"
|
conda_module "code.gitea.io/gitea/modules/packages/conda"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
@ -184,10 +183,7 @@ func EnumeratePackages(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resp.WriteHeader(http.StatusOK)
|
resp.WriteHeader(http.StatusOK)
|
||||||
|
_ = json.NewEncoder(w).Encode(repoData)
|
||||||
if err := json.NewEncoder(w).Encode(repoData); err != nil {
|
|
||||||
log.Error("JSON encode: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func UploadPackageFile(ctx *context.Context) {
|
func UploadPackageFile(ctx *context.Context) {
|
||||||
|
@ -35,7 +35,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
|
|||||||
|
|
||||||
u, err := user_model.GetPossibleUserByID(req.Context(), packageMeta.UserID)
|
u, err := user_model.GetPossibleUserByID(req.Context(), packageMeta.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("GetPossibleUserByID: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,9 +448,9 @@ func PutBlobsUpload(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// There was a strange bug: the "Close" fails with error "close .../tmp/package-upload/....: file already closed"
|
// Some SDK (e.g.: minio) will close the Reader if it is also a Closer after "uploading".
|
||||||
// AFAIK there should be no other "Close" call to the uploader between NewBlobUploader and this line.
|
// And we don't need to wrap the reader to anything else because the SDK will benefit from other interfaces like Seeker.
|
||||||
// At least it's safe to call Close twice, so ignore the error.
|
// It's safe to call Close twice, so ignore the error.
|
||||||
_ = uploader.Close()
|
_ = uploader.Close()
|
||||||
|
|
||||||
if err := container_service.RemoveBlobUploadByID(ctx, uploader.ID); err != nil {
|
if err := container_service.RemoveBlobUploadByID(ctx, uploader.ID); err != nil {
|
||||||
@ -733,9 +733,7 @@ func serveBlob(ctx *context.Context, pfd *packages_model.PackageFileDescriptor)
|
|||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
setResponseHeaders(ctx.Resp, headers)
|
setResponseHeaders(ctx.Resp, headers)
|
||||||
if _, err := io.Copy(ctx.Resp, s); err != nil {
|
_, _ = io.Copy(ctx.Resp, s)
|
||||||
log.Error("Error whilst copying content to response: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#content-discovery
|
// https://github.com/opencontainers/distribution-spec/blob/main/spec.md#content-discovery
|
||||||
|
@ -11,7 +11,6 @@ import (
|
|||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
packages_module "code.gitea.io/gitea/modules/packages"
|
packages_module "code.gitea.io/gitea/modules/packages"
|
||||||
"code.gitea.io/gitea/routers/api/packages/helper"
|
"code.gitea.io/gitea/routers/api/packages/helper"
|
||||||
"code.gitea.io/gitea/services/context"
|
"code.gitea.io/gitea/services/context"
|
||||||
@ -101,7 +100,6 @@ func UploadPackage(ctx *context.Context) {
|
|||||||
|
|
||||||
buf, err := packages_module.CreateHashedBufferFromReader(upload)
|
buf, err := packages_module.CreateHashedBufferFromReader(upload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Error creating hashed buffer: %v", err)
|
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import (
|
|||||||
|
|
||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
"code.gitea.io/gitea/modules/optional"
|
"code.gitea.io/gitea/modules/optional"
|
||||||
packages_module "code.gitea.io/gitea/modules/packages"
|
packages_module "code.gitea.io/gitea/modules/packages"
|
||||||
helm_module "code.gitea.io/gitea/modules/packages/helm"
|
helm_module "code.gitea.io/gitea/modules/packages/helm"
|
||||||
@ -86,16 +85,14 @@ func Index(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.Resp.WriteHeader(http.StatusOK)
|
ctx.Resp.WriteHeader(http.StatusOK)
|
||||||
if err := yaml.NewEncoder(ctx.Resp).Encode(&Index{
|
_ = yaml.NewEncoder(ctx.Resp).Encode(&Index{
|
||||||
APIVersion: "v1",
|
APIVersion: "v1",
|
||||||
Entries: entries,
|
Entries: entries,
|
||||||
Generated: time.Now(),
|
Generated: time.Now(),
|
||||||
ServerInfo: &ServerInfo{
|
ServerInfo: &ServerInfo{
|
||||||
ContextPath: setting.AppSubURL + "/api/packages/" + url.PathEscape(ctx.Package.Owner.Name) + "/helm",
|
ContextPath: setting.AppSubURL + "/api/packages/" + url.PathEscape(ctx.Package.Owner.Name) + "/helm",
|
||||||
},
|
},
|
||||||
}); err != nil {
|
})
|
||||||
log.Error("YAML encode failed: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownloadPackageFile serves the content of a package
|
// DownloadPackageFile serves the content of a package
|
||||||
|
@ -26,7 +26,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
|
|||||||
token, err := auth_model.GetAccessTokenBySHA(req.Context(), req.Header.Get("X-NuGet-ApiKey"))
|
token, err := auth_model.GetAccessTokenBySHA(req.Context(), req.Header.Get("X-NuGet-ApiKey"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !(auth_model.IsErrAccessTokenNotExist(err) || auth_model.IsErrAccessTokenEmpty(err)) {
|
if !(auth_model.IsErrAccessTokenNotExist(err) || auth_model.IsErrAccessTokenEmpty(err)) {
|
||||||
log.Error("GetAccessTokenBySHA: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@ -34,7 +33,6 @@ func (a *Auth) Verify(req *http.Request, w http.ResponseWriter, store auth.DataS
|
|||||||
|
|
||||||
u, err := user_model.GetUserByID(req.Context(), token.UID)
|
u, err := user_model.GetUserByID(req.Context(), token.UID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("GetUserByID: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ import (
|
|||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
nuget_model "code.gitea.io/gitea/models/packages/nuget"
|
nuget_model "code.gitea.io/gitea/models/packages/nuget"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
"code.gitea.io/gitea/modules/optional"
|
"code.gitea.io/gitea/modules/optional"
|
||||||
packages_module "code.gitea.io/gitea/modules/packages"
|
packages_module "code.gitea.io/gitea/modules/packages"
|
||||||
nuget_module "code.gitea.io/gitea/modules/packages/nuget"
|
nuget_module "code.gitea.io/gitea/modules/packages/nuget"
|
||||||
@ -38,12 +37,8 @@ func apiError(ctx *context.Context, status int, obj any) {
|
|||||||
func xmlResponse(ctx *context.Context, status int, obj any) { //nolint:unparam // status is always StatusOK
|
func xmlResponse(ctx *context.Context, status int, obj any) { //nolint:unparam // status is always StatusOK
|
||||||
ctx.Resp.Header().Set("Content-Type", "application/atom+xml; charset=utf-8")
|
ctx.Resp.Header().Set("Content-Type", "application/atom+xml; charset=utf-8")
|
||||||
ctx.Resp.WriteHeader(status)
|
ctx.Resp.WriteHeader(status)
|
||||||
if _, err := ctx.Resp.Write([]byte(xml.Header)); err != nil {
|
_, _ = ctx.Resp.Write([]byte(xml.Header))
|
||||||
log.Error("Write failed: %v", err)
|
_ = xml.NewEncoder(ctx.Resp).Encode(obj)
|
||||||
}
|
|
||||||
if err := xml.NewEncoder(ctx.Resp).Encode(obj); err != nil {
|
|
||||||
log.Error("XML encode failed: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedQueryBuilder.cs
|
// https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedQueryBuilder.cs
|
||||||
|
@ -15,7 +15,6 @@ import (
|
|||||||
|
|
||||||
packages_model "code.gitea.io/gitea/models/packages"
|
packages_model "code.gitea.io/gitea/models/packages"
|
||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
packages_module "code.gitea.io/gitea/modules/packages"
|
packages_module "code.gitea.io/gitea/modules/packages"
|
||||||
pub_module "code.gitea.io/gitea/modules/packages/pub"
|
pub_module "code.gitea.io/gitea/modules/packages/pub"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
@ -29,9 +28,7 @@ func jsonResponse(ctx *context.Context, status int, obj any) {
|
|||||||
resp := ctx.Resp
|
resp := ctx.Resp
|
||||||
resp.Header().Set("Content-Type", "application/vnd.pub.v2+json")
|
resp.Header().Set("Content-Type", "application/vnd.pub.v2+json")
|
||||||
resp.WriteHeader(status)
|
resp.WriteHeader(status)
|
||||||
if err := json.NewEncoder(resp).Encode(obj); err != nil {
|
_ = json.NewEncoder(resp).Encode(obj)
|
||||||
log.Error("JSON encode: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func apiError(ctx *context.Context, status int, obj any) {
|
func apiError(ctx *context.Context, status int, obj any) {
|
||||||
|
@ -20,7 +20,7 @@ type SessionStore session.Store
|
|||||||
// Method represents an authentication method (plugin) for HTTP requests.
|
// Method represents an authentication method (plugin) for HTTP requests.
|
||||||
type Method interface {
|
type Method interface {
|
||||||
// Verify tries to verify the authentication data contained in the request.
|
// Verify tries to verify the authentication data contained in the request.
|
||||||
// If verification is successful returns either an existing user object (with id > 0)
|
// If verification succeeds, it returns either an existing user object (with id > 0)
|
||||||
// or a new user object (with id = 0) populated with the information that was found
|
// or a new user object (with id = 0) populated with the information that was found
|
||||||
// in the authentication data (username or email).
|
// in the authentication data (username or email).
|
||||||
// Second argument returns err if verification fails, otherwise
|
// Second argument returns err if verification fails, otherwise
|
||||||
|
@ -83,6 +83,7 @@ func (b *Base) RespHeader() http.Header {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// HTTPError returned an error to web browser
|
// HTTPError returned an error to web browser
|
||||||
|
// FIXME: many calls to this HTTPError are not right: it shouldn't expose err.Error() directly, it doesn't accept more than one content
|
||||||
func (b *Base) HTTPError(status int, contents ...string) {
|
func (b *Base) HTTPError(status int, contents ...string) {
|
||||||
v := http.StatusText(status)
|
v := http.StatusText(status)
|
||||||
if len(contents) > 0 {
|
if len(contents) > 0 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user