public static async Task <EncompassApiClient> CreateFromClientCredentialsAsync(IClientParameters parameters, string instanceId, CancellationToken cancellationToken = default) { Preconditions.NotNull(parameters, nameof(parameters)); Preconditions.NotNullOrEmpty(instanceId, nameof(instanceId)); //TODO HttpClient Private Method setup var client = new EncompassApiClient(parameters, new EncompassApiService(new HttpClient(), parameters)); //removed token initialization return(client); }
/// <summary> /// Creates a client object from an existing access token. /// </summary> /// <param name="parameters">The parameters to initialize the client object with.</param> /// <param name="accessToken">The access token to use.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests. The default value is <see cref="CancellationToken.None"/>.</param> /// <returns></returns> public static async Task <EncompassApiClient> CreateFromAccessTokenAsync(IClientParameters parameters, string accessToken, CancellationToken cancellationToken = default) { throw new NotImplementedException(); Preconditions.NotNull(parameters, nameof(parameters)); Preconditions.NotNullOrEmpty(accessToken, nameof(accessToken)); //TODO HttpClient Private Method setup var client = new EncompassApiClient(parameters, new EncompassApiService(new HttpClient(), parameters)); //removed token initialization return(client); }
/// <summary> /// Creates a client object from user credentials. It does not automatically retrieve a new token when the current one expires so most of the time you'll probably want to use the CreateAsync method instead. /// </summary> /// <param name="parameters">The parameters to initialize the client object with.</param> /// <param name="instanceId">The encompass instance id.</param> /// <param name="userId">The encompass user id.</param> /// <param name="password">The encompass user password.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests. The default value is <see cref="CancellationToken.None"/>.</param> /// <returns></returns> public static async Task <EncompassApiClient> CreateFromUserCredentialsAsync(IClientParameters parameters, string instanceId, string userId, string password, CancellationToken cancellationToken = default) { Preconditions.NotNull(parameters, nameof(parameters)); Preconditions.NotNullOrEmpty(instanceId, nameof(instanceId)); Preconditions.NotNullOrEmpty(userId, nameof(userId)); Preconditions.NotNullOrEmpty(password, nameof(password)); var encompassTokenClientOptions = new EncompassTokenClientOptions { BaseUrl = parameters.BaseAddress, ClientId = parameters.ApiClientId, ClientSecret = parameters.ApiClientSecret, EncompassInstanceId = instanceId, ClientName = "EncompassTokenClient", Password = password, Username = userId, Retry = true, RetryCount = 3, TimeoutInSeconds = 30 }; IOptions <EncompassTokenClientOptions> options = Options.Create(encompassTokenClientOptions); var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError().RetryAsync(parameters.TimeoutRetryCount); var timeoutPolicy = Policy.TimeoutAsync <HttpResponseMessage>(parameters.Timeout); var serviceCollection = new ServiceCollection(); serviceCollection.AddSingleton(options); serviceCollection.AddHttpClient(encompassTokenClientOptions.ClientName) .AddPolicyHandler(HttpPolicyExtensions.HandleTransientHttpError().RetryAsync(parameters.TimeoutRetryCount)) .AddPolicyHandler(Policy.TimeoutAsync <HttpResponseMessage>(parameters.Timeout)); serviceCollection.AddScoped <ITokenClient>(sp => new EncompassTokenClient(sp.GetService <IHttpClientFactory>().CreateClient("EncompassTokenClient"), options)); serviceCollection.AddHttpClient("EncompassClient") .AddPolicyHandler(HttpPolicyExtensions.HandleTransientHttpError().RetryAsync(parameters.TimeoutRetryCount)) .AddPolicyHandler(Policy.TimeoutAsync <HttpResponseMessage>(parameters.Timeout)) .AddHttpMessageHandler(sp => new TokenHandler(sp.GetService <ITokenClient>())); var serviceProvider = serviceCollection.BuildServiceProvider(); var httpClientFactory = serviceProvider.GetService <IHttpClientFactory>(); var client = new EncompassApiClient(parameters, new EncompassApiService(httpClientFactory.CreateClient("EncompassHttpClient"), parameters)); return(client); }