Beispiel #1
0
        public OAuth1App(
            string consumerKey,
            string consumerSecret,
            string callbackUrl,
#if __WINDOWS__
            AuthenticationInterfaceEnum browserType = AuthenticationInterfaceEnum.Dedicated,
            OAuthAppTypeEnum appType = OAuthAppTypeEnum.Desktop
Beispiel #2
0
        public IOAuthAuthorizerUI GetAuthorizer <TResourceProvider>(
            AuthenticationInterfaceEnum browserType,
            IOAuthCallbackHandler callbackHandler)
            where TResourceProvider : ResourceProvider
        {
#if __ANDROID__
            switch (browserType)
            {
            case AuthenticationInterfaceEnum.Dedicated:
                return(new BrowserAuthorizerUI(
                           new ProtocolOAuthCallbackListener(
                               callbackHandler),
                           Platform.Current));

            case AuthenticationInterfaceEnum.Embedded:
                return(new WebViewAuthorizerUI(callbackHandler));

            default:
                throw new NotSupportedException();
            }
#elif __IOS__
            switch (browserType)
            {
            case AuthenticationInterfaceEnum.Dedicated:
                return(new BrowserAuthorizerUI(
                           new ProtocolOAuthCallbackListener(
                               callbackHandler),
                           Platform.Current));

            case AuthenticationInterfaceEnum.Embedded:
                return(new UIWebViewAuthorizerUI(callbackHandler));

            default:
                throw new NotSupportedException();
            }
#elif WINDOWS_UWP
            switch (browserType)
            {
            case AuthenticationInterfaceEnum.Dedicated:
                return(new BrowserAuthorizerUI(
                           new ProtocolOAuthCallbackListener(
                               callbackHandler),
                           Platform.Current));

            case AuthenticationInterfaceEnum.Embedded:
                return(new WebViewAuthorizerUI(callbackHandler));

            default:
                throw new NotSupportedException();
            }
#elif __WINDOWS__
            return(new BrowserAuthorizerUI(
                       new HttpOAuthCallbackListener(
                           new HttpServer(),
                           callbackHandler),
                       Platform.Current));
#else
            throw new NotSupportedException();
#endif
        }
Beispiel #3
0
 private void BrowserTypeToggled(object sender, RoutedEventArgs e)
 {
     _browserType = authTypeToggleSwitch.IsOn
         ? AuthenticationInterfaceEnum.Dedicated
         : AuthenticationInterfaceEnum.Embedded;
     _callbackType = authTypeToggleSwitch.IsOn
         ? CallbackTypeEnum.Protocol
         : CallbackTypeEnum.Localhost;
 }
Beispiel #4
0
        public IOAuthAuthenticationTemplate <OAuth2Credentials> BuildOAuth2Template <TResourceProvider>(
            IOAuthFacade <OAuth2Credentials> authentication,
            AuthenticationInterfaceEnum ui,
            string userId,
            string clientSecret,
            ResponseTypeEnum flow)
            where TResourceProvider : ResourceProvider
        {
            if (flow == ResponseTypeEnum.Code)
            {
                var callbackHandler = new OAuth2QueryCallbackHandler(
                    _strategy,
                    OAuth2ParameterEnum.State.EnumToString(),
                    userId);

                var authenticationUI = _oauthAuthorizerUIFactory
                                       .GetAuthorizer <TResourceProvider>(
                    ui,
                    callbackHandler);

                return(new OAuth2CodeAuthenticationTemplate(
                           authenticationUI,
                           authentication,
                           clientSecret));
            }
            else
            {
                IOAuthCallbackHandler callbackHandler = null;
                if (ui == AuthenticationInterfaceEnum.Dedicated)
                {
                    callbackHandler = new OAuth2QueryCallbackHandler(
                        _strategy,
                        OAuth2ParameterEnum.State.EnumToString(),
                        userId);
                }
                else
                {
                    callbackHandler = new OAuth2FragmentCallbackHandler(
                        _strategy,
                        OAuth2ParameterEnum.State.EnumToString(),
                        userId);
                }

                var authenticationUI = _oauthAuthorizerUIFactory
                                       .GetAuthorizer <TResourceProvider>(
                    ui,
                    callbackHandler);

                return(new OAuth2TokenAuthenticationTemplate(
                           authenticationUI,
                           authentication));
            }
        }
Beispiel #5
0
        public virtual OAuth2ResourceProvider SetFlow(
            string clientId,
            string clientSecret,
            AuthenticationInterfaceEnum @interface,
            OAuthAppTypeEnum appType)
        {
            ResponseTypeEnum flow;

            if (@interface == AuthenticationInterfaceEnum.Dedicated &&
                appType == OAuthAppTypeEnum.Desktop)
            {
                flow = clientSecret != null ?
                       ResponseTypeEnum.Code :
                       ResponseTypeEnum.Token;
            }
            else if (@interface == AuthenticationInterfaceEnum.Embedded &&
                     appType == OAuthAppTypeEnum.Desktop)
            {
                throw new NotSupportedException(
                          StringResources.EmbeddedDesktopUINotSupportedException);
            }
            else if (@interface == AuthenticationInterfaceEnum.Dedicated &&
                     appType == OAuthAppTypeEnum.Mobile)
            {
                flow = ResponseTypeEnum.Code;
            }
            else if (@interface == AuthenticationInterfaceEnum.Embedded &&
                     appType == OAuthAppTypeEnum.Mobile)
            {
                flow = clientSecret != null ?
                       ResponseTypeEnum.Code :
                       ResponseTypeEnum.Token;
            }
            else
            {
                throw new NotSupportedException();
            }

            if (!Flows.Contains(flow))
            {
                throw new InvalidGrantTypeException(
                          string.Format(
                              StringResources.GrantTypeNotSupportedException,
                              GetType().Name));
            }

            Flow = flow;

            return(this);
        }
Beispiel #6
0
 public OAuth1AppBase(
     string consumerKey,
     string consumerSecret,
     string callbackUrl,
     IOAuthAuthorizerUIFactory uiFactory,
     TResourceProvider provider,
     AuthenticationInterfaceEnum browserType,
     OAuthAppTypeEnum appType)
 {
     _consumerKey    = consumerKey;
     _consumerSecret = consumerSecret;
     _callbackUrl    = callbackUrl;
     _uiFactory      = uiFactory;
     _provider       = provider;
     _browserType    = browserType;
     _appType        = appType;
 }
Beispiel #7
0
 public OAuth2AppBase(
     string clientId,
     string callbackUrl,
     IOAuthAuthorizerUIFactory uiFactory,
     TResourceProvider provider,
     AuthenticationInterfaceEnum browserType,
     OAuthAppTypeEnum appType) :
     this(
         clientId,
         null,
         callbackUrl,
         uiFactory,
         provider,
         browserType,
         appType)
 {
 }
Beispiel #8
0
        public IOAuthAuthenticationTemplate <OAuth1Credentials> BuildOAuth1Template <TResourceProvider>(
            IOAuthFacade <OAuth1Credentials> authentication,
            AuthenticationInterfaceEnum ui,
            string userId)
            where TResourceProvider : ResourceProvider
        {
            var handler = new OAuth1CallbackHandler(
                _strategy,
                OAuth1ParameterEnum.OAuthToken.EnumToString(),
                userId);

            var authenticationUI = _oauthAuthorizerUIFactory
                                   .GetAuthorizer <TResourceProvider>(ui, handler);

            return(new OAuth1AuthenticationTemplate(
                       authenticationUI,
                       authentication,
                       _strategy,
                       userId));
        }
Beispiel #9
0
        public OAuth2AppBase(
            string clientId,
            string clientSecret,
            string callbackUrl,
            IOAuthAuthorizerUIFactory uiFactory,
            TResourceProvider provider,
            AuthenticationInterfaceEnum browserType,
            OAuthAppTypeEnum appType)
        {
            _clientId     = clientId;
            _clientSecret = clientSecret;
            _callbackUrl  = callbackUrl;
            _browserType  = browserType;
            _uiFactory    = uiFactory;
            _provider     = provider;

            provider.SetFlow(
                clientId,
                clientSecret,
                browserType,
                appType);
        }
Beispiel #10
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var settings = new CredentialApplicationSettings();

            BrowserToggle.TouchUpInside += (sender, args) =>
            {
                _browserType = BrowserToggle.On
                    ? AuthenticationInterfaceEnum.Embedded
                    : AuthenticationInterfaceEnum.Dedicated;
                _callbackType = BrowserToggle.On
                    ? CallbackTypeEnum.Localhost
                    : CallbackTypeEnum.Protocol;
            };

            FacebookAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Facebook, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Facebook>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <FacebookEvent>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            TwitterAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Twitter, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Twitter>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("OAuth Secret: " + token.OAuthSecret + "\nOAuth Token: " + token.OAuthToken);
            };
            FatsecretAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Fatsecret, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Fatsecret>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("OAuth Secret: " + token.OAuthSecret + "\nOAuth Token: " + token.OAuthToken);
            };
            WithingsAuth.TouchUpInside += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Withings, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Withings>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("OAuth Secret: " + token.OAuthSecret + "\nOAuth Token: " + token.OAuthToken);
            };
            SpotifyAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Spotify, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Spotify>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <SpotifySavedTrack>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            GoogleAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Google, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Google>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <GoogleGmailMetadata>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            FitbitAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Fitbit, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Fitbit>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <FitbitProfile>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            RunkeeperAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Runkeeper, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Runkeeper>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <RunkeeperFitnessActivity>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            FoursquareAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Foursquare, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Foursquare>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            RescuetimeAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Rescuetime, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Rescuetime>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <RescuetimeAnalyticData>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            LinkedinAuth.TouchUpInside += async(sender, e) =>
            {
                var credentials = settings
                                  .GetClientCredentials <LinkedIn, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <LinkedIn>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <LinkedinPersonal>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteResultToTextView("Access Token:" + token.AccessToken);
            };
            MioAuth.TouchUpInside += async(sender, args) =>
            {
                var auth        = new BluetoothApp <Mioalpha>();
                var credentials = await auth.GetBluetoothCredentialsAsync()
                                  .ConfigureAwait(false);

                WriteResultToTextView("Device Address: " + credentials.DeviceAddress);

                var requester = new BluetoothRequester();
                var result    = await requester
                                .MakeBluetoothRequestAsync <MioHeartRate>(credentials)
                                .ConfigureAwait(false);

                WriteResultToTextView("Heart rate: " + result.Reading);
            };
            GPS.TouchUpInside += async(sender, args) =>
            {
                var result = await new GPSRequester()
                             .MakeGPSRequestAsync()
                             .ConfigureAwait(false);

                WriteResultToTextView($"Latitude: {result.Latitude}, Longitude: {result.Longitude}, Speed: {result.Speed}");
            };
        }
