private async Task <TokenResponse> RequestToken(string tokenRequestBody) { // sends the request HttpWebRequest tokenRequest = (HttpWebRequest)WebRequest.Create(tokenEndpoint); tokenRequest.Method = "POST"; // tokenRequest.Headers.Add(HttpRequestHeader.Authorization, string.Format("Basic {0}", clientSecret)); tokenRequest.ContentType = "application/x-www-form-urlencoded"; //tokenRequest.Accept = "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; byte[] _byteVersion = Encoding.ASCII.GetBytes(tokenRequestBody); tokenRequest.ContentLength = _byteVersion.Length; Stream stream = tokenRequest.GetRequestStream(); await stream.WriteAsync(_byteVersion, 0, _byteVersion.Length); stream.Close(); try { // gets the response WebResponse tokenResponse = await tokenRequest.GetResponseAsync(); using (StreamReader reader = new StreamReader(tokenResponse.GetResponseStream())) { // reads response body string responseText = await reader.ReadToEndAsync(); var token = JsonConvert.DeserializeObject <TokenResponse>(responseText); currentToken = token; AuthEvent.Invoke(this, true); SaveToken(); return(token); } } catch (WebException ex) { if (ex.Status == WebExceptionStatus.ProtocolError) { var response = ex.Response as HttpWebResponse; if (response != null) { Console.WriteLine("HTTP: " + response.StatusCode); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { // reads response body string responseText = await reader.ReadToEndAsync(); Console.WriteLine(responseText); } } } } AuthEvent.Invoke(this, false); return(null); }
public async Task StartAuth() { var savedToken = Properties.Settings.Default.AuthToken; if (savedToken != null) { // Attempt to use auth code currentToken = savedToken; var accountManager = App.provider.GetService(typeof(AccountManager)) as AccountManager; var result = false; try { result = await accountManager.GetAccount(true) != null; } catch (UnauthorizedAccessException _) { // Do nothing } if (result) { // Token success AuthEvent.Invoke(this, true); return; } else { AuthEvent.Invoke(this, false); } try { result = await RefreshToken() != null && await accountManager.GetAccount(true) != null; } catch (UnauthorizedAccessException _) { // Do nothing } if (result) { // Refresh succeeded and token success AuthEvent.Invoke(this, true); return; } currentToken = null; } }