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// PolicyClient contains the methods for the Policy group. 22// Don't use this type directly, use NewPolicyClient() instead. 23type PolicyClient struct { 24 con *armcore.Connection 25 subscriptionID string 26} 27 28// NewPolicyClient creates a new instance of PolicyClient with the specified values. 29func NewPolicyClient(con *armcore.Connection, subscriptionID string) *PolicyClient { 30 return &PolicyClient{con: con, subscriptionID: subscriptionID} 31} 32 33// CreateOrUpdate - Creates or updates the global policy configuration of the Api Management service. 34// If the operation fails it returns the *ErrorResponse error type. 35func (client *PolicyClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, parameters PolicyContract, options *PolicyCreateOrUpdateOptions) (PolicyCreateOrUpdateResponse, error) { 36 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, serviceName, policyID, parameters, options) 37 if err != nil { 38 return PolicyCreateOrUpdateResponse{}, err 39 } 40 resp, err := client.con.Pipeline().Do(req) 41 if err != nil { 42 return PolicyCreateOrUpdateResponse{}, err 43 } 44 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 45 return PolicyCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp) 46 } 47 return client.createOrUpdateHandleResponse(resp) 48} 49 50// createOrUpdateCreateRequest creates the CreateOrUpdate request. 51func (client *PolicyClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, parameters PolicyContract, options *PolicyCreateOrUpdateOptions) (*azcore.Request, error) { 52 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/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 policyID == "" { 62 return nil, errors.New("parameter policyID cannot be empty") 63 } 64 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 65 if client.subscriptionID == "" { 66 return nil, errors.New("parameter client.subscriptionID cannot be empty") 67 } 68 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 69 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 70 if err != nil { 71 return nil, err 72 } 73 req.Telemetry(telemetryInfo) 74 reqQP := req.URL.Query() 75 reqQP.Set("api-version", "2020-12-01") 76 req.URL.RawQuery = reqQP.Encode() 77 if options != nil && options.IfMatch != nil { 78 req.Header.Set("If-Match", *options.IfMatch) 79 } 80 req.Header.Set("Accept", "application/json") 81 return req, req.MarshalAsJSON(parameters) 82} 83 84// createOrUpdateHandleResponse handles the CreateOrUpdate response. 85func (client *PolicyClient) createOrUpdateHandleResponse(resp *azcore.Response) (PolicyCreateOrUpdateResponse, error) { 86 result := PolicyCreateOrUpdateResponse{RawResponse: resp.Response} 87 if val := resp.Header.Get("ETag"); val != "" { 88 result.ETag = &val 89 } 90 if err := resp.UnmarshalAsJSON(&result.PolicyContract); err != nil { 91 return PolicyCreateOrUpdateResponse{}, err 92 } 93 return result, nil 94} 95 96// createOrUpdateHandleError handles the CreateOrUpdate error response. 97func (client *PolicyClient) createOrUpdateHandleError(resp *azcore.Response) error { 98 body, err := resp.Payload() 99 if err != nil { 100 return azcore.NewResponseError(err, resp.Response) 101 } 102 errType := ErrorResponse{raw: string(body)} 103 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 104 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 105 } 106 return azcore.NewResponseError(&errType, resp.Response) 107} 108 109// Delete - Deletes the global policy configuration of the Api Management Service. 110// If the operation fails it returns the *ErrorResponse error type. 111func (client *PolicyClient) Delete(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, ifMatch string, options *PolicyDeleteOptions) (PolicyDeleteResponse, error) { 112 req, err := client.deleteCreateRequest(ctx, resourceGroupName, serviceName, policyID, ifMatch, options) 113 if err != nil { 114 return PolicyDeleteResponse{}, err 115 } 116 resp, err := client.con.Pipeline().Do(req) 117 if err != nil { 118 return PolicyDeleteResponse{}, err 119 } 120 if !resp.HasStatusCode(http.StatusOK, http.StatusNoContent) { 121 return PolicyDeleteResponse{}, client.deleteHandleError(resp) 122 } 123 return PolicyDeleteResponse{RawResponse: resp.Response}, nil 124} 125 126// deleteCreateRequest creates the Delete request. 127func (client *PolicyClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, ifMatch string, options *PolicyDeleteOptions) (*azcore.Request, error) { 128 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/policies/{policyId}" 129 if resourceGroupName == "" { 130 return nil, errors.New("parameter resourceGroupName cannot be empty") 131 } 132 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 133 if serviceName == "" { 134 return nil, errors.New("parameter serviceName cannot be empty") 135 } 136 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 137 if policyID == "" { 138 return nil, errors.New("parameter policyID cannot be empty") 139 } 140 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 141 if client.subscriptionID == "" { 142 return nil, errors.New("parameter client.subscriptionID cannot be empty") 143 } 144 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 145 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 146 if err != nil { 147 return nil, err 148 } 149 req.Telemetry(telemetryInfo) 150 reqQP := req.URL.Query() 151 reqQP.Set("api-version", "2020-12-01") 152 req.URL.RawQuery = reqQP.Encode() 153 req.Header.Set("If-Match", ifMatch) 154 req.Header.Set("Accept", "application/json") 155 return req, nil 156} 157 158// deleteHandleError handles the Delete error response. 159func (client *PolicyClient) deleteHandleError(resp *azcore.Response) error { 160 body, err := resp.Payload() 161 if err != nil { 162 return azcore.NewResponseError(err, resp.Response) 163 } 164 errType := ErrorResponse{raw: string(body)} 165 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 166 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 167 } 168 return azcore.NewResponseError(&errType, resp.Response) 169} 170 171// Get - Get the Global policy definition of the Api Management service. 172// If the operation fails it returns the *ErrorResponse error type. 173func (client *PolicyClient) Get(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, options *PolicyGetOptions) (PolicyGetResponse, error) { 174 req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, policyID, options) 175 if err != nil { 176 return PolicyGetResponse{}, err 177 } 178 resp, err := client.con.Pipeline().Do(req) 179 if err != nil { 180 return PolicyGetResponse{}, err 181 } 182 if !resp.HasStatusCode(http.StatusOK) { 183 return PolicyGetResponse{}, client.getHandleError(resp) 184 } 185 return client.getHandleResponse(resp) 186} 187 188// getCreateRequest creates the Get request. 189func (client *PolicyClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, options *PolicyGetOptions) (*azcore.Request, error) { 190 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/policies/{policyId}" 191 if resourceGroupName == "" { 192 return nil, errors.New("parameter resourceGroupName cannot be empty") 193 } 194 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 195 if serviceName == "" { 196 return nil, errors.New("parameter serviceName cannot be empty") 197 } 198 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 199 if policyID == "" { 200 return nil, errors.New("parameter policyID cannot be empty") 201 } 202 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 203 if client.subscriptionID == "" { 204 return nil, errors.New("parameter client.subscriptionID cannot be empty") 205 } 206 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 207 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 208 if err != nil { 209 return nil, err 210 } 211 req.Telemetry(telemetryInfo) 212 reqQP := req.URL.Query() 213 if options != nil && options.Format != nil { 214 reqQP.Set("format", string(*options.Format)) 215 } 216 reqQP.Set("api-version", "2020-12-01") 217 req.URL.RawQuery = reqQP.Encode() 218 req.Header.Set("Accept", "application/json") 219 return req, nil 220} 221 222// getHandleResponse handles the Get response. 223func (client *PolicyClient) getHandleResponse(resp *azcore.Response) (PolicyGetResponse, error) { 224 result := PolicyGetResponse{RawResponse: resp.Response} 225 if val := resp.Header.Get("ETag"); val != "" { 226 result.ETag = &val 227 } 228 if err := resp.UnmarshalAsJSON(&result.PolicyContract); err != nil { 229 return PolicyGetResponse{}, err 230 } 231 return result, nil 232} 233 234// getHandleError handles the Get error response. 235func (client *PolicyClient) getHandleError(resp *azcore.Response) error { 236 body, err := resp.Payload() 237 if err != nil { 238 return azcore.NewResponseError(err, resp.Response) 239 } 240 errType := ErrorResponse{raw: string(body)} 241 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 242 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 243 } 244 return azcore.NewResponseError(&errType, resp.Response) 245} 246 247// GetEntityTag - Gets the entity state (Etag) version of the Global policy definition in the Api Management service. 248// If the operation fails it returns the *ErrorResponse error type. 249func (client *PolicyClient) GetEntityTag(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, options *PolicyGetEntityTagOptions) (PolicyGetEntityTagResponse, error) { 250 req, err := client.getEntityTagCreateRequest(ctx, resourceGroupName, serviceName, policyID, options) 251 if err != nil { 252 return PolicyGetEntityTagResponse{}, err 253 } 254 resp, err := client.con.Pipeline().Do(req) 255 if err != nil { 256 return PolicyGetEntityTagResponse{}, err 257 } 258 return client.getEntityTagHandleResponse(resp) 259} 260 261// getEntityTagCreateRequest creates the GetEntityTag request. 262func (client *PolicyClient) getEntityTagCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, policyID PolicyIDName, options *PolicyGetEntityTagOptions) (*azcore.Request, error) { 263 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/policies/{policyId}" 264 if resourceGroupName == "" { 265 return nil, errors.New("parameter resourceGroupName cannot be empty") 266 } 267 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 268 if serviceName == "" { 269 return nil, errors.New("parameter serviceName cannot be empty") 270 } 271 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 272 if policyID == "" { 273 return nil, errors.New("parameter policyID cannot be empty") 274 } 275 urlPath = strings.ReplaceAll(urlPath, "{policyId}", url.PathEscape(string(policyID))) 276 if client.subscriptionID == "" { 277 return nil, errors.New("parameter client.subscriptionID cannot be empty") 278 } 279 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 280 req, err := azcore.NewRequest(ctx, http.MethodHead, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 281 if err != nil { 282 return nil, err 283 } 284 req.Telemetry(telemetryInfo) 285 reqQP := req.URL.Query() 286 reqQP.Set("api-version", "2020-12-01") 287 req.URL.RawQuery = reqQP.Encode() 288 req.Header.Set("Accept", "application/json") 289 return req, nil 290} 291 292// getEntityTagHandleResponse handles the GetEntityTag response. 293func (client *PolicyClient) getEntityTagHandleResponse(resp *azcore.Response) (PolicyGetEntityTagResponse, error) { 294 result := PolicyGetEntityTagResponse{RawResponse: resp.Response} 295 if val := resp.Header.Get("ETag"); val != "" { 296 result.ETag = &val 297 } 298 if resp.StatusCode >= 200 && resp.StatusCode < 300 { 299 result.Success = true 300 } 301 return result, nil 302} 303 304// ListByService - Lists all the Global Policy definitions of the Api Management service. 305// If the operation fails it returns the *ErrorResponse error type. 306func (client *PolicyClient) ListByService(ctx context.Context, resourceGroupName string, serviceName string, options *PolicyListByServiceOptions) (PolicyListByServiceResponse, error) { 307 req, err := client.listByServiceCreateRequest(ctx, resourceGroupName, serviceName, options) 308 if err != nil { 309 return PolicyListByServiceResponse{}, err 310 } 311 resp, err := client.con.Pipeline().Do(req) 312 if err != nil { 313 return PolicyListByServiceResponse{}, err 314 } 315 if !resp.HasStatusCode(http.StatusOK) { 316 return PolicyListByServiceResponse{}, client.listByServiceHandleError(resp) 317 } 318 return client.listByServiceHandleResponse(resp) 319} 320 321// listByServiceCreateRequest creates the ListByService request. 322func (client *PolicyClient) listByServiceCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, options *PolicyListByServiceOptions) (*azcore.Request, error) { 323 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/policies" 324 if resourceGroupName == "" { 325 return nil, errors.New("parameter resourceGroupName cannot be empty") 326 } 327 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 328 if serviceName == "" { 329 return nil, errors.New("parameter serviceName cannot be empty") 330 } 331 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 332 if client.subscriptionID == "" { 333 return nil, errors.New("parameter client.subscriptionID cannot be empty") 334 } 335 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 336 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 337 if err != nil { 338 return nil, err 339 } 340 req.Telemetry(telemetryInfo) 341 reqQP := req.URL.Query() 342 reqQP.Set("api-version", "2020-12-01") 343 req.URL.RawQuery = reqQP.Encode() 344 req.Header.Set("Accept", "application/json") 345 return req, nil 346} 347 348// listByServiceHandleResponse handles the ListByService response. 349func (client *PolicyClient) listByServiceHandleResponse(resp *azcore.Response) (PolicyListByServiceResponse, error) { 350 result := PolicyListByServiceResponse{RawResponse: resp.Response} 351 if err := resp.UnmarshalAsJSON(&result.PolicyCollection); err != nil { 352 return PolicyListByServiceResponse{}, err 353 } 354 return result, nil 355} 356 357// listByServiceHandleError handles the ListByService error response. 358func (client *PolicyClient) listByServiceHandleError(resp *azcore.Response) error { 359 body, err := resp.Payload() 360 if err != nil { 361 return azcore.NewResponseError(err, resp.Response) 362 } 363 errType := ErrorResponse{raw: string(body)} 364 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 365 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 366 } 367 return azcore.NewResponseError(&errType, resp.Response) 368} 369