Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use ErrInvalidArgument in packages #22268

Merged
merged 6 commits into from
Dec 31, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions modules/packages/composer/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ package composer

import (
"archive/zip"
"errors"
"io"
"regexp"
"strings"

"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"github.com/hashicorp/go-version"
Expand All @@ -20,12 +20,9 @@ import (
const TypeProperty = "composer.type"

var (
// ErrMissingComposerFile indicates a missing composer.json file
ErrMissingComposerFile = errors.New("composer.json file is missing")
// ErrInvalidName indicates an invalid package name
ErrInvalidName = errors.New("package name is invalid")
// ErrInvalidVersion indicates an invalid package version
ErrInvalidVersion = errors.New("package version is invalid")
ErrMissingComposerFile = util.SilentWrap{Message: "composer.json file is missing", Err: util.ErrInvalidArgument}
ErrInvalidName = util.SilentWrap{Message: "package name is invalid", Err: util.ErrInvalidArgument}
ErrInvalidVersion = util.SilentWrap{Message: "package version is invalid", Err: util.ErrInvalidArgument}
)

// Package represents a Composer package
Expand Down
14 changes: 5 additions & 9 deletions modules/packages/helm/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,21 @@ package helm
import (
"archive/tar"
"compress/gzip"
"errors"
"io"
"strings"

"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"github.com/hashicorp/go-version"
"gopkg.in/yaml.v3"
)

var (
// ErrMissingChartFile indicates a missing Chart.yaml file
ErrMissingChartFile = errors.New("Chart.yaml file is missing")
// ErrInvalidName indicates an invalid package name
ErrInvalidName = errors.New("package name is invalid")
// ErrInvalidVersion indicates an invalid package version
ErrInvalidVersion = errors.New("package version is invalid")
// ErrInvalidChart indicates an invalid chart
ErrInvalidChart = errors.New("chart is invalid")
ErrMissingChartFile = util.SilentWrap{Message: "Chart.yaml file is missing", Err: util.ErrInvalidArgument}
ErrInvalidName = util.SilentWrap{Message: "package name is invalid", Err: util.ErrInvalidArgument}
ErrInvalidVersion = util.SilentWrap{Message: "package version is invalid", Err: util.ErrInvalidArgument}
ErrInvalidChart = util.SilentWrap{Message: "chart is invalid", Err: util.ErrInvalidArgument}
)

// Metadata for a Chart file. This models the structure of a Chart.yaml file.
Expand Down
17 changes: 6 additions & 11 deletions modules/packages/npm/creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,25 @@ import (
"crypto/sha1"
"crypto/sha512"
"encoding/base64"
"errors"
"fmt"
"io"
"regexp"
"strings"
"time"

"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"github.com/hashicorp/go-version"
)

var (
// ErrInvalidPackage indicates an invalid package
ErrInvalidPackage = errors.New("The package is invalid")
// ErrInvalidPackageName indicates an invalid name
ErrInvalidPackageName = errors.New("The package name is invalid")
// ErrInvalidPackageVersion indicates an invalid version
ErrInvalidPackageVersion = errors.New("The package version is invalid")
// ErrInvalidAttachment indicates a invalid attachment
ErrInvalidAttachment = errors.New("The package attachment is invalid")
// ErrInvalidIntegrity indicates an integrity validation error
ErrInvalidIntegrity = errors.New("Failed to validate integrity")
ErrInvalidPackage = util.SilentWrap{Message: "package is invalid", Err: util.ErrInvalidArgument}
ErrInvalidPackageName = util.SilentWrap{Message: "package name is invalid", Err: util.ErrInvalidArgument}
ErrInvalidPackageVersion = util.SilentWrap{Message: "package version is invalid", Err: util.ErrInvalidArgument}
ErrInvalidAttachment = util.SilentWrap{Message: "package attachment is invalid", Err: util.ErrInvalidArgument}
ErrInvalidIntegrity = util.SilentWrap{Message: "failed to validate integrity", Err: util.ErrInvalidArgument}
)

var nameMatch = regexp.MustCompile(`\A((@[^\s\/~'!\(\)\*]+?)[\/])?([^_.][^\s\/~'!\(\)\*]+)\z`)
Expand Down
14 changes: 5 additions & 9 deletions modules/packages/nuget/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,23 @@ import (
"archive/zip"
"bytes"
"encoding/xml"
"errors"
"fmt"
"io"
"path/filepath"
"regexp"
"strings"

"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"github.com/hashicorp/go-version"
)

var (
// ErrMissingNuspecFile indicates a missing Nuspec file
ErrMissingNuspecFile = errors.New("Nuspec file is missing")
// ErrNuspecFileTooLarge indicates a Nuspec file which is too large
ErrNuspecFileTooLarge = errors.New("Nuspec file is too large")
// ErrNuspecInvalidID indicates an invalid id in the Nuspec file
ErrNuspecInvalidID = errors.New("Nuspec file contains an invalid id")
// ErrNuspecInvalidVersion indicates an invalid version in the Nuspec file
ErrNuspecInvalidVersion = errors.New("Nuspec file contains an invalid version")
ErrMissingNuspecFile = util.SilentWrap{Message: "Nuspec file is missing", Err: util.ErrInvalidArgument}
ErrNuspecFileTooLarge = util.SilentWrap{Message: "Nuspec file is too large", Err: util.ErrInvalidArgument}
ErrNuspecInvalidID = util.SilentWrap{Message: "Nuspec file contains an invalid id", Err: util.ErrInvalidArgument}
ErrNuspecInvalidVersion = util.SilentWrap{Message: "Nuspec file contains an invalid version", Err: util.ErrInvalidArgument}
)

// PackageType specifies the package type the metadata describes
Expand Down
10 changes: 5 additions & 5 deletions modules/packages/nuget/symbol_extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ import (
"archive/zip"
"bytes"
"encoding/binary"
"errors"
"fmt"
"io"
"path"
"path/filepath"
"strings"

"code.gitea.io/gitea/modules/packages"
"code.gitea.io/gitea/modules/util"
)

var (
ErrMissingPdbFiles = errors.New("Package does not contain PDB files")
ErrInvalidFiles = errors.New("Package contains invalid files")
ErrInvalidPdbMagicNumber = errors.New("Invalid Portable PDB magic number")
ErrMissingPdbStream = errors.New("Missing PDB stream")
ErrMissingPdbFiles = util.SilentWrap{Message: "package does not contain PDB files", Err: util.ErrInvalidArgument}
ErrInvalidFiles = util.SilentWrap{Message: "package contains invalid files", Err: util.ErrInvalidArgument}
ErrInvalidPdbMagicNumber = util.SilentWrap{Message: "invalid Portable PDB magic number", Err: util.ErrInvalidArgument}
ErrMissingPdbStream = util.SilentWrap{Message: "missing PDB stream", Err: util.ErrInvalidArgument}
)

type PortablePdb struct {
Expand Down
10 changes: 5 additions & 5 deletions modules/packages/pub/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ package pub
import (
"archive/tar"
"compress/gzip"
"errors"
"io"
"regexp"
"strings"

"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"github.com/hashicorp/go-version"
"gopkg.in/yaml.v3"
)

var (
ErrMissingPubspecFile = errors.New("Pubspec file is missing")
ErrPubspecFileTooLarge = errors.New("Pubspec file is too large")
ErrInvalidName = errors.New("Package name is invalid")
ErrInvalidVersion = errors.New("Package version is invalid")
ErrMissingPubspecFile = util.SilentWrap{Message: "Pubspec file is missing", Err: util.ErrInvalidArgument}
ErrPubspecFileTooLarge = util.SilentWrap{Message: "Pubspec file is too large", Err: util.ErrInvalidArgument}
ErrInvalidName = util.SilentWrap{Message: "Package name is invalid", Err: util.ErrInvalidArgument}
ErrInvalidVersion = util.SilentWrap{Message: "Package version is invalid", Err: util.ErrInvalidArgument}
)

var namePattern = regexp.MustCompile(`\A[a-zA-Z_][a-zA-Z0-9_]*\z`)
Expand Down
9 changes: 4 additions & 5 deletions modules/packages/rubygems/marshal.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ package rubygems
import (
"bufio"
"bytes"
"errors"
"io"
"reflect"

"code.gitea.io/gitea/modules/util"
)

const (
Expand All @@ -30,10 +31,8 @@ const (
)

var (
// ErrUnsupportedType indicates an unsupported type
ErrUnsupportedType = errors.New("Type is unsupported")
// ErrInvalidIntRange indicates an invalid number range
ErrInvalidIntRange = errors.New("Number is not in valid range")
ErrUnsupportedType = util.SilentWrap{Message: "type is unsupported", Err: util.ErrInvalidArgument}
ErrInvalidIntRange = util.SilentWrap{Message: "number is not in valid range", Err: util.ErrInvalidArgument}
)

// RubyUserMarshal is a Ruby object that has a marshal_load function.
Expand Down
11 changes: 4 additions & 7 deletions modules/packages/rubygems/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,20 @@ package rubygems
import (
"archive/tar"
"compress/gzip"
"errors"
"io"
"regexp"
"strings"

"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/validation"

"gopkg.in/yaml.v3"
)

var (
// ErrMissingMetadataFile indicates a missing metadata.gz file
ErrMissingMetadataFile = errors.New("Metadata file is missing")
// ErrInvalidName indicates an invalid id in the metadata.gz file
ErrInvalidName = errors.New("Metadata file contains an invalid name")
// ErrInvalidVersion indicates an invalid version in the metadata.gz file
ErrInvalidVersion = errors.New("Metadata file contains an invalid version")
ErrMissingMetadataFile = util.SilentWrap{Message: "metadata.gz file is missing", Err: util.ErrInvalidArgument}
ErrInvalidName = util.SilentWrap{Message: "package name is invalid", Err: util.ErrInvalidArgument}
ErrInvalidVersion = util.SilentWrap{Message: "package version is invalid", Err: util.ErrInvalidArgument}
)

var versionMatcher = regexp.MustCompile(`\A[0-9]+(?:\.[0-9a-zA-Z]+)*(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?\z`)
Expand Down
7 changes: 6 additions & 1 deletion routers/api/packages/composer/composer.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package composer

import (
"errors"
"fmt"
"io"
"net/http"
Expand Down Expand Up @@ -200,7 +201,11 @@ func UploadPackage(ctx *context.Context) {

cp, err := composer_module.ParsePackage(buf, buf.Size())
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
return
}

Expand Down
7 changes: 6 additions & 1 deletion routers/api/packages/helm/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package helm

import (
"errors"
"fmt"
"io"
"net/http"
Expand Down Expand Up @@ -163,7 +164,11 @@ func UploadPackage(ctx *context.Context) {

metadata, err := helm_module.ParseChartArchive(buf)
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
return
}

Expand Down
6 changes: 5 additions & 1 deletion routers/api/packages/npm/npm.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,11 @@ func DownloadPackageFileByName(ctx *context.Context) {
func UploadPackage(ctx *context.Context) {
npmPackage, err := npm_module.ParsePackage(ctx.Req.Body)
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
return
}

Expand Down
8 changes: 6 additions & 2 deletions routers/api/packages/nuget/nuget.go
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,11 @@ func UploadSymbolPackage(ctx *context.Context) {

pdbs, err := nuget_module.ExtractPortablePdb(buf, buf.Size())
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
return
}
defer pdbs.Close()
Expand Down Expand Up @@ -507,7 +511,7 @@ func processUploadedFile(ctx *context.Context, expectedType nuget_module.Package

np, err := nuget_module.ParsePackageMetaData(buf, buf.Size())
if err != nil {
if err == nuget_module.ErrMissingNuspecFile || err == nuget_module.ErrNuspecFileTooLarge || err == nuget_module.ErrNuspecInvalidID || err == nuget_module.ErrNuspecInvalidVersion {
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
Expand Down
8 changes: 7 additions & 1 deletion routers/api/packages/pub/pub.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package pub

import (
"errors"
"fmt"
"io"
"net/http"
Expand All @@ -19,6 +20,7 @@ import (
packages_module "code.gitea.io/gitea/modules/packages"
pub_module "code.gitea.io/gitea/modules/packages/pub"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/api/packages/helper"
packages_service "code.gitea.io/gitea/services/packages"
)
Expand Down Expand Up @@ -173,7 +175,11 @@ func UploadPackageFile(ctx *context.Context) {

pck, err := pub_module.ParsePackage(buf)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
return
}

Expand Down
7 changes: 6 additions & 1 deletion routers/api/packages/rubygems/rubygems.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package rubygems
import (
"compress/gzip"
"compress/zlib"
"errors"
"fmt"
"io"
"net/http"
Expand Down Expand Up @@ -217,7 +218,11 @@ func UploadPackageFile(ctx *context.Context) {

rp, err := rubygems_module.ParsePackageMetaData(buf)
if err != nil {
apiError(ctx, http.StatusInternalServerError, err)
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
} else {
apiError(ctx, http.StatusInternalServerError, err)
}
6543 marked this conversation as resolved.
Show resolved Hide resolved
return
}
if _, err := buf.Seek(0, io.SeekStart); err != nil {
Expand Down