diff --git a/app/service/service.go b/app/service/service.go index 61e3eef..52bef4c 100644 --- a/app/service/service.go +++ b/app/service/service.go @@ -48,47 +48,52 @@ func (svc *Service) Build() error { svc.rout.Use(router.NewCorsMiddleware()) svc.rout.Use(svc.hand.AuthMiddleware) - svc.rout.Head(`/v2/{name}/blobs/{digest}`, svc.hand.BlobExists) - svc.rout.Get(`/v3/api/service/hello`, svc.hand.SendHello) - svc.rout.Head(`/v3/api/file/{filepath}`, svc.hand.FileInfo) - svc.rout.Put(`/v3/api/file/{filepath}`, svc.hand.PutFile) - svc.rout.Get(`/v3/api/file/{filepath}`, svc.hand.GetFile) - svc.rout.Delete(`/v3/api/file/{filepath}`, svc.hand.DeleteFile) + filepathRe := `{filepath:[a-zA-Z0-9_\.*][/\-\.,a-zA-Z0-9_%=*\[\]:~\$]+}` + svc.rout.Head(`/v3/api/file/`+filepathRe, svc.hand.FileInfo) + svc.rout.Put(`/v3/api/file/`+filepathRe, svc.hand.PutFile) + svc.rout.Get(`/v3/api/file/`+filepathRe, svc.hand.GetFile) + svc.rout.Delete(`/v3/api/file/`+filepathRe, svc.hand.DeleteFile) - svc.rout.Get(`/v3/api/files/{filepath}`, svc.hand.ListFiles) + svc.rout.Get(`/v3/api/files/`+filepathRe, svc.hand.ListFiles) svc.rout.Get(`/v3/api/files/`, svc.hand.ListFiles) - svc.rout.Post(`/v3/api/checker/{filepath}`, svc.hand.CheckFiles) + svc.rout.Post(`/v3/api/checker/`+filepathRe, svc.hand.CheckFiles) svc.rout.Post(`/v3/api/checker/`, svc.hand.CheckFiles) - svc.rout.Get(`/v3/api/collections/{path}`, svc.hand.ListCollections) + pathRe := filepathRe + svc.rout.Get(`/v3/api/collections/`+pathRe, svc.hand.ListCollections) svc.rout.Get(`/v3/api/collections/`, svc.hand.ListCollections) - svc.rout.Delete(`/v3/api/collection/{path}`, svc.hand.DeleteCollection) + svc.rout.Delete(`/v3/api/collection/`+pathRe, svc.hand.DeleteCollection) svc.rout.Delete(`/v3/api/collection/`, svc.hand.DeleteCollection) svc.rout.Get(`/v2/`, svc.hand.GetVersion) - svc.rout.Head(`/v2/{name}/manifests/{reference}`, svc.hand.ManifestExists) - svc.rout.Put(`/v2/{name}/manifests/{reference}`, svc.hand.PutManifest) - svc.rout.Get(`/v2/{name}/manifests/{reference}`, svc.hand.GetManifest) - svc.rout.Delete(`/v2/{name}/manifests/{reference}`, svc.hand.DeleteManifest) + nameRe := `{name:[a-zA-Z0-9_][a-zA-Z0-9_/\-.]+}` + referenceRe := `{reference:[a-zA-Z0-9_][a-zA-Z0-9_\-.:=]+}` + digestRe := `{digest:[a-zA-Z0-9_][a-zA-Z0-9_\-.:=]+}` - svc.rout.Post(`/v2/{name}/blobs/uploads/`, svc.hand.PostUpload) - svc.rout.Patch(`/v2/{name}/blobs/uploads/{reference}`, svc.hand.PatchUpload) - svc.rout.Put(`/v2/{name}/blobs/uploads/{reference}`, svc.hand.PutUpload) - svc.rout.Put(`/v2/{name}/uploads/{reference}`, svc.hand.PutUpload) + svc.rout.Head(`/v2/`+nameRe+`/manifests/`+referenceRe, svc.hand.ManifestExists) + svc.rout.Put(`/v2/`+nameRe+`/manifests/`+referenceRe, svc.hand.PutManifest) + svc.rout.Get(`/v2/`+nameRe+`/manifests/`+referenceRe, svc.hand.GetManifest) + svc.rout.Delete(`/v2/`+nameRe+`/manifests/`+referenceRe, svc.hand.DeleteManifest) - svc.rout.Get(`/v2/{name}/blobs/{digest}`, svc.hand.GetBlob) - svc.rout.Delete(`/v2/{name}/blobs/{digest}`, svc.hand.DeleteBlob) + svc.rout.Post(`/v2/`+nameRe+`/blobs/uploads/`, svc.hand.PostUpload) + svc.rout.Patch(`/v2/`+nameRe+`/blobs/uploads/`+referenceRe, svc.hand.PatchUpload) + svc.rout.Put(`/v2/`+nameRe+`/blobs/uploads/`+referenceRe, svc.hand.PutUpload) + svc.rout.Put(`/v2/`+nameRe+`/uploads/`+referenceRe, svc.hand.PutUpload) - svc.rout.Get(`/v2/{name}/tags/list`, svc.hand.GetTags) - svc.rout.Get(`/v2/{name}/referrers/{digest}`, svc.hand.GetReferer) + svc.rout.Head(`/v2/`+nameRe+`/blobs/`+digestRe, svc.hand.BlobExists) + svc.rout.Get(`/v2/`+nameRe+`/blobs/`+digestRe, svc.hand.GetBlob) + svc.rout.Delete(`/v2/`+nameRe+`/blobs/`+digestRe, svc.hand.DeleteBlob) + + svc.rout.Get(`/v2/`+nameRe+`/tags/list`, svc.hand.GetTags) + svc.rout.Get(`/v2/`+nameRe+`/referrers/`+digestRe, svc.hand.GetReferer) svc.rout.Get(`/v2/_catalog`, svc.hand.ListManifests) - svc.rout.Post(`/v2/checker/{name}`, svc.hand.CheckImages) + svc.rout.Post(`/v2/checker/`+nameRe, svc.hand.CheckImages) svc.rout.Post(`/v2/checker`, svc.hand.CheckImages) svc.rout.Post(`/v3/api/account/create`, svc.hand.CreateAccount) @@ -103,7 +108,7 @@ func (svc *Service) Build() error { svc.rout.Post(`/v3/api/grant/delete`, svc.hand.DeleteGrant) svc.rout.Post(`/v3/api/grants/list`, svc.hand.ListGrants) - svc.rout.Get(`/{filepath}`, svc.hand.GetFile) + svc.rout.Get(`/`+filepathRe, svc.hand.GetFile) svc.rout.NotFound(svc.hand.NotFound) diff --git a/pkg/repocli/delman.go b/pkg/repocli/delman.go index 7d3667f..4e393e1 100644 --- a/pkg/repocli/delman.go +++ b/pkg/repocli/delman.go @@ -13,13 +13,7 @@ import ( ) func (cli *Client) DeleteImage(ctx context.Context, rawrepo string) (bool, error) { - var err error - var exist bool - ref, err := NewReferer(rawrepo) - if err != nil { - return exist, err - } - return cli.DeleteManifest(ctx, ref.ManifestEP()) + return cli.DeleteManifest(ctx, rawrepo) } func (cli *Client) DeleteManifest(ctx context.Context, rawrepo string) (bool, error) { @@ -45,7 +39,7 @@ func (cli *Client) DeleteManifest(ctx context.Context, rawrepo string) (bool, er if resp.StatusCode == http.StatusNotFound { return exist, err } - if resp.StatusCode != http.StatusOK { + if resp.StatusCode != http.StatusAccepted { err := fmt.Errorf("Unxected response code %s", resp.Status) return exist, err }