mirror of
https://github.com/goharbor/harbor.git
synced 2024-09-26 04:23:22 +02:00
fix(retention) fix retention repository with slash
Signed-off-by: Ziming Zhang <zziming@vmware.com>
This commit is contained in:
parent
6dfe504325
commit
97a7a6dc35
@ -16,11 +16,10 @@ package artifact
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
cmodels "github.com/goharbor/harbor/src/common/models"
|
||||
"github.com/goharbor/harbor/src/common/utils"
|
||||
"github.com/goharbor/harbor/src/controller/tag"
|
||||
"github.com/goharbor/harbor/src/lib/encode/repository"
|
||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||
"github.com/goharbor/harbor/src/server/v2.0/models"
|
||||
)
|
||||
@ -41,7 +40,7 @@ func (artifact *Artifact) SetAdditionLink(addition, version string) {
|
||||
|
||||
projectName, repo := utils.ParseRepository(artifact.RepositoryName)
|
||||
// encode slash as %252F
|
||||
repo = url.PathEscape(url.PathEscape(repo))
|
||||
repo = repository.Encode(repo)
|
||||
href := fmt.Sprintf("/api/%s/projects/%s/repositories/%s/artifacts/%s/additions/%s", version, projectName, repo, artifact.Digest, addition)
|
||||
|
||||
artifact.AdditionLinks[addition] = &AdditionLink{HREF: href, Absolute: false}
|
||||
|
@ -14,6 +14,7 @@ require (
|
||||
github.com/beego/i18n v0.0.0-20140604031826-e87155e8f0c0
|
||||
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 // indirect
|
||||
github.com/bmatcuk/doublestar v1.1.1
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869
|
||||
github.com/bugsnag/bugsnag-go v1.5.2 // indirect
|
||||
github.com/bugsnag/panicwrap v1.2.0 // indirect
|
||||
github.com/casbin/casbin v1.7.0
|
||||
|
8
src/lib/encode/repository/repository.go
Normal file
8
src/lib/encode/repository/repository.go
Normal file
@ -0,0 +1,8 @@
|
||||
package repository
|
||||
|
||||
import "net/url"
|
||||
|
||||
// Encode encode the repository name
|
||||
func Encode(repo string) string {
|
||||
return url.PathEscape(url.PathEscape(repo))
|
||||
}
|
11
src/lib/encode/repository/repository_test.go
Normal file
11
src/lib/encode/repository/repository_test.go
Normal file
@ -0,0 +1,11 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestEncode(t *testing.T) {
|
||||
repo := "library/ns1/busybox"
|
||||
assert.Equal(t, "library%252Fns1%252Fbusybox", Encode(repo))
|
||||
}
|
@ -17,10 +17,12 @@ package core
|
||||
import (
|
||||
"fmt"
|
||||
modelsv2 "github.com/goharbor/harbor/src/controller/artifact"
|
||||
"github.com/goharbor/harbor/src/lib/encode/repository"
|
||||
)
|
||||
|
||||
func (c *client) ListAllArtifacts(project, repository string) ([]*modelsv2.Artifact, error) {
|
||||
url := c.buildURL(fmt.Sprintf("/api/v2.0/projects/%s/repositories/%s/artifacts", project, repository)) // should query only tag
|
||||
func (c *client) ListAllArtifacts(project, repo string) ([]*modelsv2.Artifact, error) {
|
||||
repo = repository.Encode(repo)
|
||||
url := c.buildURL(fmt.Sprintf("/api/v2.0/projects/%s/repositories/%s/artifacts", project, repo))
|
||||
var arts []*modelsv2.Artifact
|
||||
if err := c.httpclient.GetAndIteratePagination(url, &arts); err != nil {
|
||||
return nil, err
|
||||
@ -28,13 +30,14 @@ func (c *client) ListAllArtifacts(project, repository string) ([]*modelsv2.Artif
|
||||
return arts, nil
|
||||
}
|
||||
|
||||
func (c *client) DeleteArtifact(project, repository, digest string) error {
|
||||
// /projects/{project_name}/repositories/{repository_name}/artifacts/{reference}
|
||||
url := c.buildURL(fmt.Sprintf("/api/v2.0/projects/%s/repositories/%s/artifacts/%s", project, repository, digest))
|
||||
func (c *client) DeleteArtifact(project, repo, digest string) error {
|
||||
repo = repository.Encode(repo)
|
||||
url := c.buildURL(fmt.Sprintf("/api/v2.0/projects/%s/repositories/%s/artifacts/%s", project, repo, digest))
|
||||
return c.httpclient.Delete(url)
|
||||
}
|
||||
|
||||
func (c *client) DeleteArtifactRepository(project, repository string) error {
|
||||
url := c.buildURL(fmt.Sprintf("/api/repositories/%s/%s", project, repository))
|
||||
func (c *client) DeleteArtifactRepository(project, repo string) error {
|
||||
repo = repository.Encode(repo)
|
||||
url := c.buildURL(fmt.Sprintf("/api/repositories/%s/%s", project, repo))
|
||||
return c.httpclient.Delete(url)
|
||||
}
|
||||
|
@ -16,11 +16,10 @@ package v2
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/goharbor/harbor/src/common/models"
|
||||
"github.com/goharbor/harbor/src/common/utils"
|
||||
"github.com/goharbor/harbor/src/controller/artifact"
|
||||
"github.com/goharbor/harbor/src/lib/encode/repository"
|
||||
"github.com/goharbor/harbor/src/replication/adapter/harbor/base"
|
||||
"github.com/goharbor/harbor/src/replication/model"
|
||||
)
|
||||
@ -45,11 +44,11 @@ func (c *client) listRepositories(project *base.Project) ([]*model.Repository, e
|
||||
return repos, nil
|
||||
}
|
||||
|
||||
func (c *client) listArtifacts(repository string) ([]*model.Artifact, error) {
|
||||
project, repository := utils.ParseRepository(repository)
|
||||
repository = url.PathEscape(url.PathEscape(repository))
|
||||
func (c *client) listArtifacts(repo string) ([]*model.Artifact, error) {
|
||||
project, repo := utils.ParseRepository(repo)
|
||||
repo = repository.Encode(repo)
|
||||
url := fmt.Sprintf("%s/projects/%s/repositories/%s/artifacts?with_label=true",
|
||||
c.BasePath(), project, repository)
|
||||
c.BasePath(), project, repo)
|
||||
artifacts := []*artifact.Artifact{}
|
||||
if err := c.C.GetAndIteratePagination(url, &artifacts); err != nil {
|
||||
return nil, err
|
||||
@ -71,10 +70,10 @@ func (c *client) listArtifacts(repository string) ([]*model.Artifact, error) {
|
||||
return arts, nil
|
||||
}
|
||||
|
||||
func (c *client) deleteTag(repository, tag string) error {
|
||||
project, repository := utils.ParseRepository(repository)
|
||||
repository = url.PathEscape(url.PathEscape(repository))
|
||||
func (c *client) deleteTag(repo, tag string) error {
|
||||
project, repo := utils.ParseRepository(repo)
|
||||
repo = repository.Encode(repo)
|
||||
url := fmt.Sprintf("%s/projects/%s/repositories/%s/artifacts/%s/tags/%s",
|
||||
c.BasePath(), project, repository, tag, tag)
|
||||
c.BasePath(), project, repo, tag, tag)
|
||||
return c.C.Delete(url)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user