1package apimanagement
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//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// UserClient is the client for the User methods of the Apimanagement service.
19type UserClient struct {
20	BaseClient
21}
22
23// NewUserClient creates an instance of the UserClient client.
24func NewUserClient() UserClient {
25	return UserClient{New()}
26}
27
28// CreateOrUpdate creates or Updates a user.
29// Parameters:
30// apimBaseURL - the management endpoint of the API Management service, for example
31// https://myapimservice.management.azure-api.net.
32// UID - user identifier. Must be unique in the current API Management service instance.
33// parameters - create or update parameters.
34func (client UserClient) CreateOrUpdate(ctx context.Context, apimBaseURL string, UID string, parameters UserCreateParameters) (result UserContract, err error) {
35	if tracing.IsEnabled() {
36		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.CreateOrUpdate")
37		defer func() {
38			sc := -1
39			if result.Response.Response != nil {
40				sc = result.Response.Response.StatusCode
41			}
42			tracing.EndSpan(ctx, sc, err)
43		}()
44	}
45	if err := validation.Validate([]validation.Validation{
46		{TargetValue: UID,
47			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
48				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
49				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}},
50		{TargetValue: parameters,
51			Constraints: []validation.Constraint{{Target: "parameters.Email", Name: validation.Null, Rule: true,
52				Chain: []validation.Constraint{{Target: "parameters.Email", Name: validation.MaxLength, Rule: 254, Chain: nil},
53					{Target: "parameters.Email", Name: validation.MinLength, Rule: 1, Chain: nil},
54				}},
55				{Target: "parameters.FirstName", Name: validation.Null, Rule: true,
56					Chain: []validation.Constraint{{Target: "parameters.FirstName", Name: validation.MaxLength, Rule: 100, Chain: nil},
57						{Target: "parameters.FirstName", Name: validation.MinLength, Rule: 1, Chain: nil},
58					}},
59				{Target: "parameters.LastName", Name: validation.Null, Rule: true,
60					Chain: []validation.Constraint{{Target: "parameters.LastName", Name: validation.MaxLength, Rule: 100, Chain: nil},
61						{Target: "parameters.LastName", Name: validation.MinLength, Rule: 1, Chain: nil},
62					}}}}}); err != nil {
63		return result, validation.NewError("apimanagement.UserClient", "CreateOrUpdate", err.Error())
64	}
65
66	req, err := client.CreateOrUpdatePreparer(ctx, apimBaseURL, UID, parameters)
67	if err != nil {
68		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "CreateOrUpdate", nil, "Failure preparing request")
69		return
70	}
71
72	resp, err := client.CreateOrUpdateSender(req)
73	if err != nil {
74		result.Response = autorest.Response{Response: resp}
75		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "CreateOrUpdate", resp, "Failure sending request")
76		return
77	}
78
79	result, err = client.CreateOrUpdateResponder(resp)
80	if err != nil {
81		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "CreateOrUpdate", resp, "Failure responding to request")
82		return
83	}
84
85	return
86}
87
88// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
89func (client UserClient) CreateOrUpdatePreparer(ctx context.Context, apimBaseURL string, UID string, parameters UserCreateParameters) (*http.Request, error) {
90	urlParameters := map[string]interface{}{
91		"apimBaseUrl": apimBaseURL,
92	}
93
94	pathParameters := map[string]interface{}{
95		"uid": autorest.Encode("path", UID),
96	}
97
98	const APIVersion = "2017-03-01"
99	queryParameters := map[string]interface{}{
100		"api-version": APIVersion,
101	}
102
103	preparer := autorest.CreatePreparer(
104		autorest.AsContentType("application/json; charset=utf-8"),
105		autorest.AsPut(),
106		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
107		autorest.WithPathParameters("/users/{uid}", pathParameters),
108		autorest.WithJSON(parameters),
109		autorest.WithQueryParameters(queryParameters))
110	return preparer.Prepare((&http.Request{}).WithContext(ctx))
111}
112
113// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
114// http.Response Body if it receives an error.
115func (client UserClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
116	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
117}
118
119// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
120// closes the http.Response Body.
121func (client UserClient) CreateOrUpdateResponder(resp *http.Response) (result UserContract, err error) {
122	err = autorest.Respond(
123		resp,
124		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
125		autorest.ByUnmarshallingJSON(&result),
126		autorest.ByClosing())
127	result.Response = autorest.Response{Response: resp}
128	return
129}
130
131// Delete deletes specific user.
132// Parameters:
133// apimBaseURL - the management endpoint of the API Management service, for example
134// https://myapimservice.management.azure-api.net.
135// UID - user identifier. Must be unique in the current API Management service instance.
136// ifMatch - the entity state (Etag) version of the user to delete. A value of "*" can be used for If-Match to
137// unconditionally apply the operation.
138// deleteSubscriptions - whether to delete user's subscription or not.
139// notify - send an Account Closed Email notification to the User.
140func (client UserClient) Delete(ctx context.Context, apimBaseURL string, UID string, ifMatch string, deleteSubscriptions string, notify string) (result autorest.Response, err error) {
141	if tracing.IsEnabled() {
142		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.Delete")
143		defer func() {
144			sc := -1
145			if result.Response != nil {
146				sc = result.Response.StatusCode
147			}
148			tracing.EndSpan(ctx, sc, err)
149		}()
150	}
151	if err := validation.Validate([]validation.Validation{
152		{TargetValue: UID,
153			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
154				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
155				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}}}); err != nil {
156		return result, validation.NewError("apimanagement.UserClient", "Delete", err.Error())
157	}
158
159	req, err := client.DeletePreparer(ctx, apimBaseURL, UID, ifMatch, deleteSubscriptions, notify)
160	if err != nil {
161		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Delete", nil, "Failure preparing request")
162		return
163	}
164
165	resp, err := client.DeleteSender(req)
166	if err != nil {
167		result.Response = resp
168		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Delete", resp, "Failure sending request")
169		return
170	}
171
172	result, err = client.DeleteResponder(resp)
173	if err != nil {
174		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Delete", resp, "Failure responding to request")
175		return
176	}
177
178	return
179}
180
181// DeletePreparer prepares the Delete request.
182func (client UserClient) DeletePreparer(ctx context.Context, apimBaseURL string, UID string, ifMatch string, deleteSubscriptions string, notify string) (*http.Request, error) {
183	urlParameters := map[string]interface{}{
184		"apimBaseUrl": apimBaseURL,
185	}
186
187	pathParameters := map[string]interface{}{
188		"uid": autorest.Encode("path", UID),
189	}
190
191	const APIVersion = "2017-03-01"
192	queryParameters := map[string]interface{}{
193		"api-version": APIVersion,
194	}
195	if len(string(deleteSubscriptions)) > 0 {
196		queryParameters["deleteSubscriptions"] = autorest.Encode("query", deleteSubscriptions)
197	} else {
198		queryParameters["deleteSubscriptions"] = autorest.Encode("query", "False")
199	}
200	if len(string(notify)) > 0 {
201		queryParameters["notify"] = autorest.Encode("query", notify)
202	} else {
203		queryParameters["notify"] = autorest.Encode("query", "False")
204	}
205
206	preparer := autorest.CreatePreparer(
207		autorest.AsDelete(),
208		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
209		autorest.WithPathParameters("/users/{uid}", pathParameters),
210		autorest.WithQueryParameters(queryParameters),
211		autorest.WithHeader("If-Match", autorest.String(ifMatch)))
212	return preparer.Prepare((&http.Request{}).WithContext(ctx))
213}
214
215// DeleteSender sends the Delete request. The method will close the
216// http.Response Body if it receives an error.
217func (client UserClient) DeleteSender(req *http.Request) (*http.Response, error) {
218	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
219}
220
221// DeleteResponder handles the response to the Delete request. The method always
222// closes the http.Response Body.
223func (client UserClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
224	err = autorest.Respond(
225		resp,
226		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
227		autorest.ByClosing())
228	result.Response = resp
229	return
230}
231
232// GenerateSsoURL retrieves a redirection URL containing an authentication token for signing a given user into the
233// developer portal.
234// Parameters:
235// apimBaseURL - the management endpoint of the API Management service, for example
236// https://myapimservice.management.azure-api.net.
237// UID - user identifier. Must be unique in the current API Management service instance.
238func (client UserClient) GenerateSsoURL(ctx context.Context, apimBaseURL string, UID string) (result GenerateSsoURLResult, err error) {
239	if tracing.IsEnabled() {
240		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.GenerateSsoURL")
241		defer func() {
242			sc := -1
243			if result.Response.Response != nil {
244				sc = result.Response.Response.StatusCode
245			}
246			tracing.EndSpan(ctx, sc, err)
247		}()
248	}
249	if err := validation.Validate([]validation.Validation{
250		{TargetValue: UID,
251			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
252				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
253				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}}}); err != nil {
254		return result, validation.NewError("apimanagement.UserClient", "GenerateSsoURL", err.Error())
255	}
256
257	req, err := client.GenerateSsoURLPreparer(ctx, apimBaseURL, UID)
258	if err != nil {
259		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GenerateSsoURL", nil, "Failure preparing request")
260		return
261	}
262
263	resp, err := client.GenerateSsoURLSender(req)
264	if err != nil {
265		result.Response = autorest.Response{Response: resp}
266		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GenerateSsoURL", resp, "Failure sending request")
267		return
268	}
269
270	result, err = client.GenerateSsoURLResponder(resp)
271	if err != nil {
272		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GenerateSsoURL", resp, "Failure responding to request")
273		return
274	}
275
276	return
277}
278
279// GenerateSsoURLPreparer prepares the GenerateSsoURL request.
280func (client UserClient) GenerateSsoURLPreparer(ctx context.Context, apimBaseURL string, UID string) (*http.Request, error) {
281	urlParameters := map[string]interface{}{
282		"apimBaseUrl": apimBaseURL,
283	}
284
285	pathParameters := map[string]interface{}{
286		"uid": autorest.Encode("path", UID),
287	}
288
289	const APIVersion = "2017-03-01"
290	queryParameters := map[string]interface{}{
291		"api-version": APIVersion,
292	}
293
294	preparer := autorest.CreatePreparer(
295		autorest.AsPost(),
296		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
297		autorest.WithPathParameters("/users/{uid}/generateSsoUrl", pathParameters),
298		autorest.WithQueryParameters(queryParameters))
299	return preparer.Prepare((&http.Request{}).WithContext(ctx))
300}
301
302// GenerateSsoURLSender sends the GenerateSsoURL request. The method will close the
303// http.Response Body if it receives an error.
304func (client UserClient) GenerateSsoURLSender(req *http.Request) (*http.Response, error) {
305	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
306}
307
308// GenerateSsoURLResponder handles the response to the GenerateSsoURL request. The method always
309// closes the http.Response Body.
310func (client UserClient) GenerateSsoURLResponder(resp *http.Response) (result GenerateSsoURLResult, err error) {
311	err = autorest.Respond(
312		resp,
313		azure.WithErrorUnlessStatusCode(http.StatusOK),
314		autorest.ByUnmarshallingJSON(&result),
315		autorest.ByClosing())
316	result.Response = autorest.Response{Response: resp}
317	return
318}
319
320// Get gets the details of the user specified by its identifier.
321// Parameters:
322// apimBaseURL - the management endpoint of the API Management service, for example
323// https://myapimservice.management.azure-api.net.
324// UID - user identifier. Must be unique in the current API Management service instance.
325func (client UserClient) Get(ctx context.Context, apimBaseURL string, UID string) (result UserContract, err error) {
326	if tracing.IsEnabled() {
327		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.Get")
328		defer func() {
329			sc := -1
330			if result.Response.Response != nil {
331				sc = result.Response.Response.StatusCode
332			}
333			tracing.EndSpan(ctx, sc, err)
334		}()
335	}
336	if err := validation.Validate([]validation.Validation{
337		{TargetValue: UID,
338			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
339				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
340				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}}}); err != nil {
341		return result, validation.NewError("apimanagement.UserClient", "Get", err.Error())
342	}
343
344	req, err := client.GetPreparer(ctx, apimBaseURL, UID)
345	if err != nil {
346		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Get", nil, "Failure preparing request")
347		return
348	}
349
350	resp, err := client.GetSender(req)
351	if err != nil {
352		result.Response = autorest.Response{Response: resp}
353		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Get", resp, "Failure sending request")
354		return
355	}
356
357	result, err = client.GetResponder(resp)
358	if err != nil {
359		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Get", resp, "Failure responding to request")
360		return
361	}
362
363	return
364}
365
366// GetPreparer prepares the Get request.
367func (client UserClient) GetPreparer(ctx context.Context, apimBaseURL string, UID string) (*http.Request, error) {
368	urlParameters := map[string]interface{}{
369		"apimBaseUrl": apimBaseURL,
370	}
371
372	pathParameters := map[string]interface{}{
373		"uid": autorest.Encode("path", UID),
374	}
375
376	const APIVersion = "2017-03-01"
377	queryParameters := map[string]interface{}{
378		"api-version": APIVersion,
379	}
380
381	preparer := autorest.CreatePreparer(
382		autorest.AsGet(),
383		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
384		autorest.WithPathParameters("/users/{uid}", pathParameters),
385		autorest.WithQueryParameters(queryParameters))
386	return preparer.Prepare((&http.Request{}).WithContext(ctx))
387}
388
389// GetSender sends the Get request. The method will close the
390// http.Response Body if it receives an error.
391func (client UserClient) GetSender(req *http.Request) (*http.Response, error) {
392	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
393}
394
395// GetResponder handles the response to the Get request. The method always
396// closes the http.Response Body.
397func (client UserClient) GetResponder(resp *http.Response) (result UserContract, err error) {
398	err = autorest.Respond(
399		resp,
400		azure.WithErrorUnlessStatusCode(http.StatusOK),
401		autorest.ByUnmarshallingJSON(&result),
402		autorest.ByClosing())
403	result.Response = autorest.Response{Response: resp}
404	return
405}
406
407// GetSharedAccessToken gets the Shared Access Authorization Token for the User.
408// Parameters:
409// apimBaseURL - the management endpoint of the API Management service, for example
410// https://myapimservice.management.azure-api.net.
411// UID - user identifier. Must be unique in the current API Management service instance.
412// parameters - create Authorization Token parameters.
413func (client UserClient) GetSharedAccessToken(ctx context.Context, apimBaseURL string, UID string, parameters UserTokenParameters) (result UserTokenResult, err error) {
414	if tracing.IsEnabled() {
415		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.GetSharedAccessToken")
416		defer func() {
417			sc := -1
418			if result.Response.Response != nil {
419				sc = result.Response.Response.StatusCode
420			}
421			tracing.EndSpan(ctx, sc, err)
422		}()
423	}
424	if err := validation.Validate([]validation.Validation{
425		{TargetValue: UID,
426			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
427				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
428				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}},
429		{TargetValue: parameters,
430			Constraints: []validation.Constraint{{Target: "parameters.Expiry", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
431		return result, validation.NewError("apimanagement.UserClient", "GetSharedAccessToken", err.Error())
432	}
433
434	req, err := client.GetSharedAccessTokenPreparer(ctx, apimBaseURL, UID, parameters)
435	if err != nil {
436		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GetSharedAccessToken", nil, "Failure preparing request")
437		return
438	}
439
440	resp, err := client.GetSharedAccessTokenSender(req)
441	if err != nil {
442		result.Response = autorest.Response{Response: resp}
443		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GetSharedAccessToken", resp, "Failure sending request")
444		return
445	}
446
447	result, err = client.GetSharedAccessTokenResponder(resp)
448	if err != nil {
449		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "GetSharedAccessToken", resp, "Failure responding to request")
450		return
451	}
452
453	return
454}
455
456// GetSharedAccessTokenPreparer prepares the GetSharedAccessToken request.
457func (client UserClient) GetSharedAccessTokenPreparer(ctx context.Context, apimBaseURL string, UID string, parameters UserTokenParameters) (*http.Request, error) {
458	urlParameters := map[string]interface{}{
459		"apimBaseUrl": apimBaseURL,
460	}
461
462	pathParameters := map[string]interface{}{
463		"uid": autorest.Encode("path", UID),
464	}
465
466	const APIVersion = "2017-03-01"
467	queryParameters := map[string]interface{}{
468		"api-version": APIVersion,
469	}
470
471	preparer := autorest.CreatePreparer(
472		autorest.AsContentType("application/json; charset=utf-8"),
473		autorest.AsPost(),
474		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
475		autorest.WithPathParameters("/users/{uid}/token", pathParameters),
476		autorest.WithJSON(parameters),
477		autorest.WithQueryParameters(queryParameters))
478	return preparer.Prepare((&http.Request{}).WithContext(ctx))
479}
480
481// GetSharedAccessTokenSender sends the GetSharedAccessToken request. The method will close the
482// http.Response Body if it receives an error.
483func (client UserClient) GetSharedAccessTokenSender(req *http.Request) (*http.Response, error) {
484	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
485}
486
487// GetSharedAccessTokenResponder handles the response to the GetSharedAccessToken request. The method always
488// closes the http.Response Body.
489func (client UserClient) GetSharedAccessTokenResponder(resp *http.Response) (result UserTokenResult, err error) {
490	err = autorest.Respond(
491		resp,
492		azure.WithErrorUnlessStatusCode(http.StatusOK),
493		autorest.ByUnmarshallingJSON(&result),
494		autorest.ByClosing())
495	result.Response = autorest.Response{Response: resp}
496	return
497}
498
499// List lists a collection of registered users in the specified service instance.
500// Parameters:
501// apimBaseURL - the management endpoint of the API Management service, for example
502// https://myapimservice.management.azure-api.net.
503// filter - | Field            | Supported operators    | Supported functions               |
504// |------------------|------------------------|-----------------------------------|
505// | id               | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith |
506// | firstName        | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith |
507// | lastName         | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith |
508// | email            | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith |
509// | state            | eq                     | N/A                               |
510// | registrationDate | ge, le, eq, ne, gt, lt | N/A                               |
511// | note             | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith |
512// top - number of records to return.
513// skip - number of records to skip.
514func (client UserClient) List(ctx context.Context, apimBaseURL string, filter string, top *int32, skip *int32) (result UserCollectionPage, err error) {
515	if tracing.IsEnabled() {
516		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.List")
517		defer func() {
518			sc := -1
519			if result.uc.Response.Response != nil {
520				sc = result.uc.Response.Response.StatusCode
521			}
522			tracing.EndSpan(ctx, sc, err)
523		}()
524	}
525	if err := validation.Validate([]validation.Validation{
526		{TargetValue: top,
527			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
528				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
529		{TargetValue: skip,
530			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
531				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
532		return result, validation.NewError("apimanagement.UserClient", "List", err.Error())
533	}
534
535	result.fn = client.listNextResults
536	req, err := client.ListPreparer(ctx, apimBaseURL, filter, top, skip)
537	if err != nil {
538		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "List", nil, "Failure preparing request")
539		return
540	}
541
542	resp, err := client.ListSender(req)
543	if err != nil {
544		result.uc.Response = autorest.Response{Response: resp}
545		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "List", resp, "Failure sending request")
546		return
547	}
548
549	result.uc, err = client.ListResponder(resp)
550	if err != nil {
551		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "List", resp, "Failure responding to request")
552		return
553	}
554	if result.uc.hasNextLink() && result.uc.IsEmpty() {
555		err = result.NextWithContext(ctx)
556		return
557	}
558
559	return
560}
561
562// ListPreparer prepares the List request.
563func (client UserClient) ListPreparer(ctx context.Context, apimBaseURL string, filter string, top *int32, skip *int32) (*http.Request, error) {
564	urlParameters := map[string]interface{}{
565		"apimBaseUrl": apimBaseURL,
566	}
567
568	const APIVersion = "2017-03-01"
569	queryParameters := map[string]interface{}{
570		"api-version": APIVersion,
571	}
572	if len(filter) > 0 {
573		queryParameters["$filter"] = autorest.Encode("query", filter)
574	}
575	if top != nil {
576		queryParameters["$top"] = autorest.Encode("query", *top)
577	}
578	if skip != nil {
579		queryParameters["$skip"] = autorest.Encode("query", *skip)
580	}
581
582	preparer := autorest.CreatePreparer(
583		autorest.AsGet(),
584		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
585		autorest.WithPath("/users"),
586		autorest.WithQueryParameters(queryParameters))
587	return preparer.Prepare((&http.Request{}).WithContext(ctx))
588}
589
590// ListSender sends the List request. The method will close the
591// http.Response Body if it receives an error.
592func (client UserClient) ListSender(req *http.Request) (*http.Response, error) {
593	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
594}
595
596// ListResponder handles the response to the List request. The method always
597// closes the http.Response Body.
598func (client UserClient) ListResponder(resp *http.Response) (result UserCollection, err error) {
599	err = autorest.Respond(
600		resp,
601		azure.WithErrorUnlessStatusCode(http.StatusOK),
602		autorest.ByUnmarshallingJSON(&result),
603		autorest.ByClosing())
604	result.Response = autorest.Response{Response: resp}
605	return
606}
607
608// listNextResults retrieves the next set of results, if any.
609func (client UserClient) listNextResults(ctx context.Context, lastResults UserCollection) (result UserCollection, err error) {
610	req, err := lastResults.userCollectionPreparer(ctx)
611	if err != nil {
612		return result, autorest.NewErrorWithError(err, "apimanagement.UserClient", "listNextResults", nil, "Failure preparing next results request")
613	}
614	if req == nil {
615		return
616	}
617	resp, err := client.ListSender(req)
618	if err != nil {
619		result.Response = autorest.Response{Response: resp}
620		return result, autorest.NewErrorWithError(err, "apimanagement.UserClient", "listNextResults", resp, "Failure sending next results request")
621	}
622	result, err = client.ListResponder(resp)
623	if err != nil {
624		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "listNextResults", resp, "Failure responding to next results request")
625	}
626	return
627}
628
629// ListComplete enumerates all values, automatically crossing page boundaries as required.
630func (client UserClient) ListComplete(ctx context.Context, apimBaseURL string, filter string, top *int32, skip *int32) (result UserCollectionIterator, err error) {
631	if tracing.IsEnabled() {
632		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.List")
633		defer func() {
634			sc := -1
635			if result.Response().Response.Response != nil {
636				sc = result.page.Response().Response.Response.StatusCode
637			}
638			tracing.EndSpan(ctx, sc, err)
639		}()
640	}
641	result.page, err = client.List(ctx, apimBaseURL, filter, top, skip)
642	return
643}
644
645// Update updates the details of the user specified by its identifier.
646// Parameters:
647// apimBaseURL - the management endpoint of the API Management service, for example
648// https://myapimservice.management.azure-api.net.
649// UID - user identifier. Must be unique in the current API Management service instance.
650// parameters - update parameters.
651// ifMatch - the entity state (Etag) version of the user to update. A value of "*" can be used for If-Match to
652// unconditionally apply the operation.
653func (client UserClient) Update(ctx context.Context, apimBaseURL string, UID string, parameters UserUpdateParameters, ifMatch string) (result autorest.Response, err error) {
654	if tracing.IsEnabled() {
655		ctx = tracing.StartSpan(ctx, fqdn+"/UserClient.Update")
656		defer func() {
657			sc := -1
658			if result.Response != nil {
659				sc = result.Response.StatusCode
660			}
661			tracing.EndSpan(ctx, sc, err)
662		}()
663	}
664	if err := validation.Validate([]validation.Validation{
665		{TargetValue: UID,
666			Constraints: []validation.Constraint{{Target: "UID", Name: validation.MaxLength, Rule: 256, Chain: nil},
667				{Target: "UID", Name: validation.MinLength, Rule: 1, Chain: nil},
668				{Target: "UID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}}}); err != nil {
669		return result, validation.NewError("apimanagement.UserClient", "Update", err.Error())
670	}
671
672	req, err := client.UpdatePreparer(ctx, apimBaseURL, UID, parameters, ifMatch)
673	if err != nil {
674		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Update", nil, "Failure preparing request")
675		return
676	}
677
678	resp, err := client.UpdateSender(req)
679	if err != nil {
680		result.Response = resp
681		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Update", resp, "Failure sending request")
682		return
683	}
684
685	result, err = client.UpdateResponder(resp)
686	if err != nil {
687		err = autorest.NewErrorWithError(err, "apimanagement.UserClient", "Update", resp, "Failure responding to request")
688		return
689	}
690
691	return
692}
693
694// UpdatePreparer prepares the Update request.
695func (client UserClient) UpdatePreparer(ctx context.Context, apimBaseURL string, UID string, parameters UserUpdateParameters, ifMatch string) (*http.Request, error) {
696	urlParameters := map[string]interface{}{
697		"apimBaseUrl": apimBaseURL,
698	}
699
700	pathParameters := map[string]interface{}{
701		"uid": autorest.Encode("path", UID),
702	}
703
704	const APIVersion = "2017-03-01"
705	queryParameters := map[string]interface{}{
706		"api-version": APIVersion,
707	}
708
709	preparer := autorest.CreatePreparer(
710		autorest.AsContentType("application/json; charset=utf-8"),
711		autorest.AsPatch(),
712		autorest.WithCustomBaseURL("{apimBaseUrl}", urlParameters),
713		autorest.WithPathParameters("/users/{uid}", pathParameters),
714		autorest.WithJSON(parameters),
715		autorest.WithQueryParameters(queryParameters),
716		autorest.WithHeader("If-Match", autorest.String(ifMatch)))
717	return preparer.Prepare((&http.Request{}).WithContext(ctx))
718}
719
720// UpdateSender sends the Update request. The method will close the
721// http.Response Body if it receives an error.
722func (client UserClient) UpdateSender(req *http.Request) (*http.Response, error) {
723	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
724}
725
726// UpdateResponder handles the response to the Update request. The method always
727// closes the http.Response Body.
728func (client UserClient) UpdateResponder(resp *http.Response) (result autorest.Response, err error) {
729	err = autorest.Respond(
730		resp,
731		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
732		autorest.ByClosing())
733	result.Response = resp
734	return
735}
736