Skip to content

Commit 4062cb2

Browse files
committed
fix
1 parent cf60734 commit 4062cb2

File tree

27 files changed

+139
-219
lines changed

27 files changed

+139
-219
lines changed

modules/packages/npm/creator.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ type PackageMetadataVersion struct {
8181
BundleDependencies []string `json:"bundleDependencies,omitempty"`
8282
DevDependencies map[string]string `json:"devDependencies,omitempty"`
8383
PeerDependencies map[string]string `json:"peerDependencies,omitempty"`
84+
PeerDependenciesMeta map[string]any `json:"peerDependenciesMeta,omitempty"`
8485
Bin map[string]string `json:"bin,omitempty"`
8586
OptionalDependencies map[string]string `json:"optionalDependencies,omitempty"`
8687
Readme string `json:"readme,omitempty"`
@@ -222,6 +223,7 @@ func ParsePackage(r io.Reader) (*Package, error) {
222223
BundleDependencies: meta.BundleDependencies,
223224
DevelopmentDependencies: meta.DevDependencies,
224225
PeerDependencies: meta.PeerDependencies,
226+
PeerDependenciesMeta: meta.PeerDependenciesMeta,
225227
OptionalDependencies: meta.OptionalDependencies,
226228
Bin: meta.Bin,
227229
Readme: meta.Readme,

modules/packages/npm/metadata.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type Metadata struct {
1919
BundleDependencies []string `json:"bundleDependencies,omitempty"`
2020
DevelopmentDependencies map[string]string `json:"development_dependencies,omitempty"`
2121
PeerDependencies map[string]string `json:"peer_dependencies,omitempty"`
22+
PeerDependenciesMeta map[string]any `json:"peer_dependencies_meta,omitempty"`
2223
OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"`
2324
Bin map[string]string `json:"bin,omitempty"`
2425
Readme string `json:"readme,omitempty"`

routers/api/packages/alpine/alpine.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func UploadPackageFile(ctx *context.Context) {
114114

115115
pck, err := alpine_module.ParsePackage(buf)
116116
if err != nil {
117-
if errors.Is(err, util.ErrInvalidArgument) || err == io.EOF {
117+
if errors.Is(err, util.ErrInvalidArgument) || errors.Is(err, io.EOF) {
118118
apiError(ctx, http.StatusBadRequest, err)
119119
} else {
120120
apiError(ctx, http.StatusInternalServerError, err)

routers/api/packages/api.go

Lines changed: 17 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -722,126 +722,28 @@ func ContainerRoutes() *web.Router {
722722
r.Get("/tags/list", container.GetTagList)
723723
}, container.VerifyImageName)
724724

725-
var (
726-
blobsUploadsPattern = regexp.MustCompile(`\A(.+)/blobs/uploads/([a-zA-Z0-9-_.=]+)\z`)
727-
blobsPattern = regexp.MustCompile(`\A(.+)/blobs/([^/]+)\z`)
728-
manifestsPattern = regexp.MustCompile(`\A(.+)/manifests/([^/]+)\z`)
729-
)
730-
731-
// Manual mapping of routes because {image} can contain slashes which chi does not support
732-
r.Methods("HEAD,GET,POST,PUT,PATCH,DELETE", "/*", func(ctx *context.Context) {
733-
path := ctx.PathParam("*")
734-
isHead := ctx.Req.Method == "HEAD"
735-
isGet := ctx.Req.Method == "GET"
736-
isPost := ctx.Req.Method == "POST"
737-
isPut := ctx.Req.Method == "PUT"
738-
isPatch := ctx.Req.Method == "PATCH"
739-
isDelete := ctx.Req.Method == "DELETE"
740-
741-
if isPost && strings.HasSuffix(path, "/blobs/uploads") {
742-
reqPackageAccess(perm.AccessModeWrite)(ctx)
743-
if ctx.Written() {
744-
return
745-
}
746-
747-
ctx.SetPathParam("image", path[:len(path)-14])
748-
container.VerifyImageName(ctx)
749-
if ctx.Written() {
750-
return
751-
}
752-
753-
container.InitiateUploadBlob(ctx)
754-
return
755-
}
756-
if isGet && strings.HasSuffix(path, "/tags/list") {
757-
ctx.SetPathParam("image", path[:len(path)-10])
758-
container.VerifyImageName(ctx)
759-
if ctx.Written() {
760-
return
761-
}
762-
763-
container.GetTagList(ctx)
764-
return
765-
}
766-
767-
m := blobsUploadsPattern.FindStringSubmatch(path)
768-
if len(m) == 3 && (isGet || isPut || isPatch || isDelete) {
769-
reqPackageAccess(perm.AccessModeWrite)(ctx)
770-
if ctx.Written() {
771-
return
772-
}
773-
774-
ctx.SetPathParam("image", m[1])
775-
container.VerifyImageName(ctx)
776-
if ctx.Written() {
777-
return
778-
}
779-
780-
ctx.SetPathParam("uuid", m[2])
781-
782-
if isGet {
725+
r.PathGroup("*", func(g *web.RouterPathGroup) {
726+
g.MatchPath("POST", "/<image:*>/blobs/uploads", reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName, container.InitiateUploadBlob)
727+
g.MatchPath("GET", "/<image:*>/tags/list", container.VerifyImageName, container.GetTagList)
728+
g.MatchPath("GET,PATCH,PUT,DELETE", `/<image:*>/blobs/uploads/<uuid:[-.=\w]+>`, reqPackageAccess(perm.AccessModeWrite), container.VerifyImageName, func(ctx *context.Context) {
729+
if ctx.Req.Method == http.MethodGet {
783730
container.GetUploadBlob(ctx)
784-
} else if isPatch {
731+
} else if ctx.Req.Method == http.MethodPatch {
785732
container.UploadBlob(ctx)
786-
} else if isPut {
733+
} else if ctx.Req.Method == http.MethodPut {
787734
container.EndUploadBlob(ctx)
788-
} else {
735+
} else /* DELETE */ {
789736
container.CancelUploadBlob(ctx)
790737
}
791-
return
792-
}
793-
m = blobsPattern.FindStringSubmatch(path)
794-
if len(m) == 3 && (isHead || isGet || isDelete) {
795-
ctx.SetPathParam("image", m[1])
796-
container.VerifyImageName(ctx)
797-
if ctx.Written() {
798-
return
799-
}
800-
801-
ctx.SetPathParam("digest", m[2])
802-
803-
if isHead {
804-
container.HeadBlob(ctx)
805-
} else if isGet {
806-
container.GetBlob(ctx)
807-
} else {
808-
reqPackageAccess(perm.AccessModeWrite)(ctx)
809-
if ctx.Written() {
810-
return
811-
}
812-
container.DeleteBlob(ctx)
813-
}
814-
return
815-
}
816-
m = manifestsPattern.FindStringSubmatch(path)
817-
if len(m) == 3 && (isHead || isGet || isPut || isDelete) {
818-
ctx.SetPathParam("image", m[1])
819-
container.VerifyImageName(ctx)
820-
if ctx.Written() {
821-
return
822-
}
823-
824-
ctx.SetPathParam("reference", m[2])
825-
826-
if isHead {
827-
container.HeadManifest(ctx)
828-
} else if isGet {
829-
container.GetManifest(ctx)
830-
} else {
831-
reqPackageAccess(perm.AccessModeWrite)(ctx)
832-
if ctx.Written() {
833-
return
834-
}
835-
if isPut {
836-
container.UploadManifest(ctx)
837-
} else {
838-
container.DeleteManifest(ctx)
839-
}
840-
}
841-
return
842-
}
843-
844-
ctx.Status(http.StatusNotFound)
738+
})
739+
g.MatchPath("HEAD", `/<image:*>/blobs/<digest>`, container.VerifyImageName, container.HeadBlob)
740+
g.MatchPath("GET", `/<image:*>/blobs/<digest>`, container.VerifyImageName, container.GetBlob)
741+
g.MatchPath("DELETE", `/<image:*>/blobs/<digest>`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.DeleteBlob)
742+
743+
g.MatchPath("HEAD", `/<image:*>/manifests/<reference>`, container.VerifyImageName, container.VerifyImageName)
744+
g.MatchPath("GET", `/<image:*>/manifests/<reference>`, container.VerifyImageName, container.GetManifest)
745+
g.MatchPath("PUT", `/<image:*>/manifests/<reference>`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.UploadManifest)
746+
g.MatchPath("DELETE", `/<image:*>/manifests/<reference>`, container.VerifyImageName, reqPackageAccess(perm.AccessModeWrite), container.DeleteManifest)
845747
})
846748
}, container.ReqContainerAccess, context.UserAssignmentWeb(), context.PackageAssignment(), reqPackageAccess(perm.AccessModeRead))
847749

routers/api/packages/arch/arch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func UploadPackageFile(ctx *context.Context) {
6262

6363
pck, err := arch_module.ParsePackage(buf)
6464
if err != nil {
65-
if errors.Is(err, util.ErrInvalidArgument) || err == io.EOF {
65+
if errors.Is(err, util.ErrInvalidArgument) || errors.Is(err, io.EOF) {
6666
apiError(ctx, http.StatusBadRequest, err)
6767
} else {
6868
apiError(ctx, http.StatusInternalServerError, err)

routers/api/packages/cargo/cargo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func DownloadPackageFile(ctx *context.Context) {
181181
},
182182
)
183183
if err != nil {
184-
if err == packages_model.ErrPackageNotExist || err == packages_model.ErrPackageFileNotExist {
184+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
185185
apiError(ctx, http.StatusNotFound, err)
186186
return
187187
}
@@ -276,7 +276,7 @@ func UnyankPackage(ctx *context.Context) {
276276
func yankPackage(ctx *context.Context, yank bool) {
277277
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeCargo, ctx.PathParam("package"), ctx.PathParam("version"))
278278
if err != nil {
279-
if err == packages_model.ErrPackageNotExist {
279+
if errors.Is(err, packages_model.ErrPackageNotExist) {
280280
apiError(ctx, http.StatusNotFound, err)
281281
return
282282
}

routers/api/packages/chef/chef.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func PackageVersionMetadata(ctx *context.Context) {
216216

217217
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeChef, packageName, packageVersion)
218218
if err != nil {
219-
if err == packages_model.ErrPackageNotExist {
219+
if errors.Is(err, packages_model.ErrPackageNotExist) {
220220
apiError(ctx, http.StatusNotFound, err)
221221
return
222222
}
@@ -327,7 +327,7 @@ func UploadPackage(ctx *context.Context) {
327327
func DownloadPackage(ctx *context.Context) {
328328
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeChef, ctx.PathParam("name"), ctx.PathParam("version"))
329329
if err != nil {
330-
if err == packages_model.ErrPackageNotExist {
330+
if errors.Is(err, packages_model.ErrPackageNotExist) {
331331
apiError(ctx, http.StatusNotFound, err)
332332
return
333333
}
@@ -368,7 +368,7 @@ func DeletePackageVersion(ctx *context.Context) {
368368
},
369369
)
370370
if err != nil {
371-
if err == packages_model.ErrPackageNotExist {
371+
if errors.Is(err, packages_model.ErrPackageNotExist) {
372372
apiError(ctx, http.StatusNotFound, err)
373373
} else {
374374
apiError(ctx, http.StatusInternalServerError, err)

routers/api/packages/composer/composer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func DownloadPackageFile(ctx *context.Context) {
176176
},
177177
)
178178
if err != nil {
179-
if err == packages_model.ErrPackageNotExist || err == packages_model.ErrPackageFileNotExist {
179+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
180180
apiError(ctx, http.StatusNotFound, err)
181181
return
182182
}

routers/api/packages/conan/conan.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package conan
55

66
import (
77
std_ctx "context"
8+
"errors"
89
"fmt"
910
"io"
1011
"net/http"
@@ -183,7 +184,7 @@ func serveSnapshot(ctx *context.Context, fileKey string) {
183184

184185
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeConan, rref.Name, rref.Version)
185186
if err != nil {
186-
if err == packages_model.ErrPackageNotExist {
187+
if errors.Is(err, packages_model.ErrPackageNotExist) {
187188
apiError(ctx, http.StatusNotFound, err)
188189
} else {
189190
apiError(ctx, http.StatusInternalServerError, err)
@@ -244,7 +245,7 @@ func serveDownloadURLs(ctx *context.Context, fileKey, downloadURL string) {
244245

245246
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeConan, rref.Name, rref.Version)
246247
if err != nil {
247-
if err == packages_model.ErrPackageNotExist {
248+
if errors.Is(err, packages_model.ErrPackageNotExist) {
248249
apiError(ctx, http.StatusNotFound, err)
249250
} else {
250251
apiError(ctx, http.StatusInternalServerError, err)
@@ -493,7 +494,7 @@ func downloadFile(ctx *context.Context, fileFilter container.Set[string], fileKe
493494
},
494495
)
495496
if err != nil {
496-
if err == packages_model.ErrPackageNotExist || err == packages_model.ErrPackageFileNotExist {
497+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, packages_model.ErrPackageFileNotExist) {
497498
apiError(ctx, http.StatusNotFound, err)
498499
return
499500
}
@@ -509,7 +510,7 @@ func DeleteRecipeV1(ctx *context.Context) {
509510
rref := ctx.Data[recipeReferenceKey].(*conan_module.RecipeReference)
510511

511512
if err := deleteRecipeOrPackage(ctx, rref, true, nil, false); err != nil {
512-
if err == packages_model.ErrPackageNotExist || err == conan_model.ErrPackageReferenceNotExist {
513+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
513514
apiError(ctx, http.StatusNotFound, err)
514515
} else {
515516
apiError(ctx, http.StatusInternalServerError, err)
@@ -524,7 +525,7 @@ func DeleteRecipeV2(ctx *context.Context) {
524525
rref := ctx.Data[recipeReferenceKey].(*conan_module.RecipeReference)
525526

526527
if err := deleteRecipeOrPackage(ctx, rref, rref.Revision == "", nil, false); err != nil {
527-
if err == packages_model.ErrPackageNotExist || err == conan_model.ErrPackageReferenceNotExist {
528+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
528529
apiError(ctx, http.StatusNotFound, err)
529530
} else {
530531
apiError(ctx, http.StatusInternalServerError, err)
@@ -571,7 +572,7 @@ func DeletePackageV1(ctx *context.Context) {
571572
for _, reference := range references {
572573
pref, _ := conan_module.NewPackageReference(currentRref, reference.Value, conan_module.DefaultRevision)
573574
if err := deleteRecipeOrPackage(ctx, currentRref, true, pref, true); err != nil {
574-
if err == packages_model.ErrPackageNotExist || err == conan_model.ErrPackageReferenceNotExist {
575+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
575576
apiError(ctx, http.StatusNotFound, err)
576577
} else {
577578
apiError(ctx, http.StatusInternalServerError, err)
@@ -590,7 +591,7 @@ func DeletePackageV2(ctx *context.Context) {
590591

591592
if pref != nil { // has package reference
592593
if err := deleteRecipeOrPackage(ctx, rref, false, pref, pref.Revision == ""); err != nil {
593-
if err == packages_model.ErrPackageNotExist || err == conan_model.ErrPackageReferenceNotExist {
594+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
594595
apiError(ctx, http.StatusNotFound, err)
595596
} else {
596597
apiError(ctx, http.StatusInternalServerError, err)
@@ -615,7 +616,7 @@ func DeletePackageV2(ctx *context.Context) {
615616
pref, _ := conan_module.NewPackageReference(rref, reference.Value, conan_module.DefaultRevision)
616617

617618
if err := deleteRecipeOrPackage(ctx, rref, false, pref, true); err != nil {
618-
if err == packages_model.ErrPackageNotExist || err == conan_model.ErrPackageReferenceNotExist {
619+
if errors.Is(err, packages_model.ErrPackageNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
619620
apiError(ctx, http.StatusNotFound, err)
620621
} else {
621622
apiError(ctx, http.StatusInternalServerError, err)
@@ -749,7 +750,7 @@ func LatestRecipeRevision(ctx *context.Context) {
749750

750751
revision, err := conan_model.GetLastRecipeRevision(ctx, ctx.Package.Owner.ID, rref)
751752
if err != nil {
752-
if err == conan_model.ErrRecipeReferenceNotExist || err == conan_model.ErrPackageReferenceNotExist {
753+
if errors.Is(err, conan_model.ErrRecipeReferenceNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
753754
apiError(ctx, http.StatusNotFound, err)
754755
} else {
755756
apiError(ctx, http.StatusInternalServerError, err)
@@ -766,7 +767,7 @@ func LatestPackageRevision(ctx *context.Context) {
766767

767768
revision, err := conan_model.GetLastPackageRevision(ctx, ctx.Package.Owner.ID, pref)
768769
if err != nil {
769-
if err == conan_model.ErrRecipeReferenceNotExist || err == conan_model.ErrPackageReferenceNotExist {
770+
if errors.Is(err, conan_model.ErrRecipeReferenceNotExist) || errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
770771
apiError(ctx, http.StatusNotFound, err)
771772
} else {
772773
apiError(ctx, http.StatusInternalServerError, err)
@@ -796,7 +797,7 @@ func listRevisionFiles(ctx *context.Context, fileKey string) {
796797

797798
pv, err := packages_model.GetVersionByNameAndVersion(ctx, ctx.Package.Owner.ID, packages_model.TypeConan, rref.Name, rref.Version)
798799
if err != nil {
799-
if err == packages_model.ErrPackageNotExist {
800+
if errors.Is(err, packages_model.ErrPackageNotExist) {
800801
apiError(ctx, http.StatusNotFound, err)
801802
} else {
802803
apiError(ctx, http.StatusInternalServerError, err)

routers/api/packages/conan/search.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package conan
55

66
import (
7+
"errors"
78
"net/http"
89
"strings"
910

@@ -76,7 +77,7 @@ func searchPackages(ctx *context.Context, searchAllRevisions bool) {
7677
if !searchAllRevisions && rref.Revision == "" {
7778
lastRevision, err := conan_model.GetLastRecipeRevision(ctx, ctx.Package.Owner.ID, rref)
7879
if err != nil {
79-
if err == conan_model.ErrRecipeReferenceNotExist {
80+
if errors.Is(err, conan_model.ErrRecipeReferenceNotExist) {
8081
apiError(ctx, http.StatusNotFound, err)
8182
} else {
8283
apiError(ctx, http.StatusInternalServerError, err)
@@ -87,7 +88,7 @@ func searchPackages(ctx *context.Context, searchAllRevisions bool) {
8788
} else {
8889
has, err := conan_model.RecipeExists(ctx, ctx.Package.Owner.ID, rref)
8990
if err != nil {
90-
if err == conan_model.ErrRecipeReferenceNotExist {
91+
if errors.Is(err, conan_model.ErrRecipeReferenceNotExist) {
9192
apiError(ctx, http.StatusNotFound, err)
9293
} else {
9394
apiError(ctx, http.StatusInternalServerError, err)
@@ -119,7 +120,7 @@ func searchPackages(ctx *context.Context, searchAllRevisions bool) {
119120
}
120121
packageReferences, err := conan_model.GetPackageReferences(ctx, ctx.Package.Owner.ID, currentRef)
121122
if err != nil {
122-
if err == conan_model.ErrRecipeReferenceNotExist {
123+
if errors.Is(err, conan_model.ErrRecipeReferenceNotExist) {
123124
apiError(ctx, http.StatusNotFound, err)
124125
} else {
125126
apiError(ctx, http.StatusInternalServerError, err)
@@ -133,7 +134,7 @@ func searchPackages(ctx *context.Context, searchAllRevisions bool) {
133134
pref, _ := conan_module.NewPackageReference(currentRef, packageReference.Value, "")
134135
lastPackageRevision, err := conan_model.GetLastPackageRevision(ctx, ctx.Package.Owner.ID, pref)
135136
if err != nil {
136-
if err == conan_model.ErrPackageReferenceNotExist {
137+
if errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
137138
apiError(ctx, http.StatusNotFound, err)
138139
} else {
139140
apiError(ctx, http.StatusInternalServerError, err)
@@ -143,7 +144,7 @@ func searchPackages(ctx *context.Context, searchAllRevisions bool) {
143144
pref = pref.WithRevision(lastPackageRevision.Value)
144145
infoRaw, err := conan_model.GetPackageInfo(ctx, ctx.Package.Owner.ID, pref)
145146
if err != nil {
146-
if err == conan_model.ErrPackageReferenceNotExist {
147+
if errors.Is(err, conan_model.ErrPackageReferenceNotExist) {
147148
apiError(ctx, http.StatusNotFound, err)
148149
} else {
149150
apiError(ctx, http.StatusInternalServerError, err)

0 commit comments

Comments
 (0)