mirror of https://github.com/harness/drone.git
[feat]: [AH-284]: Delete Artifact and Delete Artifact Version (#2788)
* pr review * lint * pr reviews * pr reviews * pr reviews * fix * Merge branch 'main' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-284-delete-flows * [feat]: [AH-284]: Delete flowspull/3576/head
parent
cc7320e9af
commit
18eb27aa15
|
@ -76,6 +76,7 @@ const (
|
||||||
ResourceTypeRepositorySettings ResourceType = "repository_settings"
|
ResourceTypeRepositorySettings ResourceType = "repository_settings"
|
||||||
ResourceTypeRegistry ResourceType = "registry"
|
ResourceTypeRegistry ResourceType = "registry"
|
||||||
ResourceTypeRegistryUpstreamProxy ResourceType = "registry_upstream_proxy"
|
ResourceTypeRegistryUpstreamProxy ResourceType = "registry_upstream_proxy"
|
||||||
|
ResourceTypeRegistryArtifact ResourceType = "registry_artifact"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a ResourceType) Validate() error {
|
func (a ResourceType) Validate() error {
|
||||||
|
@ -86,7 +87,8 @@ func (a ResourceType) Validate() error {
|
||||||
ResourceTypePullRequest,
|
ResourceTypePullRequest,
|
||||||
ResourceTypeRepositorySettings,
|
ResourceTypeRepositorySettings,
|
||||||
ResourceTypeRegistry,
|
ResourceTypeRegistry,
|
||||||
ResourceTypeRegistryUpstreamProxy:
|
ResourceTypeRegistryUpstreamProxy,
|
||||||
|
ResourceTypeRegistryArtifact:
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
// Copyright 2023 Harness, Inc.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package metadata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
apiauth "github.com/harness/gitness/app/api/auth"
|
||||||
|
"github.com/harness/gitness/app/api/request"
|
||||||
|
"github.com/harness/gitness/audit"
|
||||||
|
"github.com/harness/gitness/registry/app/api/openapi/contracts/artifact"
|
||||||
|
registryTypes "github.com/harness/gitness/registry/types"
|
||||||
|
"github.com/harness/gitness/types/enum"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *APIController) DeleteArtifact(ctx context.Context, r artifact.DeleteArtifactRequestObject) (
|
||||||
|
artifact.DeleteArtifactResponseObject, error) {
|
||||||
|
regInfo, err := c.GetRegistryRequestBaseInfo(ctx, "", string(r.RegistryRef))
|
||||||
|
if err != nil {
|
||||||
|
return artifact.DeleteArtifact400JSONResponse{
|
||||||
|
BadRequestJSONResponse: artifact.BadRequestJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusBadRequest, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
space, err := c.SpaceStore.FindByRef(ctx, regInfo.ParentRef)
|
||||||
|
if err != nil {
|
||||||
|
return artifact.DeleteArtifact400JSONResponse{
|
||||||
|
BadRequestJSONResponse: artifact.BadRequestJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusBadRequest, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
session, _ := request.AuthSessionFrom(ctx)
|
||||||
|
if err = apiauth.CheckSpaceScope(
|
||||||
|
ctx,
|
||||||
|
c.Authorizer,
|
||||||
|
session,
|
||||||
|
space,
|
||||||
|
enum.ResourceTypeRegistry,
|
||||||
|
enum.PermissionArtifactsDelete,
|
||||||
|
); err != nil {
|
||||||
|
return artifact.DeleteArtifact403JSONResponse{
|
||||||
|
UnauthorizedJSONResponse: artifact.UnauthorizedJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusForbidden, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
repoEntity, err := c.RegistryRepository.GetByParentIDAndName(ctx, regInfo.parentID, regInfo.RegistryIdentifier)
|
||||||
|
if len(repoEntity.Name) == 0 {
|
||||||
|
return artifact.DeleteArtifact404JSONResponse{
|
||||||
|
NotFoundJSONResponse: artifact.NotFoundJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusNotFound, "registry doesn't exist with this key"),
|
||||||
|
),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return throwDeleteArtifact500Error(err), err
|
||||||
|
}
|
||||||
|
|
||||||
|
artifactName := string(r.Artifact)
|
||||||
|
err = c.tx.WithTx(
|
||||||
|
ctx, func(ctx context.Context) error {
|
||||||
|
err = c.disableImageStatus(
|
||||||
|
ctx, regInfo, artifactName,
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to delete artifact: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err := c.ManifestStore.DeleteManifestsByImageName(ctx, regInfo.RegistryID, artifactName)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to delete artifact: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
auditErr := c.AuditService.Log(
|
||||||
|
ctx,
|
||||||
|
session.Principal,
|
||||||
|
audit.NewResource(audit.ResourceTypeRegistryArtifact, string(r.Artifact)),
|
||||||
|
audit.ActionDeleted,
|
||||||
|
regInfo.ParentRef,
|
||||||
|
audit.WithData("registry name", repoEntity.Name),
|
||||||
|
audit.WithData("artifact name", string(r.Artifact)),
|
||||||
|
)
|
||||||
|
if auditErr != nil {
|
||||||
|
log.Ctx(ctx).Warn().Msgf("failed to insert audit log for delete tag operation: %s", auditErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return throwDeleteArtifact500Error(err), err
|
||||||
|
}
|
||||||
|
return artifact.DeleteArtifact200JSONResponse{
|
||||||
|
SuccessJSONResponse: artifact.SuccessJSONResponse(*GetSuccessResponse()),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *APIController) disableImageStatus(
|
||||||
|
ctx context.Context,
|
||||||
|
regInfo *RegistryRequestBaseInfo, artifactName string,
|
||||||
|
) error {
|
||||||
|
image := ®istryTypes.Image{
|
||||||
|
Name: artifactName,
|
||||||
|
RegistryID: regInfo.RegistryID,
|
||||||
|
Enabled: false,
|
||||||
|
}
|
||||||
|
err := c.ImageStore.UpdateStatus(ctx, image)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func throwDeleteArtifact500Error(err error) artifact.DeleteArtifact500JSONResponse {
|
||||||
|
return artifact.DeleteArtifact500JSONResponse{
|
||||||
|
InternalServerErrorJSONResponse: artifact.InternalServerErrorJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusInternalServerError, err.Error()),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,118 @@
|
||||||
|
// Copyright 2023 Harness, Inc.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package metadata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
apiauth "github.com/harness/gitness/app/api/auth"
|
||||||
|
"github.com/harness/gitness/app/api/request"
|
||||||
|
"github.com/harness/gitness/audit"
|
||||||
|
"github.com/harness/gitness/registry/app/api/openapi/contracts/artifact"
|
||||||
|
"github.com/harness/gitness/types"
|
||||||
|
"github.com/harness/gitness/types/enum"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *APIController) DeleteArtifactVersion(ctx context.Context, r artifact.DeleteArtifactVersionRequestObject) (
|
||||||
|
artifact.DeleteArtifactVersionResponseObject, error) {
|
||||||
|
regInfo, err := c.GetRegistryRequestBaseInfo(ctx, "", string(r.RegistryRef))
|
||||||
|
if err != nil {
|
||||||
|
return artifact.DeleteArtifactVersion400JSONResponse{
|
||||||
|
BadRequestJSONResponse: artifact.BadRequestJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusBadRequest, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
space, err := c.SpaceStore.FindByRef(ctx, regInfo.ParentRef)
|
||||||
|
if err != nil {
|
||||||
|
return artifact.DeleteArtifactVersion400JSONResponse{
|
||||||
|
BadRequestJSONResponse: artifact.BadRequestJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusBadRequest, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
session, _ := request.AuthSessionFrom(ctx)
|
||||||
|
if err = apiauth.CheckSpaceScope(
|
||||||
|
ctx,
|
||||||
|
c.Authorizer,
|
||||||
|
session,
|
||||||
|
space,
|
||||||
|
enum.ResourceTypeRegistry,
|
||||||
|
enum.PermissionArtifactsDelete,
|
||||||
|
); err != nil {
|
||||||
|
return artifact.DeleteArtifactVersion403JSONResponse{
|
||||||
|
UnauthorizedJSONResponse: artifact.UnauthorizedJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusForbidden, err.Error()),
|
||||||
|
),
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
repoEntity, err := c.RegistryRepository.GetByParentIDAndName(ctx, regInfo.parentID, regInfo.RegistryIdentifier)
|
||||||
|
if len(repoEntity.Name) == 0 {
|
||||||
|
return artifact.DeleteArtifactVersion404JSONResponse{
|
||||||
|
NotFoundJSONResponse: artifact.NotFoundJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusNotFound, "registry doesn't exist with this key"),
|
||||||
|
),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return throwDeleteArtifactVersion500Error(err), err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.deleteTagWithAudit(ctx, regInfo, repoEntity.Name, session.Principal, string(r.Artifact),
|
||||||
|
string(r.Version))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return throwDeleteArtifactVersion500Error(err), err
|
||||||
|
}
|
||||||
|
return artifact.DeleteArtifactVersion200JSONResponse{
|
||||||
|
SuccessJSONResponse: artifact.SuccessJSONResponse(*GetSuccessResponse()),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *APIController) deleteTagWithAudit(
|
||||||
|
ctx context.Context, regInfo *RegistryRequestBaseInfo,
|
||||||
|
registryName string, principal types.Principal, artifactName string, versionName string) error {
|
||||||
|
err := c.TagStore.DeleteTag(ctx, regInfo.RegistryID, artifactName, versionName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
auditErr := c.AuditService.Log(
|
||||||
|
ctx,
|
||||||
|
principal,
|
||||||
|
audit.NewResource(audit.ResourceTypeRegistry, artifactName),
|
||||||
|
audit.ActionDeleted,
|
||||||
|
regInfo.ParentRef,
|
||||||
|
audit.WithData("registry name", registryName),
|
||||||
|
audit.WithData("artifact name", artifactName),
|
||||||
|
audit.WithData("version name", versionName),
|
||||||
|
)
|
||||||
|
if auditErr != nil {
|
||||||
|
log.Ctx(ctx).Warn().Msgf("failed to insert audit log for delete tag operation: %s", auditErr)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func throwDeleteArtifactVersion500Error(err error) artifact.DeleteArtifactVersion500JSONResponse {
|
||||||
|
return artifact.DeleteArtifactVersion500JSONResponse{
|
||||||
|
InternalServerErrorJSONResponse: artifact.InternalServerErrorJSONResponse(
|
||||||
|
*GetErrorResponse(http.StatusInternalServerError, err.Error()),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
|
@ -294,6 +294,53 @@ paths:
|
||||||
$ref: "#/components/responses/NotFound"
|
$ref: "#/components/responses/NotFound"
|
||||||
500:
|
500:
|
||||||
$ref: "#/components/responses/InternalServerError"
|
$ref: "#/components/responses/InternalServerError"
|
||||||
|
/registry/{registry_ref}/artifact/{artifact}:
|
||||||
|
delete:
|
||||||
|
summary: Delete Artifact
|
||||||
|
description: Delete Artifact.
|
||||||
|
operationId: DeleteArtifact
|
||||||
|
tags:
|
||||||
|
- Artifacts
|
||||||
|
parameters:
|
||||||
|
- $ref: "#/components/parameters/registryRefPathParam"
|
||||||
|
- $ref: "#/components/parameters/artifactPathParam"
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
$ref: "#/components/responses/Success"
|
||||||
|
400:
|
||||||
|
$ref: "#/components/responses/BadRequest"
|
||||||
|
401:
|
||||||
|
$ref: "#/components/responses/Unauthenticated"
|
||||||
|
403:
|
||||||
|
$ref: "#/components/responses/Unauthorized"
|
||||||
|
404:
|
||||||
|
$ref: "#/components/responses/NotFound"
|
||||||
|
500:
|
||||||
|
$ref: "#/components/responses/InternalServerError"
|
||||||
|
/registry/{registry_ref}/artifact/{artifact}/version/{version}:
|
||||||
|
delete:
|
||||||
|
summary: Delete an Artifact Version
|
||||||
|
description: Delete Artifact Version.
|
||||||
|
operationId: DeleteArtifactVersion
|
||||||
|
tags:
|
||||||
|
- Artifacts
|
||||||
|
parameters:
|
||||||
|
- $ref: "#/components/parameters/registryRefPathParam"
|
||||||
|
- $ref: "#/components/parameters/artifactPathParam"
|
||||||
|
- $ref: "#/components/parameters/versionPathParam"
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
$ref: "#/components/responses/Success"
|
||||||
|
400:
|
||||||
|
$ref: "#/components/responses/BadRequest"
|
||||||
|
401:
|
||||||
|
$ref: "#/components/responses/Unauthenticated"
|
||||||
|
403:
|
||||||
|
$ref: "#/components/responses/Unauthorized"
|
||||||
|
404:
|
||||||
|
$ref: "#/components/responses/NotFound"
|
||||||
|
500:
|
||||||
|
$ref: "#/components/responses/InternalServerError"
|
||||||
/registry/{registry_ref}/artifact/{artifact}/summary:
|
/registry/{registry_ref}/artifact/{artifact}/summary:
|
||||||
get:
|
get:
|
||||||
summary: Get Artifact Summary
|
summary: Get Artifact Summary
|
||||||
|
|
|
@ -41,6 +41,9 @@ type ServerInterface interface {
|
||||||
// Get Artifact Stats
|
// Get Artifact Stats
|
||||||
// (GET /registry/{registry_ref}/artifact/stats)
|
// (GET /registry/{registry_ref}/artifact/stats)
|
||||||
GetArtifactStatsForRegistry(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, params GetArtifactStatsForRegistryParams)
|
GetArtifactStatsForRegistry(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, params GetArtifactStatsForRegistryParams)
|
||||||
|
// Delete Artifact
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact})
|
||||||
|
DeleteArtifact(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam)
|
||||||
// Update Artifact Labels
|
// Update Artifact Labels
|
||||||
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
||||||
UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam)
|
UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam)
|
||||||
|
@ -50,6 +53,9 @@ type ServerInterface interface {
|
||||||
// Get Artifact Summary
|
// Get Artifact Summary
|
||||||
// (GET /registry/{registry_ref}/artifact/{artifact}/summary)
|
// (GET /registry/{registry_ref}/artifact/{artifact}/summary)
|
||||||
GetArtifactSummary(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam)
|
GetArtifactSummary(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam)
|
||||||
|
// Delete an Artifact Version
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact}/version/{version})
|
||||||
|
DeleteArtifactVersion(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam)
|
||||||
// Describe Docker Artifact Detail
|
// Describe Docker Artifact Detail
|
||||||
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
||||||
GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams)
|
GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams)
|
||||||
|
@ -131,6 +137,12 @@ func (_ Unimplemented) GetArtifactStatsForRegistry(w http.ResponseWriter, r *htt
|
||||||
w.WriteHeader(http.StatusNotImplemented)
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete Artifact
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact})
|
||||||
|
func (_ Unimplemented) DeleteArtifact(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
||||||
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
|
}
|
||||||
|
|
||||||
// Update Artifact Labels
|
// Update Artifact Labels
|
||||||
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
||||||
func (_ Unimplemented) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
func (_ Unimplemented) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
||||||
|
@ -149,6 +161,12 @@ func (_ Unimplemented) GetArtifactSummary(w http.ResponseWriter, r *http.Request
|
||||||
w.WriteHeader(http.StatusNotImplemented)
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete an Artifact Version
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact}/version/{version})
|
||||||
|
func (_ Unimplemented) DeleteArtifactVersion(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam) {
|
||||||
|
w.WriteHeader(http.StatusNotImplemented)
|
||||||
|
}
|
||||||
|
|
||||||
// Describe Docker Artifact Detail
|
// Describe Docker Artifact Detail
|
||||||
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
||||||
func (_ Unimplemented) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams) {
|
func (_ Unimplemented) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams) {
|
||||||
|
@ -440,6 +458,41 @@ func (siw *ServerInterfaceWrapper) GetArtifactStatsForRegistry(w http.ResponseWr
|
||||||
handler.ServeHTTP(w, r.WithContext(ctx))
|
handler.ServeHTTP(w, r.WithContext(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteArtifact operation middleware
|
||||||
|
func (siw *ServerInterfaceWrapper) DeleteArtifact(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx := r.Context()
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// ------------- Path parameter "registry_ref" -------------
|
||||||
|
var registryRef RegistryRefPathParam
|
||||||
|
|
||||||
|
err = runtime.BindStyledParameterWithOptions("simple", "registry_ref", chi.URLParam(r, "registry_ref"), ®istryRef, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
|
||||||
|
if err != nil {
|
||||||
|
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "registry_ref", Err: err})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------- Path parameter "artifact" -------------
|
||||||
|
var artifact ArtifactPathParam
|
||||||
|
|
||||||
|
err = runtime.BindStyledParameterWithOptions("simple", "artifact", chi.URLParam(r, "artifact"), &artifact, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
|
||||||
|
if err != nil {
|
||||||
|
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "artifact", Err: err})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
siw.Handler.DeleteArtifact(w, r, registryRef, artifact)
|
||||||
|
}))
|
||||||
|
|
||||||
|
for _, middleware := range siw.HandlerMiddlewares {
|
||||||
|
handler = middleware(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
handler.ServeHTTP(w, r.WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateArtifactLabels operation middleware
|
// UpdateArtifactLabels operation middleware
|
||||||
func (siw *ServerInterfaceWrapper) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request) {
|
func (siw *ServerInterfaceWrapper) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
@ -564,6 +617,50 @@ func (siw *ServerInterfaceWrapper) GetArtifactSummary(w http.ResponseWriter, r *
|
||||||
handler.ServeHTTP(w, r.WithContext(ctx))
|
handler.ServeHTTP(w, r.WithContext(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteArtifactVersion operation middleware
|
||||||
|
func (siw *ServerInterfaceWrapper) DeleteArtifactVersion(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx := r.Context()
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// ------------- Path parameter "registry_ref" -------------
|
||||||
|
var registryRef RegistryRefPathParam
|
||||||
|
|
||||||
|
err = runtime.BindStyledParameterWithOptions("simple", "registry_ref", chi.URLParam(r, "registry_ref"), ®istryRef, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
|
||||||
|
if err != nil {
|
||||||
|
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "registry_ref", Err: err})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------- Path parameter "artifact" -------------
|
||||||
|
var artifact ArtifactPathParam
|
||||||
|
|
||||||
|
err = runtime.BindStyledParameterWithOptions("simple", "artifact", chi.URLParam(r, "artifact"), &artifact, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
|
||||||
|
if err != nil {
|
||||||
|
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "artifact", Err: err})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------- Path parameter "version" -------------
|
||||||
|
var version VersionPathParam
|
||||||
|
|
||||||
|
err = runtime.BindStyledParameterWithOptions("simple", "version", chi.URLParam(r, "version"), &version, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
|
||||||
|
if err != nil {
|
||||||
|
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "version", Err: err})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
siw.Handler.DeleteArtifactVersion(w, r, registryRef, artifact, version)
|
||||||
|
}))
|
||||||
|
|
||||||
|
for _, middleware := range siw.HandlerMiddlewares {
|
||||||
|
handler = middleware(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
handler.ServeHTTP(w, r.WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
// GetDockerArtifactDetails operation middleware
|
// GetDockerArtifactDetails operation middleware
|
||||||
func (siw *ServerInterfaceWrapper) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request) {
|
func (siw *ServerInterfaceWrapper) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
@ -1472,6 +1569,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl
|
||||||
r.Group(func(r chi.Router) {
|
r.Group(func(r chi.Router) {
|
||||||
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/stats", wrapper.GetArtifactStatsForRegistry)
|
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/stats", wrapper.GetArtifactStatsForRegistry)
|
||||||
})
|
})
|
||||||
|
r.Group(func(r chi.Router) {
|
||||||
|
r.Delete(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}", wrapper.DeleteArtifact)
|
||||||
|
})
|
||||||
r.Group(func(r chi.Router) {
|
r.Group(func(r chi.Router) {
|
||||||
r.Put(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/labels", wrapper.UpdateArtifactLabels)
|
r.Put(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/labels", wrapper.UpdateArtifactLabels)
|
||||||
})
|
})
|
||||||
|
@ -1481,6 +1581,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl
|
||||||
r.Group(func(r chi.Router) {
|
r.Group(func(r chi.Router) {
|
||||||
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/summary", wrapper.GetArtifactSummary)
|
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/summary", wrapper.GetArtifactSummary)
|
||||||
})
|
})
|
||||||
|
r.Group(func(r chi.Router) {
|
||||||
|
r.Delete(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/version/{version}", wrapper.DeleteArtifactVersion)
|
||||||
|
})
|
||||||
r.Group(func(r chi.Router) {
|
r.Group(func(r chi.Router) {
|
||||||
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details", wrapper.GetDockerArtifactDetails)
|
r.Get(options.BaseURL+"/registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details", wrapper.GetDockerArtifactDetails)
|
||||||
})
|
})
|
||||||
|
@ -2058,6 +2161,71 @@ func (response GetArtifactStatsForRegistry500JSONResponse) VisitGetArtifactStats
|
||||||
return json.NewEncoder(w).Encode(response)
|
return json.NewEncoder(w).Encode(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactRequestObject struct {
|
||||||
|
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
||||||
|
Artifact ArtifactPathParam `json:"artifact"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactResponseObject interface {
|
||||||
|
VisitDeleteArtifactResponse(w http.ResponseWriter) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact200JSONResponse struct{ SuccessJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifact200JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(200)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact400JSONResponse struct{ BadRequestJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifact400JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(400)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact401JSONResponse struct{ UnauthenticatedJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifact401JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(401)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact403JSONResponse struct{ UnauthorizedJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifact403JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(403)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact404JSONResponse struct{ NotFoundJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifact404JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(404)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifact500JSONResponse struct {
|
||||||
|
InternalServerErrorJSONResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
func (response DeleteArtifact500JSONResponse) VisitDeleteArtifactResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(500)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
type UpdateArtifactLabelsRequestObject struct {
|
type UpdateArtifactLabelsRequestObject struct {
|
||||||
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
||||||
Artifact ArtifactPathParam `json:"artifact"`
|
Artifact ArtifactPathParam `json:"artifact"`
|
||||||
|
@ -2261,6 +2429,72 @@ func (response GetArtifactSummary500JSONResponse) VisitGetArtifactSummaryRespons
|
||||||
return json.NewEncoder(w).Encode(response)
|
return json.NewEncoder(w).Encode(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersionRequestObject struct {
|
||||||
|
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
||||||
|
Artifact ArtifactPathParam `json:"artifact"`
|
||||||
|
Version VersionPathParam `json:"version"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersionResponseObject interface {
|
||||||
|
VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion200JSONResponse struct{ SuccessJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion200JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(200)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion400JSONResponse struct{ BadRequestJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion400JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(400)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion401JSONResponse struct{ UnauthenticatedJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion401JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(401)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion403JSONResponse struct{ UnauthorizedJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion403JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(403)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion404JSONResponse struct{ NotFoundJSONResponse }
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion404JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(404)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeleteArtifactVersion500JSONResponse struct {
|
||||||
|
InternalServerErrorJSONResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
func (response DeleteArtifactVersion500JSONResponse) VisitDeleteArtifactVersionResponse(w http.ResponseWriter) error {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(500)
|
||||||
|
|
||||||
|
return json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
type GetDockerArtifactDetailsRequestObject struct {
|
type GetDockerArtifactDetailsRequestObject struct {
|
||||||
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
RegistryRef RegistryRefPathParam `json:"registry_ref"`
|
||||||
Artifact ArtifactPathParam `json:"artifact"`
|
Artifact ArtifactPathParam `json:"artifact"`
|
||||||
|
@ -3163,6 +3397,9 @@ type StrictServerInterface interface {
|
||||||
// Get Artifact Stats
|
// Get Artifact Stats
|
||||||
// (GET /registry/{registry_ref}/artifact/stats)
|
// (GET /registry/{registry_ref}/artifact/stats)
|
||||||
GetArtifactStatsForRegistry(ctx context.Context, request GetArtifactStatsForRegistryRequestObject) (GetArtifactStatsForRegistryResponseObject, error)
|
GetArtifactStatsForRegistry(ctx context.Context, request GetArtifactStatsForRegistryRequestObject) (GetArtifactStatsForRegistryResponseObject, error)
|
||||||
|
// Delete Artifact
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact})
|
||||||
|
DeleteArtifact(ctx context.Context, request DeleteArtifactRequestObject) (DeleteArtifactResponseObject, error)
|
||||||
// Update Artifact Labels
|
// Update Artifact Labels
|
||||||
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
// (PUT /registry/{registry_ref}/artifact/{artifact}/labels)
|
||||||
UpdateArtifactLabels(ctx context.Context, request UpdateArtifactLabelsRequestObject) (UpdateArtifactLabelsResponseObject, error)
|
UpdateArtifactLabels(ctx context.Context, request UpdateArtifactLabelsRequestObject) (UpdateArtifactLabelsResponseObject, error)
|
||||||
|
@ -3172,6 +3409,9 @@ type StrictServerInterface interface {
|
||||||
// Get Artifact Summary
|
// Get Artifact Summary
|
||||||
// (GET /registry/{registry_ref}/artifact/{artifact}/summary)
|
// (GET /registry/{registry_ref}/artifact/{artifact}/summary)
|
||||||
GetArtifactSummary(ctx context.Context, request GetArtifactSummaryRequestObject) (GetArtifactSummaryResponseObject, error)
|
GetArtifactSummary(ctx context.Context, request GetArtifactSummaryRequestObject) (GetArtifactSummaryResponseObject, error)
|
||||||
|
// Delete an Artifact Version
|
||||||
|
// (DELETE /registry/{registry_ref}/artifact/{artifact}/version/{version})
|
||||||
|
DeleteArtifactVersion(ctx context.Context, request DeleteArtifactVersionRequestObject) (DeleteArtifactVersionResponseObject, error)
|
||||||
// Describe Docker Artifact Detail
|
// Describe Docker Artifact Detail
|
||||||
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
// (GET /registry/{registry_ref}/artifact/{artifact}/version/{version}/docker/details)
|
||||||
GetDockerArtifactDetails(ctx context.Context, request GetDockerArtifactDetailsRequestObject) (GetDockerArtifactDetailsResponseObject, error)
|
GetDockerArtifactDetails(ctx context.Context, request GetDockerArtifactDetailsRequestObject) (GetDockerArtifactDetailsResponseObject, error)
|
||||||
|
@ -3414,6 +3654,33 @@ func (sh *strictHandler) GetArtifactStatsForRegistry(w http.ResponseWriter, r *h
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteArtifact operation middleware
|
||||||
|
func (sh *strictHandler) DeleteArtifact(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
||||||
|
var request DeleteArtifactRequestObject
|
||||||
|
|
||||||
|
request.RegistryRef = registryRef
|
||||||
|
request.Artifact = artifact
|
||||||
|
|
||||||
|
handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) {
|
||||||
|
return sh.ssi.DeleteArtifact(ctx, request.(DeleteArtifactRequestObject))
|
||||||
|
}
|
||||||
|
for _, middleware := range sh.middlewares {
|
||||||
|
handler = middleware(handler, "DeleteArtifact")
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := handler(r.Context(), w, r, request)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||||
|
} else if validResponse, ok := response.(DeleteArtifactResponseObject); ok {
|
||||||
|
if err := validResponse.VisitDeleteArtifactResponse(w); err != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||||
|
}
|
||||||
|
} else if response != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateArtifactLabels operation middleware
|
// UpdateArtifactLabels operation middleware
|
||||||
func (sh *strictHandler) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
func (sh *strictHandler) UpdateArtifactLabels(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam) {
|
||||||
var request UpdateArtifactLabelsRequestObject
|
var request UpdateArtifactLabelsRequestObject
|
||||||
|
@ -3503,6 +3770,34 @@ func (sh *strictHandler) GetArtifactSummary(w http.ResponseWriter, r *http.Reque
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteArtifactVersion operation middleware
|
||||||
|
func (sh *strictHandler) DeleteArtifactVersion(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam) {
|
||||||
|
var request DeleteArtifactVersionRequestObject
|
||||||
|
|
||||||
|
request.RegistryRef = registryRef
|
||||||
|
request.Artifact = artifact
|
||||||
|
request.Version = version
|
||||||
|
|
||||||
|
handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) {
|
||||||
|
return sh.ssi.DeleteArtifactVersion(ctx, request.(DeleteArtifactVersionRequestObject))
|
||||||
|
}
|
||||||
|
for _, middleware := range sh.middlewares {
|
||||||
|
handler = middleware(handler, "DeleteArtifactVersion")
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := handler(r.Context(), w, r, request)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||||
|
} else if validResponse, ok := response.(DeleteArtifactVersionResponseObject); ok {
|
||||||
|
if err := validResponse.VisitDeleteArtifactVersionResponse(w); err != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||||
|
}
|
||||||
|
} else if response != nil {
|
||||||
|
sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetDockerArtifactDetails operation middleware
|
// GetDockerArtifactDetails operation middleware
|
||||||
func (sh *strictHandler) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams) {
|
func (sh *strictHandler) GetDockerArtifactDetails(w http.ResponseWriter, r *http.Request, registryRef RegistryRefPathParam, artifact ArtifactPathParam, version VersionPathParam, params GetDockerArtifactDetailsParams) {
|
||||||
var request GetDockerArtifactDetailsRequestObject
|
var request GetDockerArtifactDetailsRequestObject
|
||||||
|
@ -3868,70 +4163,71 @@ func (sh *strictHandler) GetAllRegistries(w http.ResponseWriter, r *http.Request
|
||||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||||
var swaggerSpec = []string{
|
var swaggerSpec = []string{
|
||||||
|
|
||||||
"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",
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSwagger returns the content of the embedded swagger specification file
|
// GetSwagger returns the content of the embedded swagger specification file
|
||||||
|
|
|
@ -131,6 +131,7 @@ type ManifestRepository interface {
|
||||||
ctx context.Context, repoID int64,
|
ctx context.Context, repoID int64,
|
||||||
digest types.Digest,
|
digest types.Digest,
|
||||||
) (types.Manifests, error)
|
) (types.Manifests, error)
|
||||||
|
DeleteManifestsByImageName(ctx context.Context, registryID int64, imageName string) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ManifestReferenceRepository interface {
|
type ManifestReferenceRepository interface {
|
||||||
|
@ -246,6 +247,8 @@ type TagRepository interface {
|
||||||
search string,
|
search string,
|
||||||
) (*[]types.TagMetadata, error)
|
) (*[]types.TagMetadata, error)
|
||||||
|
|
||||||
|
DeleteTag(ctx context.Context, registryID int64, imageName string, name string) (err error)
|
||||||
|
|
||||||
CountAllTagsByRepoAndImage(
|
CountAllTagsByRepoAndImage(
|
||||||
ctx context.Context, parentID int64, repoKey string,
|
ctx context.Context, parentID int64, repoKey string,
|
||||||
image string, search string,
|
image string, search string,
|
||||||
|
@ -418,6 +421,8 @@ type ImageRepository interface {
|
||||||
CreateOrUpdate(ctx context.Context, image *types.Image) error
|
CreateOrUpdate(ctx context.Context, image *types.Image) error
|
||||||
// Update an Artifact
|
// Update an Artifact
|
||||||
Update(ctx context.Context, artifact *types.Image) (err error)
|
Update(ctx context.Context, artifact *types.Image) (err error)
|
||||||
|
|
||||||
|
UpdateStatus(ctx context.Context, artifact *types.Image) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ArtifactRepository interface {
|
type ArtifactRepository interface {
|
||||||
|
|
|
@ -245,6 +245,36 @@ func (i ImageDao) Update(ctx context.Context, image *types.Image) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i ImageDao) UpdateStatus(ctx context.Context, image *types.Image) (err error) {
|
||||||
|
q := databaseg.Builder.Update("images").
|
||||||
|
Set("image_enabled", image.Enabled).
|
||||||
|
Set("image_updated_at", time.Now().UnixMilli()).
|
||||||
|
Where("image_registry_id = ? AND image_name = ?",
|
||||||
|
image.RegistryID, image.Name)
|
||||||
|
|
||||||
|
sql, args, err := q.ToSql()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return databaseg.ProcessSQLErrorf(ctx, err, "Failed to bind images object")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := i.db.ExecContext(ctx, sql, args...)
|
||||||
|
if err != nil {
|
||||||
|
return databaseg.ProcessSQLErrorf(ctx, err, "Failed to update images")
|
||||||
|
}
|
||||||
|
|
||||||
|
count, err := result.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return databaseg.ProcessSQLErrorf(ctx, err, "Failed to get number of updated rows")
|
||||||
|
}
|
||||||
|
|
||||||
|
if count == 0 {
|
||||||
|
return gitness_store.ErrVersionConflict
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (i ImageDao) mapToInternalImage(ctx context.Context, in *types.Image) *imageDB {
|
func (i ImageDao) mapToInternalImage(ctx context.Context, in *types.Image) *imageDB {
|
||||||
session, _ := request.AuthSessionFrom(ctx)
|
session, _ := request.AuthSessionFrom(ctx)
|
||||||
|
|
||||||
|
|
|
@ -388,6 +388,27 @@ func (dao manifestDao) DeleteManifest(
|
||||||
return count == 1, nil
|
return count == 1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dao manifestDao) DeleteManifestsByImageName(ctx context.Context, registryID int64,
|
||||||
|
imageName string) (err error) {
|
||||||
|
stmt := database.Builder.Delete("manifests").
|
||||||
|
Where(
|
||||||
|
"manifest_registry_id = ? AND manifest_image_name = ?", registryID, imageName)
|
||||||
|
|
||||||
|
toSQL, args, err := stmt.ToSql()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to convert manifest query to sql: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
db := dbtx.GetAccessor(ctx, dao.sqlDB)
|
||||||
|
|
||||||
|
_, err = db.ExecContext(ctx, toSQL, args...)
|
||||||
|
if err != nil {
|
||||||
|
return database.ProcessSQLErrorf(ctx, err, "the delete query failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (dao manifestDao) FindManifestByID(
|
func (dao manifestDao) FindManifestByID(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
registryID,
|
registryID,
|
||||||
|
|
|
@ -484,6 +484,24 @@ func (t tagDao) GetTagDetail(
|
||||||
return t.mapToTagDetail(ctx, dst)
|
return t.mapToTagDetail(ctx, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t tagDao) DeleteTag(ctx context.Context, registryID int64, imageName string, name string) (err error) {
|
||||||
|
stmt := databaseg.Builder.Delete("tags").
|
||||||
|
Where("tag_registry_id = ? AND tag_image_name = ? AND tag_name = ?", registryID, imageName, name)
|
||||||
|
|
||||||
|
sql, args, err := stmt.ToSql()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to convert purge tags query to sql: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
db := dbtx.GetAccessor(ctx, t.db)
|
||||||
|
|
||||||
|
_, err = db.ExecContext(ctx, sql, args...)
|
||||||
|
if err != nil {
|
||||||
|
return databaseg.ProcessSQLErrorf(ctx, err, "the delete query failed")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (t tagDao) GetLatestTagMetadata(
|
func (t tagDao) GetLatestTagMetadata(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
parentID int64,
|
parentID int64,
|
||||||
|
|
Loading…
Reference in New Issue