From 0707ab56173001805a1dbf2211c7231399a21c68 Mon Sep 17 00:00:00 2001 From: SDK Generator Bot Date: Fri, 31 May 2024 12:28:45 +0000 Subject: [PATCH 1/4] Generate authorization --- services/authorization/api_default.go | 185 +++++++++++++++++++++ services/authorization/api_default_test.go | 52 ++++++ services/authorization/configuration.go | 4 +- 3 files changed, 239 insertions(+), 2 deletions(-) diff --git a/services/authorization/api_default.go b/services/authorization/api_default.go index 074f2c465..232fb09e6 100644 --- a/services/authorization/api_default.go +++ b/services/authorization/api_default.go @@ -17,6 +17,7 @@ import ( "io" "net/http" "net/url" + "reflect" "strings" "github.com/stackitcloud/stackit-sdk-go/core/config" @@ -832,6 +833,190 @@ func (a *APIClient) ListUserMembershipsExecute(ctx context.Context, email string return r.Execute() } +type ApiListUserPermissionsRequest struct { + ctx context.Context + apiService *DefaultApiService + email string + resource *string + resourceType *string + permissions *[]string +} + +func (r ApiListUserPermissionsRequest) Resource(resource string) ApiListUserPermissionsRequest { + r.resource = &resource + return r +} + +func (r ApiListUserPermissionsRequest) ResourceType(resourceType string) ApiListUserPermissionsRequest { + r.resourceType = &resourceType + return r +} + +func (r ApiListUserPermissionsRequest) Permissions(permissions []string) ApiListUserPermissionsRequest { + r.permissions = &permissions + return r +} + +func (r ApiListUserPermissionsRequest) Execute() (*ListUserPermissionsResponse, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ListUserPermissionsResponse + ) + a := r.apiService + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.ListUserPermissions") + if err != nil { + return localVarReturnValue, &oapierror.GenericOpenAPIError{ErrorMessage: err.Error()} + } + + localVarPath := localBasePath + "/v2/users/{email}/permissions" + localVarPath = strings.Replace(localVarPath, "{"+"email"+"}", url.PathEscape(ParameterValueToString(r.email, "email")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if r.resource != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "resource", r.resource, "") + } + if r.resourceType != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "resourceType", r.resourceType, "") + } + if r.permissions != nil { + t := *r.permissions + if reflect.TypeOf(t).Kind() == reflect.Slice { + s := reflect.ValueOf(t) + for i := 0; i < s.Len(); i++ { + parameterAddToHeaderOrQuery(localVarQueryParams, "permissions", s.Index(i).Interface(), "multi") + } + } else { + parameterAddToHeaderOrQuery(localVarQueryParams, "permissions", t, "multi") + } + } + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, err + } + + contextHTTPRequest, ok := r.ctx.Value(config.ContextHTTPRequest).(**http.Request) + if ok { + *contextHTTPRequest = req + } + + localVarHTTPResponse, err := a.client.callAPI(req) + contextHTTPResponse, ok := r.ctx.Value(config.ContextHTTPResponse).(**http.Response) + if ok { + *contextHTTPResponse = localVarHTTPResponse + } + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &oapierror.GenericOpenAPIError{ + StatusCode: localVarHTTPResponse.StatusCode, + Body: localVarBody, + ErrorMessage: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 400 { + var v ErrorResponse + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v ErrorResponse + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 403 { + var v ErrorResponse + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + } + return localVarReturnValue, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &oapierror.GenericOpenAPIError{ + StatusCode: localVarHTTPResponse.StatusCode, + Body: localVarBody, + ErrorMessage: err.Error(), + } + return localVarReturnValue, newErr + } + + return localVarReturnValue, nil +} + +/* +ListUserPermissions List permissions of a user + +List permissions of a user. An administrative access is needed to list any user's permissions, while the user can do it on his/her own email. Lists every resource of the given type where the user has any effective permissions. When requested, also lists why the permission is present. + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param email + @return ApiListUserPermissionsRequest +*/ +func (a *APIClient) ListUserPermissions(ctx context.Context, email string) ApiListUserPermissionsRequest { + return ApiListUserPermissionsRequest{ + apiService: a.defaultApi, + ctx: ctx, + email: email, + } +} + +func (a *APIClient) ListUserPermissionsExecute(ctx context.Context, email string) (*ListUserPermissionsResponse, error) { + r := ApiListUserPermissionsRequest{ + apiService: a.defaultApi, + ctx: ctx, + email: email, + } + return r.Execute() +} + type ApiRemoveMembersRequest struct { ctx context.Context apiService *DefaultApiService diff --git a/services/authorization/api_default_test.go b/services/authorization/api_default_test.go index cc5bd0db3..0c9e56faa 100644 --- a/services/authorization/api_default_test.go +++ b/services/authorization/api_default_test.go @@ -286,6 +286,58 @@ func Test_authorization_DefaultApiService(t *testing.T) { } }) + t.Run("Test DefaultApiService ListUserPermissions", func(t *testing.T) { + path := "/v2/users/{email}/permissions" + emailValue := "email" + path = strings.Replace(path, "{"+"email"+"}", url.PathEscape(ParameterValueToString(emailValue, "email")), -1) + + testDefaultApiServeMux := http.NewServeMux() + testDefaultApiServeMux.HandleFunc(path, func(w http.ResponseWriter, req *http.Request) { + data := ListUserPermissionsResponse{} + w.Header().Add("Content-Type", "application/json") + json.NewEncoder(w).Encode(data) + }) + testServer := httptest.NewServer(testDefaultApiServeMux) + defer testServer.Close() + + configuration := &config.Configuration{ + DefaultHeader: make(map[string]string), + UserAgent: "OpenAPI-Generator/1.0.0/go", + Debug: false, + Region: "test_region", + Servers: config.ServerConfigurations{ + { + URL: testServer.URL, + Description: "Localhost for authorization_DefaultApi", + Variables: map[string]config.ServerVariable{ + "region": { + DefaultValue: "test_region.", + EnumValues: []string{ + "test_region.", + }, + }, + }, + }, + }, + OperationServers: map[string]config.ServerConfigurations{}, + } + apiClient, err := NewAPIClient(config.WithCustomConfiguration(configuration), config.WithoutAuthentication()) + if err != nil { + t.Fatalf("creating API client: %v", err) + } + + email := "email" + + resp, reqErr := apiClient.ListUserPermissions(context.Background(), email).Execute() + + if reqErr != nil { + t.Fatalf("error in call: %v", reqErr) + } + if resp == nil { + t.Fatalf("response not present") + } + }) + t.Run("Test DefaultApiService RemoveMembers", func(t *testing.T) { path := "/v2/{resourceId}/members/remove" resourceIdValue := "resourceId" diff --git a/services/authorization/configuration.go b/services/authorization/configuration.go index 2fe0fca51..0b01a4f8d 100644 --- a/services/authorization/configuration.go +++ b/services/authorization/configuration.go @@ -22,12 +22,12 @@ func NewConfiguration() *config.Configuration { Debug: false, Servers: config.ServerConfigurations{ { - URL: "https://authorization.api.{region}stackit.cloud", + URL: "https://authorization.api.stackit.cloud", Description: "No description provided", Variables: map[string]config.ServerVariable{ "region": { Description: "No description provided", - DefaultValue: "", + DefaultValue: "global", }, }, }, From 34da15f62f29860fce80d836a1dfae4b23e89e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diogo=20Ferr=C3=A3o?= Date: Tue, 4 Jun 2024 09:29:44 +0100 Subject: [PATCH 2/4] update changelogs --- services/authorization/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/authorization/CHANGELOG.md b/services/authorization/CHANGELOG.md index 01699dc17..57cc29071 100644 --- a/services/authorization/CHANGELOG.md +++ b/services/authorization/CHANGELOG.md @@ -1,3 +1,8 @@ +## v0.4.0 (2024-06-04) + +- **Feature:** New method `ListUserPermissions` +- Cleanup Server configuration + ## v0.3.0 (2024-05-22) - **Feature:** `Role` has a new field `Id` From b9f81d1e34af94b62458eb929ea5d0646cecdf64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diogo=20Ferr=C3=A3o?= Date: Tue, 4 Jun 2024 09:38:17 +0100 Subject: [PATCH 3/4] update changelogs --- services/authorization/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/services/authorization/CHANGELOG.md b/services/authorization/CHANGELOG.md index 57cc29071..7d180d3a6 100644 --- a/services/authorization/CHANGELOG.md +++ b/services/authorization/CHANGELOG.md @@ -1,7 +1,6 @@ ## v0.4.0 (2024-06-04) - **Feature:** New method `ListUserPermissions` -- Cleanup Server configuration ## v0.3.0 (2024-05-22) From bc8f37921813c8db932d6e80230b43f073a71989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diogo=20Ferr=C3=A3o?= Date: Tue, 4 Jun 2024 10:01:38 +0100 Subject: [PATCH 4/4] update general changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2b10d345..a92cff09b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Release (2024-XX-XX) +- `authorization`: [v0.4.0](services/secretsmanager/CHANGELOG.md#v080-2024-06-04) + - **Feature:** New method `ListUserPermissions` - `secretsmanager`: [v0.8.0](services/secretsmanager/CHANGELOG.md#v080-2024-05-23) - **Breaking change**: Rename data types for uniformity - `Acl` is now `ACL`