drone/registry/app/api/controller/metadata/get_registries.go
Arvind Choudhary 479c9b9fe7 feat: [AH-307]: GC interface Integration, event framework; schema changes; UI changes (#2688)
* fix
* Merge branch 'main' into AH-307-plus-url-support-2_no_rbac
* resolve PR comments
* resolve PR comments
* resolve PR comments
* feat: [AH-346]: new api changes for version list and digest list (#2726)

* feat: [AH-346]: new api changes for version list and digest list
* resolve pr comments
* resolve pr comments
* feat: [AH-346]: new api yaml integration (#2716)

* feat: [AH-346]: new api yaml integration
* Merge branch 'main' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-307-plus-url-support-2_no_rbac
* fix wire check
* fix lint issues
* fix: [AH-357]: migrations
* changes for global artifact listing (#2708)

* changes for global artifact listing
* Merge branch 'main' into AH-307-plus-url-support-2_no_rbac
* merged main
* Merge branch 'main' into AH-307-plus-url-support-2_no_rbac
* [AH-307]: Updated lint
* fix comment
* add new method to spacestore
* feat: [AH-307]: fix after rebase with main
* [AH-307]: Removing comments
* [AH-307]: linting fixes
* feat: [AH-286]: define proto, interface and no-op reporter implementation to publish artifact events (#2657)

* feat: [AH-286]: publish artifact event - no row found is not error
* feat: [AH-286]: publish artifact event - no row found is not error
* feat: [AH-286]: publish artifact event - lint errors, move publishing event outside DB transaction
* feat: [AH-286]: publish artifact event - review comments
* feat: [AH-286]: publish artifact event - address review comments
* feat: [AH-286]: publish artifact event - keep payload generic
* feat: [AH-286]: publish artifact event - as sqlite locks DB, perform db operation outside goroutine publishing of events
* feat: [AH-286]: publish artifact event - make publishing event async
* feat: [AH-286]: publish artifact event - use api types
* feat: [AH-286]: Publish event for SSCA to trigger scans - no need to export spacePathStore
* feat: [AH-286]: Publish event for SSCA to trigger scans - send spacePath instead of parentID
* feat: [AH-286]: Publish event for SSCA to trigger scans - rename scanner as generic reporter
* feat: [AH-286]: Publish event for SSCA to trigger scans - rename scanner as generic reporter
* feat: [AH-286]: publish artifact event - reuse redis.Send()
* feat: [AH-286]: Publish event for SSCA to trigger scans - review comments
* feat: [AH-286]: Publish event for SSCA to trigger scans - remove unused interface
* feat: [AH-286]: Publish event for SSCA to trigger scans - update msg format
* feat: [AH-286]: define proto, interface and no-op reporter implementation to publish artifact events
* feat: [AH-286]: Publish event for SSCA to trigger scans - extract acctID/orgID/projectID from spacepathStore
* feat: [AH-286]: publish artifact event - remove protobuf reference, fix lint errors
* feat: [AH-286]: publish artifact event - fix msg format
* feat: [AH-286]: define proto, interface and no-op reporter implementation to publish artifact events
* feat: [AH-286]: define proto, interface and no-op reporter implementation to publish artifact events
* feat: [AH-321]: make repo form disabled for rbac (#2687)

* feat: [AH-321]: make repo form disabled for rbac
* fix wire-gen
* GC refactoring
* feat: [AH-340]: update UI as per the product feedbacks (#2685)

* feat: [AH-340]: update UI as per the product feedbacks
* feat: [AH-44]: add module data while redirecting to pipeline execution page
* feat: [AH-44]: add build pipeline details in overview cards
* feat: [AH-44]: update view for prod and non prod tag
* feat: [AH-44]: rearrange filters on artifact list apge
* feat: [AH-10]: add schema for overview cards, update artifact list, add ai search input, update api for registry artifact list and update mapping for deployments table
* feat: [AH-307]: add secretSpacePath in upstream password field while sending to BE (#2631)

* feat: [AH-307]: add secretSpacePath in upstream password field while sending to BE
* feat: [AH-299]: support new changes for artifact list page (#2630)

* feat: update har service api version
* feat: [AH-30]: integrate API schema for deployments list content
* feat: [AH-300]: update tag colors for prod and non prod tags
* feat: [AH-300]: Add Deployments table in artiface version details page
* feat: [AH-299]: support new changes for artifact list page
* feat: [AH-299]: support new changes for artifact list page
* feat: [AH-321]: support artifact registry rbac permission on UI (#2671)

* feat: [AH-321]: support artifact registry rbac permission on UI
* enable rbac (#2664)

* fix scope
* enable rbac
* feat: [AH-307]: hide code tab from version details page for both docker and helm
* feat: [AH-240]: add custom handling for enterprise auth type field
* Merge branch 'AH-307-plus-url-support-2_no_rbac' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-307-plus-url-support-2_no_rbac
* feat: [AH-307]: send space_ref in query param while creating registries
* lowercase rootRef
* [AH-307]: updated route
* [AH-307]: Added logs
* [AH-307]: Added logs
* feat: [AH-317]: add space_ref query param
* local
* Merge commit
* Merge commit
* Merge commit
* Added comments
* Revert changes
* Merge commit
* Merge branch 'main' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-307-plus-url-support-2
* Merge branch 'AH-306d' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-307-plus-url-support-2
* fix space path handling
* Merge branch 'main' of https://git0.harness.io/l7B_kbSEQD2wjrM7PShm5w/PROD/Harness_Commons/gitness into AH-307-plus-url-support-2
* Updated URLs to support slashes with + separator
* fix: [AH-306c]: fix anonymous flow
* fix: [AH-306c]: fix anonymous flow
* feat: [AH-307]: plus url support on UI

(cherry picked from commit 3fb6add3ce03498b6668b5f8f6d547e1acedaec4)
* [AH-307]: Added examples

(cherry picked from commit e83e41303da536f421be333be04aed09fbf75f5f)
* [AH-307]: Added Regex request rewrite support

(cherry picked from commit ed7b155256bdcd1134bc228b5705556a1233add6)
* fix: [AH-306c]: fix anonymous flow
2024-09-24 12:47:53 +00:00

189 lines
5.2 KiB
Go

// 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/registry/app/api/openapi/contracts/artifact"
"github.com/harness/gitness/registry/app/pkg/commons"
"github.com/harness/gitness/registry/app/store"
"github.com/harness/gitness/types/enum"
"github.com/gotidy/ptr"
)
func (c *APIController) GetAllRegistries(
ctx context.Context,
r artifact.GetAllRegistriesRequestObject,
) (artifact.GetAllRegistriesResponseObject, error) {
registryRequestParams := &RegistryRequestParams{
packageTypesParam: nil,
page: r.Params.Page,
size: r.Params.Size,
search: r.Params.SearchTerm,
resource: RepositoryResource,
parentRef: string(r.SpaceRef),
regRef: "",
labelsParam: nil,
sortOrder: r.Params.SortOrder,
sortField: r.Params.SortField,
registryIDsParam: nil,
}
regInfo, _ := c.GetRegistryRequestInfo(ctx, *registryRequestParams)
space, err := c.SpaceStore.FindByRef(ctx, regInfo.ParentRef)
if err != nil {
return artifact.GetAllRegistries400JSONResponse{
BadRequestJSONResponse: artifact.BadRequestJSONResponse(
*GetErrorResponse(http.StatusBadRequest, err.Error()),
),
}, nil
}
session, _ := request.AuthSessionFrom(ctx)
if err = apiauth.CheckSpaceScope(
ctx,
c.Authorizer,
session,
space,
enum.ResourceTypeRegistry,
enum.PermissionRegistryView,
); err != nil {
return artifact.GetAllRegistries403JSONResponse{
UnauthorizedJSONResponse: artifact.UnauthorizedJSONResponse(
*GetErrorResponse(http.StatusForbidden, err.Error()),
),
}, nil
}
var repos *[]store.RegistryMetadata
repoType := ""
if r.Params.Type != nil {
repoType = string(*r.Params.Type)
}
e := ValidatePackageTypes(regInfo.packageTypes)
if e != nil {
return nil, e
}
e = ValidateRepoType(repoType)
if e != nil {
return nil, e
}
var count int64
repos, err = c.RegistryRepository.GetAll(
ctx,
regInfo.parentID,
regInfo.packageTypes,
regInfo.sortByField,
regInfo.sortByOrder,
regInfo.limit,
regInfo.offset,
regInfo.searchTerm,
repoType,
)
count, _ = c.RegistryRepository.CountAll(
ctx,
regInfo.parentID,
regInfo.packageTypes,
regInfo.searchTerm,
repoType,
)
if err != nil {
return artifact.GetAllRegistries500JSONResponse{
InternalServerErrorJSONResponse: artifact.InternalServerErrorJSONResponse(
*GetErrorResponse(http.StatusInternalServerError, err.Error()),
),
}, nil
}
return artifact.GetAllRegistries200JSONResponse{
ListRegistryResponseJSONResponse: *GetAllRegistryResponse(
repos, count, regInfo.pageNumber,
regInfo.limit, regInfo.RootIdentifier, c.URLProvider.RegistryURL(),
),
}, nil
}
func GetAllRegistryResponse(
repos *[]store.RegistryMetadata,
count int64,
pageNumber int64,
pageSize int,
rootIdentifier string,
registryURL string,
) *artifact.ListRegistryResponseJSONResponse {
repoMetadataList := GetRegistryMetadata(repos, rootIdentifier, registryURL)
pageCount := GetPageCount(count, pageSize)
listRepository := &artifact.ListRegistry{
ItemCount: &count,
PageCount: &pageCount,
PageIndex: &pageNumber,
PageSize: &pageSize,
Registries: repoMetadataList,
}
response := &artifact.ListRegistryResponseJSONResponse{
Data: *listRepository,
Status: artifact.StatusSUCCESS,
}
return response
}
func GetRegistryMetadata(
registryMetadatas *[]store.RegistryMetadata,
rootIdentifier string,
registryURL string,
) []artifact.RegistryMetadata {
repoMetadataList := []artifact.RegistryMetadata{}
for _, reg := range *registryMetadatas {
modifiedAt := GetTimeInMs(reg.LastModified)
var labels *[]string
if !commons.IsEmpty(reg.Labels) {
temp := []string(reg.Labels)
labels = &temp
}
var description string
if !commons.IsEmpty(reg.Description) {
description = reg.Description
}
var artifactCount *int64
if reg.ArtifactCount != 0 {
artifactCount = ptr.Int64(reg.ArtifactCount)
}
var downloadCount *int64
if reg.DownloadCount != 0 {
downloadCount = ptr.Int64(reg.DownloadCount)
}
// fix: refactor it
size := GetSize(reg.Size)
repoMetadata := artifact.RegistryMetadata{
Identifier: reg.RegIdentifier,
Description: &description,
PackageType: reg.PackageType,
Type: reg.Type,
LastModified: &modifiedAt,
Url: GetRepoURL(rootIdentifier, reg.RegIdentifier, registryURL),
ArtifactsCount: artifactCount,
DownloadsCount: downloadCount,
RegistrySize: &size,
Labels: labels,
}
repoMetadataList = append(repoMetadataList, repoMetadata)
}
return repoMetadataList
}