public static async Task <IGenesysAccessToken> GetAuthTokenAsync(this CloudTable cloudTable, HttpClient apiClient , DateTime date , IGenesysClientCredentials clientCredentials , bool reload = false) { if (!reload) { try { var existedToken = await cloudTable.GetAuthTokenAsync(clientCredentials); if (existedToken?.ExpiresIn > date) { existedToken.Environment = clientCredentials.Environment; return(existedToken); } } catch (Exception ex) { throw new Exception($"Cant load AccessToken from the Azure CloudTable '{cloudTable.Name}'.", ex); } } GenesysAuthTokenInfo authTokenInfo = null; authTokenInfo = await apiClient.GetTokenAsync(clientCredentials); if (authTokenInfo == null) { throw new Exception($"Genesys API Token is null. ClientId '{clientCredentials.ClientId}'."); } else if (!string.IsNullOrEmpty(authTokenInfo.Error)) { throw new Exception($"Genesys API Token error. ClientId '{clientCredentials.ClientId}'. {authTokenInfo.Error}."); } var newToken = new GenesysAccessToken(clientCredentials) { Value = authTokenInfo.AccessToken, ExpiresIn = date.AddSeconds(authTokenInfo.ExpiresIn ?? 1000), ETag = "*" }; await cloudTable.SetAuthTokenAsync(newToken); newToken.Environment = clientCredentials.Environment; return(newToken); }
public static async Task <GenesysAuthTokenInfo> GetTokenAsync(this HttpClient httpClient, IGenesysClientCredentials clientCredentials) { var path = "/oauth/token"; var basicAuth = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1") .GetBytes($"{clientCredentials.ClientId}:{clientCredentials.ClientSecret}")); var request = new HttpRequestMessage(HttpMethod.Post, $"https://login.{clientCredentials.Environment}" + path); request.Headers.Authorization = new AuthenticationHeaderValue("Basic", basicAuth); var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("grant_type", "client_credentials"), }); request.Content = content; var response = await httpClient.SendAsync(request); try { response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); var authTokenInfo = JsonConvert.DeserializeObject <GenesysAuthTokenInfo>(responseContent); return(authTokenInfo); } catch (HttpRequestException ex) { int statusCode = (int)response.StatusCode; throw new Exception($"Error calling Genesys API PostToken. Status Code {statusCode}.", ex); } catch (Exception ex) { throw new Exception($"Get Genesys token error.", ex); } }
internal static string GetOrgId(this IGenesysClientCredentials credentials) => credentials.OrgId ?? "";
public static async Task <GenesysAccessToken> GetAuthTokenAsync(this CloudTable cloudTable, IGenesysClientCredentials settings) { var q = new TableQuery <GenesysAccessToken>() .Where(TableQuery.CombineFilters(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, settings.GetOrgId()), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, settings.ClientId))) .Take(1); var res = await cloudTable.ExecuteQuerySegmentedAsync(q, null); return(res.FirstOrDefault()); }
public GenesysAccessToken(IGenesysClientCredentials settings) { PartitionKey = settings.GetOrgId(); RowKey = settings.ClientId; }