Skip to content

Commit ae9f89c

Browse files
authored
feat(secret_manager): add ListSecretTypes endpoint (scaleway#2118)
1 parent 9d524eb commit ae9f89c

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

api/secret/v1beta1/secret_sdk.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,47 @@ type GetSecretVersionRequest struct {
761761
Revision string `json:"-"`
762762
}
763763

764+
// ListSecretTypesRequest: list secret types request.
765+
type ListSecretTypesRequest struct {
766+
// Region: region to target. If none is passed will use default region from the config.
767+
Region scw.Region `json:"-"`
768+
769+
// ProjectID: ID of the Project to target.
770+
ProjectID string `json:"-"`
771+
772+
Page *int32 `json:"-"`
773+
774+
PageSize *uint32 `json:"-"`
775+
}
776+
777+
// ListSecretTypesResponse: list secret types response.
778+
type ListSecretTypesResponse struct {
779+
// Types: list of secret types.
780+
Types []SecretType `json:"types"`
781+
782+
// TotalCount: count of all secret types matching the requested criteria.
783+
TotalCount uint64 `json:"total_count"`
784+
}
785+
786+
// UnsafeGetTotalCount should not be used
787+
// Internal usage only
788+
func (r *ListSecretTypesResponse) UnsafeGetTotalCount() uint64 {
789+
return r.TotalCount
790+
}
791+
792+
// UnsafeAppend should not be used
793+
// Internal usage only
794+
func (r *ListSecretTypesResponse) UnsafeAppend(res interface{}) (uint64, error) {
795+
results, ok := res.(*ListSecretTypesResponse)
796+
if !ok {
797+
return 0, errors.New("%T type cannot be appended to type %T", res, r)
798+
}
799+
800+
r.Types = append(r.Types, results.Types...)
801+
r.TotalCount += uint64(len(results.Types))
802+
return uint64(len(results.Types)), nil
803+
}
804+
764805
// ListSecretVersionsRequest: list secret versions request.
765806
type ListSecretVersionsRequest struct {
766807
// Region: region to target. If none is passed will use default region from the config.
@@ -1703,3 +1744,46 @@ func (s *API) ListTags(req *ListTagsRequest, opts ...scw.RequestOption) (*ListTa
17031744
}
17041745
return &resp, nil
17051746
}
1747+
1748+
// ListSecretTypes: List all secret types created within a given Project.
1749+
func (s *API) ListSecretTypes(req *ListSecretTypesRequest, opts ...scw.RequestOption) (*ListSecretTypesResponse, error) {
1750+
var err error
1751+
1752+
if req.Region == "" {
1753+
defaultRegion, _ := s.client.GetDefaultRegion()
1754+
req.Region = defaultRegion
1755+
}
1756+
1757+
if req.ProjectID == "" {
1758+
defaultProjectID, _ := s.client.GetDefaultProjectID()
1759+
req.ProjectID = defaultProjectID
1760+
}
1761+
1762+
defaultPageSize, exist := s.client.GetDefaultPageSize()
1763+
if (req.PageSize == nil || *req.PageSize == 0) && exist {
1764+
req.PageSize = &defaultPageSize
1765+
}
1766+
1767+
query := url.Values{}
1768+
parameter.AddToQuery(query, "project_id", req.ProjectID)
1769+
parameter.AddToQuery(query, "page", req.Page)
1770+
parameter.AddToQuery(query, "page_size", req.PageSize)
1771+
1772+
if fmt.Sprint(req.Region) == "" {
1773+
return nil, errors.New("field Region cannot be empty in request")
1774+
}
1775+
1776+
scwReq := &scw.ScalewayRequest{
1777+
Method: "GET",
1778+
Path: "/secret-manager/v1beta1/regions/" + fmt.Sprint(req.Region) + "/secret-types",
1779+
Query: query,
1780+
}
1781+
1782+
var resp ListSecretTypesResponse
1783+
1784+
err = s.client.Do(scwReq, &resp, opts...)
1785+
if err != nil {
1786+
return nil, err
1787+
}
1788+
return &resp, nil
1789+
}

0 commit comments

Comments
 (0)