diff --git a/go.mod b/go.mod index 169209bcb..2233f911f 100644 --- a/go.mod +++ b/go.mod @@ -47,6 +47,7 @@ require ( github.com/osbuild/images v0.112.0 github.com/osbuild/osbuild-composer/pkg/splunk_logger v0.0.0-20240814102216-0239db53236d github.com/osbuild/pulp-client v0.1.0 + github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.2 github.com/segmentio/ksuid v1.0.4 github.com/sirupsen/logrus v1.9.3 @@ -201,7 +202,6 @@ require ( github.com/opencontainers/selinux v1.11.1 // indirect github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/proglottis/gpgme v0.1.3 // indirect diff --git a/internal/cloudapi/v2/handler.go b/internal/cloudapi/v2/handler.go index 4c700d506..b4cb6e899 100644 --- a/internal/cloudapi/v2/handler.go +++ b/internal/cloudapi/v2/handler.go @@ -1479,3 +1479,38 @@ func (h *apiHandlers) PostSearchPackages(ctx echo.Context) error { Packages: packageListToPackageDetails(packages), }) } + +// GetDistributionList returns the list of all supported distribution repositories +// It is arranged by distro name -> architecture -> image type +func (h *apiHandlers) GetDistributionList(ctx echo.Context) error { + distros := make(map[string]map[string]map[string][]rpmmd.RepoConfig) + distroNames := h.server.repos.ListDistros() + sort.Strings(distroNames) + for _, distroName := range distroNames { + distro := h.server.distros.GetDistro(distroName) + if distro == nil { + continue + } + + for _, archName := range distro.ListArches() { + arch, _ := distro.GetArch(archName) + for _, imageType := range arch.ListImageTypes() { + repos, err := h.server.repos.ReposByImageTypeName(distroName, archName, imageType) + if err != nil { + continue + } + + if _, ok := distros[distroName]; !ok { + distros[distroName] = make(map[string]map[string][]rpmmd.RepoConfig) + } + if _, ok := distros[distroName][archName]; !ok { + distros[distroName][archName] = make(map[string][]rpmmd.RepoConfig) + } + + distros[distroName][archName][imageType] = repos + } + } + } + + return ctx.JSON(http.StatusOK, distros) +} diff --git a/internal/cloudapi/v2/openapi.v2.gen.go b/internal/cloudapi/v2/openapi.v2.gen.go index f0d1e61d7..d8a2c4318 100644 --- a/internal/cloudapi/v2/openapi.v2.gen.go +++ b/internal/cloudapi/v2/openapi.v2.gen.go @@ -7,6 +7,7 @@ import ( "bytes" "compress/gzip" "encoding/base64" + "encoding/json" "fmt" "net/http" "net/url" @@ -16,6 +17,7 @@ import ( "github.com/deepmap/oapi-codegen/pkg/runtime" "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" + "github.com/pkg/errors" ) const ( @@ -696,6 +698,17 @@ type Directory struct { User *interface{} `json:"user,omitempty"` } +// DistributionList defines model for DistributionList. +type DistributionList struct { + // Distribution name + Map *DistributionList_Map `json:"map,omitempty"` +} + +// Distribution name +type DistributionList_Map struct { + AdditionalProperties map[string]interface{} `json:"-"` +} + // Error defines model for Error. type Error struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) @@ -1313,6 +1326,59 @@ type PostDepsolveBlueprintJSONRequestBody PostDepsolveBlueprintJSONBody // PostSearchPackagesJSONRequestBody defines body for PostSearchPackages for application/json ContentType. type PostSearchPackagesJSONRequestBody PostSearchPackagesJSONBody +// Getter for additional properties for DistributionList_Map. Returns the specified +// element and whether it was found +func (a DistributionList_Map) Get(fieldName string) (value interface{}, found bool) { + if a.AdditionalProperties != nil { + value, found = a.AdditionalProperties[fieldName] + } + return +} + +// Setter for additional properties for DistributionList_Map +func (a *DistributionList_Map) Set(fieldName string, value interface{}) { + if a.AdditionalProperties == nil { + a.AdditionalProperties = make(map[string]interface{}) + } + a.AdditionalProperties[fieldName] = value +} + +// Override default JSON handling for DistributionList_Map to handle AdditionalProperties +func (a *DistributionList_Map) UnmarshalJSON(b []byte) error { + object := make(map[string]json.RawMessage) + err := json.Unmarshal(b, &object) + if err != nil { + return err + } + + if len(object) != 0 { + a.AdditionalProperties = make(map[string]interface{}) + for fieldName, fieldBuf := range object { + var fieldVal interface{} + err := json.Unmarshal(fieldBuf, &fieldVal) + if err != nil { + return errors.Wrap(err, fmt.Sprintf("error unmarshaling field %s", fieldName)) + } + a.AdditionalProperties[fieldName] = fieldVal + } + } + return nil +} + +// Override default JSON handling for DistributionList_Map to handle AdditionalProperties +func (a DistributionList_Map) MarshalJSON() ([]byte, error) { + var err error + object := make(map[string]json.RawMessage) + + for fieldName, field := range a.AdditionalProperties { + object[fieldName], err = json.Marshal(field) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("error marshaling '%s'", fieldName)) + } + } + return json.Marshal(object) +} + // ServerInterface represents all server handlers. type ServerInterface interface { // The status of a cloned compose @@ -1345,6 +1411,9 @@ type ServerInterface interface { // Depsolve one or more blueprints // (POST /depsolve/blueprint) PostDepsolveBlueprint(ctx echo.Context) error + // Get all of the supported distribution repository details + // (GET /distributions) + GetDistributionList(ctx echo.Context) error // Get a list of all possible errors // (GET /errors) GetErrorList(ctx echo.Context, params GetErrorListParams) error @@ -1515,6 +1584,17 @@ func (w *ServerInterfaceWrapper) PostDepsolveBlueprint(ctx echo.Context) error { return err } +// GetDistributionList converts echo context to params. +func (w *ServerInterfaceWrapper) GetDistributionList(ctx echo.Context) error { + var err error + + ctx.Set(BearerScopes, []string{""}) + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.GetDistributionList(ctx) + return err +} + // GetErrorList converts echo context to params. func (w *ServerInterfaceWrapper) GetErrorList(ctx echo.Context) error { var err error @@ -1620,6 +1700,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL router.GET(baseURL+"/composes/:id/metadata", wrapper.GetComposeMetadata) router.GET(baseURL+"/composes/:id/sboms", wrapper.GetComposeSBOMs) router.POST(baseURL+"/depsolve/blueprint", wrapper.PostDepsolveBlueprint) + router.GET(baseURL+"/distributions", wrapper.GetDistributionList) router.GET(baseURL+"/errors", wrapper.GetErrorList) router.GET(baseURL+"/errors/:id", wrapper.GetError) router.GET(baseURL+"/openapi", wrapper.GetOpenapi) @@ -1630,202 +1711,204 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "TjjeAAA=", + "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", + "0o+Hmjf8w2nWjfP12/8PAAD//8sZBmaa4QAA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/internal/cloudapi/v2/openapi.v2.yml b/internal/cloudapi/v2/openapi.v2.yml index 9815434d8..a6d90f430 100644 --- a/internal/cloudapi/v2/openapi.v2.yml +++ b/internal/cloudapi/v2/openapi.v2.yml @@ -526,6 +526,27 @@ paths: schema: $ref: '#/components/schemas/Error' + /distributions: + get: + operationId: getDistributionList + summary: |- + Get all of the supported distribution repository details + security: + - Bearer: [] + responses: + '200': + description: Distribution repositories + content: + application/json: + schema: + $ref: '#/components/schemas/DistributionList' + '500': + description: Unexpected error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /errors/{id}: get: operationId: getError @@ -689,6 +710,25 @@ components: items: $ref: '#/components/schemas/ComposeStatus' + DistributionList: + properties: + map: + type: object + description: Distribution name + additionalProperties: + map: + type: object + description: Architecture name + additionalProperties: + map: + type: object + description: Image type name + additionalProperties: + type: array + description: Repository used for this distro:arch:image-type + items: + $ref: '#/components/schemas/BlueprintRepository' + ComposeStatus: allOf: - $ref: '#/components/schemas/ObjectReference'