private static async Task<TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account) { HttpWebRequest request = WebRequest.CreateHttp(account.TokenService); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; var requestStream = await request.GetRequestStreamAsync(); var writer = new StreamWriter(requestStream); StringBuilder sb = new StringBuilder(); sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId)); sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri)); sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret)); sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken)); sb.Append("&grant_type=refresh_token"); if (null != account.Resource) sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource)); var content = sb.ToString(); await writer.WriteAsync(content); await writer.FlushAsync(); var response = await request.GetResponseAsync() as HttpWebResponse; if (null != response && response.StatusCode == HttpStatusCode.OK) { var responseStream = response.GetResponseStream(); if (null != responseStream) { var reader = new StreamReader(responseStream); return JsonConvert.DeserializeObject<TokenResponse>(await reader.ReadToEndAsync()); } } return null; }
public static async Task<TokenResponse> RedeemRefreshTokenAsync(OAuthAccount account) { try { return await RedeemRefreshTokenInternalAsync(account); } catch (Exception ex) { Console.WriteLine("Error redeeming token: " + ex.Message); return null; } }
public static async Task <TokenResponse> RedeemRefreshTokenAsync(OAuthAccount account) { try { return(await RedeemRefreshTokenInternalAsync(account)); } catch (Exception ex) { Console.WriteLine("Error redeeming token: " + ex.Message); return(null); } }
private static async Task <TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account) { HttpWebRequest request = WebRequest.CreateHttp(account.TokenService); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; var requestStream = await request.GetRequestStreamAsync(); var writer = new StreamWriter(requestStream); StringBuilder sb = new StringBuilder(); sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId)); sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri)); if (account.ClientSecret != null) { sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret)); } sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken)); sb.Append("&grant_type=refresh_token"); if (null != account.Resource) { sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource)); } var content = sb.ToString(); await writer.WriteAsync(content); await writer.FlushAsync(); // TODO: Expect to encounter a 401 here, and handle the response: {"error":"invalid_client","error_description":"AADSTS70002: Error validating credentials. AADSTS50012: Invalid client secret is provided.\r\nTrace ID: b416d386-2d5e-40b9-889a-6b2286b30100\r\nCorrelation ID: 2a021806-2134-4610-8bd4-760727cb4465\r\nTimestamp: 2017-04-20 17:47:22Z","error_codes":[70002,50012],"timestamp":"2017-04-20 17:47:22Z","trace_id":"b416d386-2d5e-40b9-889a-6b2286b30100","correlation_id":"2a021806-2134-4610-8bd4-760727cb4465"} var response = await request.GetResponseAsync() as HttpWebResponse; if (null != response && response.StatusCode == HttpStatusCode.OK) { var responseStream = response.GetResponseStream(); if (null != responseStream) { var reader = new StreamReader(responseStream); return(JsonConvert.DeserializeObject <TokenResponse>(await reader.ReadToEndAsync())); } } return(null); }
/// <summary> /// Use reflection to replace the value in any string properties with a JsonProperty attribute /// based on the value of an environment variable, if one exists. /// </summary> internal void ReplaceEnvironmentVariables() { const string ENV_MARKER = "$env:"; List <string> missingVariables = new List <string>(); Type t = this.GetType(); var properties = t.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in properties) { if (prop.PropertyType != typeof(string)) { continue; } var attribute = prop.GetCustomAttribute(typeof(CanBeEnvironmentVariableAttribute)); if (null == attribute) { continue; } string value = prop.GetValue(this, null) as string; if (null != value && value.StartsWith(ENV_MARKER)) { // Replace with the approriate environment variable var variable = value.Substring(ENV_MARKER.Length); try { var newValue = OAuthAccount.ReadVariable(variable); if (newValue != null) { prop.SetValue(this, newValue, null); } } catch (OAuthAccountException) { missingVariables.Add(variable); } } } if (missingVariables.Any()) { this.Enabled = false; Console.WriteLine($"Unable to find $env values in account {Name}: {missingVariables.ComponentsJoinedByString(", ")}"); } }
private static async Task <TokenResponse> RedeemRefreshTokenInternalAsync(OAuthAccount account) { HttpWebRequest request = WebRequest.CreateHttp(account.TokenService); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; var requestStream = await request.GetRequestStreamAsync(); var writer = new StreamWriter(requestStream); StringBuilder sb = new StringBuilder(); sb.AppendFormat("client_id={0}", Uri.EscapeDataString(account.ClientId)); sb.AppendFormat("&redirect_uri={0}", Uri.EscapeDataString(account.RedirectUri)); if (account.ClientSecret != null) { sb.AppendFormat("&client_secret={0}", Uri.EscapeDataString(account.ClientSecret)); } sb.AppendFormat("&refresh_token={0}", Uri.EscapeDataString(account.RefreshToken)); sb.Append("&grant_type=refresh_token"); if (null != account.Resource) { sb.AppendFormat("&resource={0}", Uri.EscapeDataString(account.Resource)); } var content = sb.ToString(); await writer.WriteAsync(content); await writer.FlushAsync(); var response = await request.GetResponseAsync() as HttpWebResponse; if (null != response && response.StatusCode == HttpStatusCode.OK) { var responseStream = response.GetResponseStream(); if (null != responseStream) { var reader = new StreamReader(responseStream); return(JsonConvert.DeserializeObject <TokenResponse>(await reader.ReadToEndAsync())); } } return(null); }