public void WhenIGetTokensAsyncIReceiveDeserializedTokens()
        {
            var uriOauth = OAuthRequestHandler.OAuthRequestUri;
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri(uriOauth.AbsoluteUri, "{\"access_token\": \"<<token>>\"}");

            var service = new OAuthService(_configuration, factory);

            OAuthTokens received = service.GetTokensAsync("code").Result;

            Assert.IsNotNull(received);
            Assert.AreEqual("<<token>>", received.AccessToken);

        }
        public void WhenIRenewTokensDelegateIReceiveDeserializedTokens()
        {
            var uriOauth = OAuthRequestHandler.OAuthRequestUri;
            var factory = new TestWebRequestFactory();
            factory.RegisterResultForUri(uriOauth.AbsoluteUri, "{\"access_token\": \"<<token>>\"}");

            var service = new OAuthService(_configuration, factory);

            OAuthTokens received = null;
            service.RenewTokens(new OAuthTokens(), (code, tokens) => { received = tokens; }, (uri, exception) => { Assert.Fail(); });

            Assert.IsNotNull(received);
            Assert.AreEqual("<<token>>", received.AccessToken);

        }
        public AuthorizationService()
        {
            _pelicanContext = PelicanContext.CreateFromApplicationSettings();

            var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials(_pelicanContext.StorageAccount,
                                                                                     _pelicanContext.StorageAccountKey),
                                                              true);

            var configuration = new ApiConfiguration(_pelicanContext.ClientKey,
                                                     _pelicanContext.ClientSecret,
                                                     _pelicanContext.RedirectUrl);

            _oauthService = new OAuthService(configuration);

            _authorizedUserAndFileTable = new AuthorizedUserAndFileTable(cloudStorageAccount,
                                                                         "PelicanConfiguration");

            _authorizedUserAndCompanyFile = _authorizedUserAndFileTable.RetrieveInstanceByRowKey("John Azariah");
        }
        public ActionResult OAuthCallback()
        {
            var requestUri = HttpContextFactory.Current.Request.Url;
            var queries = HttpUtility.ParseQueryString(requestUri.Query);
            var code = queries["code"];

            var service = new OAuthService(APIConfiguration);
            var oauthToken = service.GetTokens(code);
            KeyService = new SimpleOAuthKeyService() {OAuthResponse = oauthToken};

            if (OAuthInformation.Token == null)
                OAuthInformation.Token = new OAuthToken();
            OAuthInformation.Token.AccessToken = KeyService.OAuthResponse.AccessToken;
            OAuthInformation.Token.RefreshToken = KeyService.OAuthResponse.RefreshToken;
            OAuthInformation.Token.ExpiresIn = KeyService.OAuthResponse.ExpiresIn;
            //OAuthInformation.RequestAccessToken();

            return RedirectToAction("Index", "CommandCentre");
        }
        /// <summary>
        /// Event that is called when the form loads
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks></remarks>
        private void CompanyFilesLoad(object sender, EventArgs e)
        {
            try
            {
                ShowSpinner();

                //If developer key  enable (see above) and set useCVloud to true the following section manages OAuth token and accessing cloud service
                if (UseCloud)
                {
                    _configurationCloud = new ApiConfiguration(DeveloperKey, DeveloperSecret, "http://desktop");
                    _oAuthKeyService = new OAuthKeyService();

                    //Get tokens if not stored
                    if (_oAuthKeyService.OAuthResponse == null)
                    {
                        var oauthService = new OAuthService(_configurationCloud);
                        _oAuthKeyService.OAuthResponse =
                            oauthService.GetTokens(OAuthLogin.GetAuthorizationCode(_configurationCloud));
                    }

                    // Load all files from cloud and local simultaneously
                    var cfsCloud = new CompanyFileService(_configurationCloud, null, _oAuthKeyService);
                    cfsCloud.GetRange(OnComplete, OnError);
                }

                _configurationLocal = new ApiConfiguration(LocalApiUrl);
                var cfsLocal = new CompanyFileService(_configurationLocal);
                cfsLocal.GetRange(OnComplete, OnError);

                //' The following two lines can be called to run synchronously rather than async
                //_companyFiles = cfs.GetRange()
                //dgvCompanyFiles.DataSource = _companyFiles
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public void ServiceWillUseDefaultFactoryIfNotSupplied()
        {
            // arrange
            // act
            var service = new OAuthService(_configuration);

            // assert
            Assert.IsInstanceOf<WebRequestFactory>(service.Factory);
        }
        public void RenewTokensCorrectlyHandlesWebExceptionErrors()
        {
            // arrange
            var apiUri = ApiRequestHandler.ApiRequestUri;

            var factory = new TestWebRequestFactory();
            factory.RegisterExceptionForUri<WebException>(OAuthRequestHandler.OAuthRequestUri.AbsoluteUri);

            var service = new OAuthService(_configuration, factory);

            // act
            var ex = Assert.Throws<ApiCommunicationException>(() => service.RenewTokens(new OAuthTokens()));

            // assert
            Assert.AreEqual(OAuthRequestHandler.OAuthRequestUri, ex.URI);
        }
        void OAuthLogin_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            Debug.WriteLine(e.Uri);
            if (!string.Equals(e.Uri.ToString(), _authorizeUri.ToString(), StringComparison.InvariantCultureIgnoreCase))
            {
                OAuthLogin.InvokeScript("eval",
                    "var msViewportStyle = document.createElement(\"style\");" +
                    "msViewportStyle.appendChild(document.createTextNode(\"@-ms-viewport{width:auto!important}\"));" +
                    "document.getElementsByTagName(\"head\")[0].appendChild(msViewportStyle);");
                if (string.Equals(e.Uri.ToString(), _loginUri.ToString(), StringComparison.InvariantCultureIgnoreCase))
                {
                    OAuthLogin.Navigate(_authorizeUri);
                }
                return;
            }

            var content = OAuthLogin.SaveToString();
            var regex = new Regex(@"\<title\>(.+?)=(.+?)\</title\>");
            var match = regex.Match(content);
            if (!match.Success || match.Groups.Count != 3) return;

            switch (match.Groups[1].Value.ToLowerInvariant())
            {
                case "code": // we have a code
                    var code = match.Groups[2].Value;
                    var config = new ApiConfiguration();
                    var service = new OAuthService(config, new WebRequestFactory(config));
                    service.GetTokens(code, (statusCode, tokens) =>
                        {
                            OAuthResponse = tokens;
                            Dispatcher.BeginInvoke(() => _viewModel.FetchCompanyFies(ShowError));
                        }, (uri, exception) => ShowError(exception));
                    break;

                case "error": // user probably said "no thanks"
                    OAuthLogin.Navigate(_logoffUri);
                    break;
            }
        }