コード例 #1
0
        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);
        }
コード例 #2
0
        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;
            }
        }