1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package armapimanagement 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 15 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 16 "net/http" 17 "net/url" 18 "strings" 19) 20 21// APIPolicyClient contains the methods for the APIPolicy group. 22// Don't use this type directly, use NewAPIPolicyClient() instead. 23type APIPolicyClient struct { 24 con *armcore.Connection 25 subscriptionID string 26} 27 28// NewAPIPolicyClient creates a new instance of APIPolicyClient with the specified values. 29func NewAPIPolicyClient(con *armcore.Connection, subscriptionID string) *APIPolicyClient { 30 return &APIPolicyClient{con: con, subscriptionID: subscriptionID} 31} 32 33// CreateOrUpdate - Creates or updates policy configuration for the API. 34// If the operation fails it returns the *ErrorResponse error type. 35func (client *APIPolicyClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, parameters PolicyContract, options *APIPolicyCreateOrUpdateOptions) (APIPolicyCreateOrUpdateResponse, error) { 36 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, serviceName, apiID, policyID, parameters, options) 37 if err != nil { 38 return APIPolicyCreateOrUpdateResponse{}, err 39 } 40 resp, err := client.con.Pipeline().Do(req) 41 if err != nil { 42 return APIPolicyCreateOrUpdateResponse{}, err 43 } 44 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 45 return APIPolicyCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp) 46 } 47 return client.createOrUpdateHandleResponse(resp) 48} 49 50// createOrUpdateCreateRequest creates the CreateOrUpdate request. 51func (client *APIPolicyClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, parameters PolicyContract, options *APIPolicyCreateOrUpdateOptions) (*azcore.Request, error) { 52 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies/{policyId}" 53 if resourceGroupName == "" { 54 return nil, errors.New("parameter resourceGroupName cannot be empty") 55 } 56 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 57 if serviceName == "" { 58 return nil, errors.New("parameter serviceName cannot be empty") 59 } 60 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 61 if apiID == "" { 62 return nil, errors.New("parameter apiID cannot be empty") 63 } 64 urlPath = strings.ReplaceAll(urlPath, "{apiId}", url.PathEscape(apiID)) 65 if policyID == "" { 66 return nil, errors.New("parameter policyID cannot be empty") 67 } 68 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 69 if client.subscriptionID == "" { 70 return nil, errors.New("parameter client.subscriptionID cannot be empty") 71 } 72 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 73 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 74 if err != nil { 75 return nil, err 76 } 77 req.Telemetry(telemetryInfo) 78 reqQP := req.URL.Query() 79 reqQP.Set("api-version", "2020-12-01") 80 req.URL.RawQuery = reqQP.Encode() 81 if options != nil && options.IfMatch != nil { 82 req.Header.Set("If-Match", *options.IfMatch) 83 } 84 req.Header.Set("Accept", "application/json") 85 return req, req.MarshalAsJSON(parameters) 86} 87 88// createOrUpdateHandleResponse handles the CreateOrUpdate response. 89func (client *APIPolicyClient) createOrUpdateHandleResponse(resp *azcore.Response) (APIPolicyCreateOrUpdateResponse, error) { 90 result := APIPolicyCreateOrUpdateResponse{RawResponse: resp.Response} 91 if val := resp.Header.Get("ETag"); val != "" { 92 result.ETag = &val 93 } 94 if err := resp.UnmarshalAsJSON(&result.PolicyContract); err != nil { 95 return APIPolicyCreateOrUpdateResponse{}, err 96 } 97 return result, nil 98} 99 100// createOrUpdateHandleError handles the CreateOrUpdate error response. 101func (client *APIPolicyClient) createOrUpdateHandleError(resp *azcore.Response) error { 102 body, err := resp.Payload() 103 if err != nil { 104 return azcore.NewResponseError(err, resp.Response) 105 } 106 errType := ErrorResponse{raw: string(body)} 107 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 108 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 109 } 110 return azcore.NewResponseError(&errType, resp.Response) 111} 112 113// Delete - Deletes the policy configuration at the Api. 114// If the operation fails it returns the *ErrorResponse error type. 115func (client *APIPolicyClient) Delete(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, ifMatch string, options *APIPolicyDeleteOptions) (APIPolicyDeleteResponse, error) { 116 req, err := client.deleteCreateRequest(ctx, resourceGroupName, serviceName, apiID, policyID, ifMatch, options) 117 if err != nil { 118 return APIPolicyDeleteResponse{}, err 119 } 120 resp, err := client.con.Pipeline().Do(req) 121 if err != nil { 122 return APIPolicyDeleteResponse{}, err 123 } 124 if !resp.HasStatusCode(http.StatusOK, http.StatusNoContent) { 125 return APIPolicyDeleteResponse{}, client.deleteHandleError(resp) 126 } 127 return APIPolicyDeleteResponse{RawResponse: resp.Response}, nil 128} 129 130// deleteCreateRequest creates the Delete request. 131func (client *APIPolicyClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, ifMatch string, options *APIPolicyDeleteOptions) (*azcore.Request, error) { 132 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies/{policyId}" 133 if resourceGroupName == "" { 134 return nil, errors.New("parameter resourceGroupName cannot be empty") 135 } 136 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 137 if serviceName == "" { 138 return nil, errors.New("parameter serviceName cannot be empty") 139 } 140 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 141 if apiID == "" { 142 return nil, errors.New("parameter apiID cannot be empty") 143 } 144 urlPath = strings.ReplaceAll(urlPath, "{apiId}", url.PathEscape(apiID)) 145 if policyID == "" { 146 return nil, errors.New("parameter policyID cannot be empty") 147 } 148 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 149 if client.subscriptionID == "" { 150 return nil, errors.New("parameter client.subscriptionID cannot be empty") 151 } 152 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 153 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 154 if err != nil { 155 return nil, err 156 } 157 req.Telemetry(telemetryInfo) 158 reqQP := req.URL.Query() 159 reqQP.Set("api-version", "2020-12-01") 160 req.URL.RawQuery = reqQP.Encode() 161 req.Header.Set("If-Match", ifMatch) 162 req.Header.Set("Accept", "application/json") 163 return req, nil 164} 165 166// deleteHandleError handles the Delete error response. 167func (client *APIPolicyClient) deleteHandleError(resp *azcore.Response) error { 168 body, err := resp.Payload() 169 if err != nil { 170 return azcore.NewResponseError(err, resp.Response) 171 } 172 errType := ErrorResponse{raw: string(body)} 173 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 174 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 175 } 176 return azcore.NewResponseError(&errType, resp.Response) 177} 178 179// Get - Get the policy configuration at the API level. 180// If the operation fails it returns one of the following error types. 181// - *ErrorResponse, *ErrorResponse 182func (client *APIPolicyClient) Get(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, options *APIPolicyGetOptions) (APIPolicyGetResponse, error) { 183 req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, apiID, policyID, options) 184 if err != nil { 185 return APIPolicyGetResponse{}, err 186 } 187 resp, err := client.con.Pipeline().Do(req) 188 if err != nil { 189 return APIPolicyGetResponse{}, err 190 } 191 if !resp.HasStatusCode(http.StatusOK, http.StatusOK) { 192 return APIPolicyGetResponse{}, client.getHandleError(resp) 193 } 194 return client.getHandleResponse(resp) 195} 196 197// getCreateRequest creates the Get request. 198func (client *APIPolicyClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, options *APIPolicyGetOptions) (*azcore.Request, error) { 199 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies/{policyId}" 200 if resourceGroupName == "" { 201 return nil, errors.New("parameter resourceGroupName cannot be empty") 202 } 203 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 204 if serviceName == "" { 205 return nil, errors.New("parameter serviceName cannot be empty") 206 } 207 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 208 if apiID == "" { 209 return nil, errors.New("parameter apiID cannot be empty") 210 } 211 urlPath = strings.ReplaceAll(urlPath, "{apiId}", url.PathEscape(apiID)) 212 if policyID == "" { 213 return nil, errors.New("parameter policyID cannot be empty") 214 } 215 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 216 if client.subscriptionID == "" { 217 return nil, errors.New("parameter client.subscriptionID cannot be empty") 218 } 219 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 220 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 221 if err != nil { 222 return nil, err 223 } 224 req.Telemetry(telemetryInfo) 225 reqQP := req.URL.Query() 226 if options != nil && options.Format != nil { 227 reqQP.Set("format", string(*options.Format)) 228 } 229 reqQP.Set("api-version", "2020-12-01") 230 req.URL.RawQuery = reqQP.Encode() 231 req.Header.Set("Accept", "application/json, application/vnd.ms-azure-apim.policy+xml, application/vnd.ms-azure-apim.policy.raw+xml") 232 return req, nil 233} 234 235// getHandleResponse handles the Get response. 236func (client *APIPolicyClient) getHandleResponse(resp *azcore.Response) (APIPolicyGetResponse, error) { 237 result := APIPolicyGetResponse{RawResponse: resp.Response} 238 if val := resp.Header.Get("ETag"); val != "" { 239 result.ETag = &val 240 } 241 if err := resp.UnmarshalAsJSON(&result.PolicyContract); err != nil { 242 return APIPolicyGetResponse{}, err 243 } 244 return result, nil 245} 246 247// getHandleError handles the Get error response. 248func (client *APIPolicyClient) getHandleError(resp *azcore.Response) error { 249 body, err := resp.Payload() 250 if err != nil { 251 return azcore.NewResponseError(err, resp.Response) 252 } 253 errType := ErrorResponse{raw: string(body)} 254 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 255 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 256 } 257 return azcore.NewResponseError(&errType, resp.Response) 258} 259 260// GetEntityTag - Gets the entity state (Etag) version of the API policy specified by its identifier. 261// If the operation fails it returns the *ErrorResponse error type. 262func (client *APIPolicyClient) GetEntityTag(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, options *APIPolicyGetEntityTagOptions) (APIPolicyGetEntityTagResponse, error) { 263 req, err := client.getEntityTagCreateRequest(ctx, resourceGroupName, serviceName, apiID, policyID, options) 264 if err != nil { 265 return APIPolicyGetEntityTagResponse{}, err 266 } 267 resp, err := client.con.Pipeline().Do(req) 268 if err != nil { 269 return APIPolicyGetEntityTagResponse{}, err 270 } 271 return client.getEntityTagHandleResponse(resp) 272} 273 274// getEntityTagCreateRequest creates the GetEntityTag request. 275func (client *APIPolicyClient) getEntityTagCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, apiID string, policyID PolicyIDName, options *APIPolicyGetEntityTagOptions) (*azcore.Request, error) { 276 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies/{policyId}" 277 if resourceGroupName == "" { 278 return nil, errors.New("parameter resourceGroupName cannot be empty") 279 } 280 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 281 if serviceName == "" { 282 return nil, errors.New("parameter serviceName cannot be empty") 283 } 284 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 285 if apiID == "" { 286 return nil, errors.New("parameter apiID cannot be empty") 287 } 288 urlPath = strings.ReplaceAll(urlPath, "{apiId}", url.PathEscape(apiID)) 289 if policyID == "" { 290 return nil, errors.New("parameter policyID cannot be empty") 291 } 292 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 293 if client.subscriptionID == "" { 294 return nil, errors.New("parameter client.subscriptionID cannot be empty") 295 } 296 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 297 req, err := azcore.NewRequest(ctx, http.MethodHead, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 298 if err != nil { 299 return nil, err 300 } 301 req.Telemetry(telemetryInfo) 302 reqQP := req.URL.Query() 303 reqQP.Set("api-version", "2020-12-01") 304 req.URL.RawQuery = reqQP.Encode() 305 req.Header.Set("Accept", "application/json") 306 return req, nil 307} 308 309// getEntityTagHandleResponse handles the GetEntityTag response. 310func (client *APIPolicyClient) getEntityTagHandleResponse(resp *azcore.Response) (APIPolicyGetEntityTagResponse, error) { 311 result := APIPolicyGetEntityTagResponse{RawResponse: resp.Response} 312 if val := resp.Header.Get("ETag"); val != "" { 313 result.ETag = &val 314 } 315 if resp.StatusCode >= 200 && resp.StatusCode < 300 { 316 result.Success = true 317 } 318 return result, nil 319} 320 321// ListByAPI - Get the policy configuration at the API level. 322// If the operation fails it returns the *ErrorResponse error type. 323func (client *APIPolicyClient) ListByAPI(ctx context.Context, resourceGroupName string, serviceName string, apiID string, options *APIPolicyListByAPIOptions) (APIPolicyListByAPIResponse, error) { 324 req, err := client.listByAPICreateRequest(ctx, resourceGroupName, serviceName, apiID, options) 325 if err != nil { 326 return APIPolicyListByAPIResponse{}, err 327 } 328 resp, err := client.con.Pipeline().Do(req) 329 if err != nil { 330 return APIPolicyListByAPIResponse{}, err 331 } 332 if !resp.HasStatusCode(http.StatusOK) { 333 return APIPolicyListByAPIResponse{}, client.listByAPIHandleError(resp) 334 } 335 return client.listByAPIHandleResponse(resp) 336} 337 338// listByAPICreateRequest creates the ListByAPI request. 339func (client *APIPolicyClient) listByAPICreateRequest(ctx context.Context, resourceGroupName string, serviceName string, apiID string, options *APIPolicyListByAPIOptions) (*azcore.Request, error) { 340 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies" 341 if resourceGroupName == "" { 342 return nil, errors.New("parameter resourceGroupName cannot be empty") 343 } 344 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 345 if serviceName == "" { 346 return nil, errors.New("parameter serviceName cannot be empty") 347 } 348 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 349 if apiID == "" { 350 return nil, errors.New("parameter apiID cannot be empty") 351 } 352 urlPath = strings.ReplaceAll(urlPath, "{apiId}", url.PathEscape(apiID)) 353 if client.subscriptionID == "" { 354 return nil, errors.New("parameter client.subscriptionID cannot be empty") 355 } 356 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 357 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 358 if err != nil { 359 return nil, err 360 } 361 req.Telemetry(telemetryInfo) 362 reqQP := req.URL.Query() 363 reqQP.Set("api-version", "2020-12-01") 364 req.URL.RawQuery = reqQP.Encode() 365 req.Header.Set("Accept", "application/json") 366 return req, nil 367} 368 369// listByAPIHandleResponse handles the ListByAPI response. 370func (client *APIPolicyClient) listByAPIHandleResponse(resp *azcore.Response) (APIPolicyListByAPIResponse, error) { 371 result := APIPolicyListByAPIResponse{RawResponse: resp.Response} 372 if err := resp.UnmarshalAsJSON(&result.PolicyCollection); err != nil { 373 return APIPolicyListByAPIResponse{}, err 374 } 375 return result, nil 376} 377 378// listByAPIHandleError handles the ListByAPI error response. 379func (client *APIPolicyClient) listByAPIHandleError(resp *azcore.Response) error { 380 body, err := resp.Payload() 381 if err != nil { 382 return azcore.NewResponseError(err, resp.Response) 383 } 384 errType := ErrorResponse{raw: string(body)} 385 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 386 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 387 } 388 return azcore.NewResponseError(&errType, resp.Response) 389} 390