Beispiel #11
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            var settings = new CredentialApplicationSettings();

            SetContentView(Resource.Layout.Main);

            var toggleButton = FindViewById <ToggleButton>(Resource.Id.browserToggleButton);

            toggleButton.Click += (o, e) =>
            {
                _browserType = toggleButton.Checked
                    ? AuthenticationInterfaceEnum.Dedicated
                    : AuthenticationInterfaceEnum.Embedded;
                _callbackType = toggleButton.Checked
                    ? CallbackTypeEnum.Protocol
                    : CallbackTypeEnum.Localhost;
            };

            FindViewById <Button>(Resource.Id.facebookAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Facebook, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Facebook>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <FacebookEvent>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.twitterAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Twitter, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Twitter>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.fatsecretAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Fatsecret, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Fatsecret>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };
            FindViewById <Button>(Resource.Id.withings).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Withings, OAuth1Credentials>(_callbackType);

                var token = await new OAuth1App <Withings>(
                    credentials.ConsumerKey,
                    credentials.ConsumerSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };
            FindViewById <Button>(Resource.Id.fitbitAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Fitbit, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Fitbit>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <FitbitProfile>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.foursquareAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Foursquare, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Foursquare>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.googleAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Google, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Google>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <GoogleGmailMetadata>()
                            .AddScope <GoogleGmail>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.linkedinAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <LinkedIn, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <LinkedIn>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <LinkedinPersonal>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.rescuetimeAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Rescuetime, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Rescuetime>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <RescuetimeAnalyticData>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.spotifyAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Spotify, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Spotify>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <SpotifySavedTrack>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.runkeeperAuth).Click += async(sender, args) =>
            {
                var credentials = settings
                                  .GetClientCredentials <Runkeeper, OAuth2Credentials>(_callbackType);

                var token = await new OAuth2App <Runkeeper>(
                    credentials.ClientId,
                    credentials.ClientSecret,
                    credentials.CallbackUrl,
                    browserType: _browserType)
                            .AddScope <RunkeeperFitnessActivity>()
                            .GetCredentialsAsync()
                            .ConfigureAwait(false);

                WriteCredentials(token);
            };

            FindViewById <Button>(Resource.Id.mioalphaAuth).Click += async(sender, args) =>
            {
                var credentials = await new BluetoothApp <Mioalpha>()
                                  .GetBluetoothCredentialsAsync()
                                  .ConfigureAwait(false);

                WriteResultToTextView("Device Address: " + credentials.DeviceAddress);

                var result = await new BluetoothRequester()
                             .MakeBluetoothRequestAsync <MioHeartRate>(credentials)
                             .ConfigureAwait(false);

                WriteResultToTextView("Heart rate: " + result.Reading);
            };

            FindViewById <Button>(Resource.Id.gps).Click += async(sender, args) =>
            {
                var result = await new GPSRequester()
                             .MakeGPSRequestAsync()
                             .ConfigureAwait(false);

                WriteResultToTextView(
                    $"Latitude: {result.Latitude}, Longitude: {result.Longitude}, Speed: {result.Speed}");
            };

            FindViewById <Button>(Resource.Id.sms).Click += async(sender, args) =>
            {
                var filterDate = new DateTime(2016, 7, 21, 0, 0, 0);
                var results    = await new SMSRequester()
                                 .MakeSMSRequestAsync(filterDate)
                                 .ConfigureAwait(false);

                var resultsString = string.Empty;
                foreach (var result in results)
                {
                    resultsString +=
                        $"Address: {result.Address}, Header: {result.Subject}, Body: {result.Body}\n";
                }
                WriteResultToTextView(resultsString);
            };
        }