diff --git a/internal/client/modules.go b/internal/client/modules.go new file mode 100644 index 000000000..c95f4c5c7 --- /dev/null +++ b/internal/client/modules.go @@ -0,0 +1,70 @@ +// Package client - modules contains functions for the modules API +// Copyright (C) 2020 by Red Hat, Inc. +package client + +import ( + "encoding/json" + "fmt" + "net/http" + // "strings" + + "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/weldr" +) + +// ListAllModulesV0 returns a list of all the available module names +func ListAllModulesV0(socket *http.Client) ([]weldr.ModuleName, *APIResponse, error) { + body, resp, err := GetJSONAll(socket, "/api/v0/modules/list") + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// ListSomeModulesV0 returns a list of all the available modules names +func ListSomeModulesV0(socket *http.Client, offset, limit int) ([]weldr.ModuleName, *APIResponse, error) { + path := fmt.Sprintf("/api/v0/modules/list?offset=%d&limit=%d", offset, limit) + body, resp, err := GetRaw(socket, "GET", path) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// ListModulesV0 returns a list of all the available modules names +func ListModulesV0(socket *http.Client, moduleNames string) ([]weldr.ModuleName, *APIResponse, error) { + body, resp, err := GetRaw(socket, "GET", "/api/v0/modules/list/"+moduleNames) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// GetModulesInfoV0 returns detailed module info on the named modules +func GetModulesInfoV0(socket *http.Client, modulesNames string) ([]rpmmd.PackageInfo, *APIResponse, error) { + body, resp, err := GetRaw(socket, "GET", "/api/v0/modules/info/"+modulesNames) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesInfoV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} diff --git a/internal/weldr/json.go b/internal/weldr/json.go index 20fa9a641..be81cce4c 100644 --- a/internal/weldr/json.go +++ b/internal/weldr/json.go @@ -140,6 +140,18 @@ type ProjectsDependenciesV0 struct { Projects []rpmmd.PackageSpec `json:"projects"` } +type ModuleName struct { + Name string `json:"name"` + GroupType string `json:"group_type"` +} + +type ModulesListV0 struct { + Total uint `json:"total"` + Offset uint `json:"offset"` + Limit uint `json:"limit"` + Modules []ModuleName `json:"modules"` +} + // ModulesInfoV0 is the response to /modules/info request type ModulesInfoV0 struct { Modules []rpmmd.PackageInfo `json:"modules"`