private async void FetchFirebaseData(string accessToken, FirebaseAuthType authType)
        {
            try
            {
                // Convert the access token to firebase token
                var auth = new FirebaseAuthProvider(new FirebaseConfig(FirebaseAppKey));
                var data = await auth.SignInWithOAuthAsync(authType, accessToken);

                // Setup FirebaseClient to use the firebase token for data requests
                var db = new FirebaseClient(
                    FirebaseAppUri,
                    new FirebaseOptions
                {
                    AuthTokenAsyncFactory = () => Task.FromResult(data.FirebaseToken)
                });

                // TODO: your path within your DB structure.
                var dbData = await db
                             .Child("userGroups")
                             .Child(data.User.LocalId)
                             .OnceAsync <object>(); // TODO: custom class to represent your data instead of just object

                // TODO: present your data
                MessageBox.Show(string.Join("\n", dbData.Select(d => d.ToString())));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Example #2
0
        public void AppleTest()
        {
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig(ApiKey));

            var auth = authProvider.SignInWithOAuthAsync(FirebaseAuthType.Apple, AppleIDToken).Result;

            auth.FirebaseToken.Should().NotBeNullOrWhiteSpace();
        }
Example #3
0
 private IObservable <Unit> SignInWithOAuth(FirebaseAuthType authType, string authToken)
 {
     return(_authProvider
            .SignInWithOAuthAsync(authType, authToken)
            .ToObservable()
            .Do(authLink => AuthLink = authLink)
            .SelectMany(authLink => SaveAccount(authLink)));
 }
Example #4
0
        public void GoogleTest()
        {
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig(ApiKey));

            var auth = authProvider.SignInWithOAuthAsync(FirebaseAuthType.Google, GoogleAccessToken).Result;

            auth.User.FirstName.Should().BeEquivalentTo(GoogleTestUserFirstName);
            auth.FirebaseToken.Should().NotBeNullOrWhiteSpace();
        }
Example #5
0
        public void FacebookTest()
        {
            FirebaseAuthProvider authProvider = new FirebaseAuthProvider(new FirebaseConfig(ApiKey));

            FirebaseAuthLink auth = authProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook, FacebookAccessToken).Result;

            auth.User.FirstName.Should().BeEquivalentTo(FacebookTestUserFirstName);
            auth.OauthAccessToken.Should().NotBeNullOrWhiteSpace();
        }
Example #6
0
        public async Task <AuthToken> SocialLogin(AuthConfig authConfig, SocialAuthProvider provider, string accessToken)
        {
            using (var client = new HttpClient())
            {
                try
                {
                    var authType = FirebaseAuthType.Facebook;

                    switch (provider)
                    {
                    case SocialAuthProvider.Facebook: authType = FirebaseAuthType.Facebook; break;

                    case SocialAuthProvider.Google: authType = FirebaseAuthType.Google; break;

                    case SocialAuthProvider.Twitter: authType = FirebaseAuthType.Twitter; break;
                    }

                    var firebaseAuthProvider = new FirebaseAuthProvider(new FirebaseConfig(authConfig.ApiKey));
                    var authLink             = await firebaseAuthProvider.SignInWithOAuthAsync(authType, accessToken);

                    var authToken = new AuthToken
                    {
                        Token     = authLink.FirebaseToken,
                        ExpiresAt = DateTime.Now.AddSeconds(authLink.ExpiresIn)
                    };

                    var handler  = new JwtSecurityTokenHandler();
                    var userInfo = handler.ReadJwtToken(authLink.FirebaseToken);
                    userInfo.Payload.TryGetValue("user_id", out object userId);
                    authToken.UserId = userId as string;

                    return(authToken);
                }
                catch (FirebaseAuthException e)
                {
                    switch (e.Reason)
                    {
                    case AuthErrorReason.MissingEmail: throw new AuthException(SignUpError.MissingEmail.ToDescription());

                    case AuthErrorReason.WrongPassword: throw new AuthException(SignUpError.WrongPassowrd.ToDescription());

                    case AuthErrorReason.UserDisabled: throw new AuthException(SignUpError.DisabledUser.ToDescription());

                    case AuthErrorReason.InvalidEmailAddress: throw new AuthException(SignUpError.InvalidEmail.ToDescription());

                    case AuthErrorReason.Undefined: throw new AuthException(e.InnerException != null ? e.InnerException.Message : e.Message);

                    default: throw new AuthException(SignUpError.Other.ToDescription());
                    }
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
            }
        }
Example #7
0
        async Task <bool> LoginFirebase(string token, FirebaseAuthType firebaseAuthType)
        {
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig(AppConfigurations.FirebaseApiKey));
            var auth         = await authProvider.SignInWithOAuthAsync(firebaseAuthType, token);

            if (auth != null)
            {
                Console.WriteLine($"Logged in as {auth.User.DisplayName ?? auth.User.FirstName ?? auth.User.LastName}");
            }

            return(auth != null);
        }
Example #8
0
        private async void AuthOnCompleted(object sender, AuthenticatorCompletedEventArgs authenticatorCompletedEventArgs)
        {
            if (authenticatorCompletedEventArgs.IsAuthenticated)
            {
                AccountStore.Create(this).Save(authenticatorCompletedEventArgs.Account, "Facebook");
                var facebookAccessToken = authenticatorCompletedEventArgs.Account.Properties ["access_token"];

                var request = new OAuth2Request("GET",
                                                new Uri("https://graph.facebook.com/me?fields=gender,age_range"),
                                                null, authenticatorCompletedEventArgs.Account);

                var response = await request.GetResponseAsync( );

                var obj = JObject.Parse(response.GetResponseText( ));

                var gender = obj ["gender"].ToString( ).Replace("\"", "");
                var age    = int.Parse(obj ["age_range"] ["min"].ToString( ).Replace("\"", "")) +
                             int.Parse(obj ["age_range"] ["max"].ToString( ).Replace("\"", ""));
                age /= 2;

                var auth = await _firebaseAuthProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook,
                                                                            facebookAccessToken);

                var user = new UserModel
                {
                    LocalId     = auth.User.LocalId,
                    DisplayName = auth.User.DisplayName,
                    Email       = auth.User.Email,
                    LinkFb      = auth.User.FederatedId,
                    FirstName   = auth.User.FirstName,
                    LastName    = auth.User.LastName,
                    PhotoUrl    = auth.User.PhotoUrl,
                    Age         = age,
                    State       = StateEnum.Online,
                    Gender      = gender == "male" ? GenderEnum.Male : GenderEnum.Female
                };


                await _firebaseClient.Child($"users/{user.LocalId}").PutAsync(user);

                _eventAggregator.GetEvent <LoginSuccessEvent> ( ).Publish(user);
                _currentUser = user;

                _loginMedia.Start(  );

                _firebaseClient.Child("chatrooms").AsObservable <Chatroom>().Subscribe(OnRoomFound);
            }
            else
            {
                _eventAggregator.GetEvent <LoginFailEvent> (  ).Publish(  );
            }
        }
Example #9
0
        public void RefreshAccessToken()
        {
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig(ApiKey));

            var auth          = authProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook, FacebookAccessToken).Result;
            var originalToken = auth.FirebaseToken;

            // simulate the token already expired
            auth.Created = DateTime.MinValue;

            var freshAuth = auth.GetFreshAuthAsync().Result;

            freshAuth.FirebaseToken.Should().NotBe(originalToken);
        }
Example #10
0
        public FirebaseApiClient(Func <User> currentUserProvider, Func <Task> loginSequence)
        {
            _currentUserProvider = currentUserProvider;
            _loginSequence       = loginSequence;

            _firebaseConfig = new FirebaseConfig("AIzaSyAqHIXOmzA0UgyaYYV7IGTjzzcxeNm9YZk");

            _firebaseAuthProvider = new FirebaseAuthProvider(_firebaseConfig);

            var databaseOptions = new FirebaseOptions();

            databaseOptions.AuthTokenAsyncFactory = async delegate
            {
                if (currentUserProvider() == null)
                {
                    await loginSequence();
                }

                FirebaseAuthLink authData    = null;
                User             currentUser = currentUserProvider();
                if (currentUser.authData == null)
                {
                    // silent login
                    if (currentUser.email != null && currentUser.password != null)
                    {
                        authData = await _firebaseAuthProvider.SignInWithEmailAndPasswordAsync(currentUser.email, currentUser.password);
                    }
                    else if (currentUser.facebookToken != null)
                    {
                        authData = await _firebaseAuthProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook, currentUser.facebookToken);
                    }
                    currentUser.authData = authData;
                }
                else
                {
                    authData = currentUser.authData;
                }

                return(authData?.FirebaseToken);
            };

            databaseOptions.SyncPeriod = TimeSpan.Zero;

            _firebaseClient = new FirebaseClient("https://supernoteswifi3d.firebaseio.com/", databaseOptions);

            var storageOptions = new FirebaseStorageOptions();

            storageOptions.AuthTokenAsyncFactory = databaseOptions.AuthTokenAsyncFactory;
            _firebaseStorage = new FirebaseStorage("supernoteswifi3d.appspot.com", storageOptions);
        }
Example #11
0
        public async Task SignInWithFacebookTokenAsync(string token, Action <FirebaseAuthLink, Error> completionHandler)
        {
            FirebaseAuthLink authData = null;
            Error            error    = null;

            try
            {
                authData = await _firebaseAuthProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook, token);
            }
            catch (Exception e)
            {
                error = ErrorFromFibaseException(e);
            }

            completionHandler(authData, error);
        }
Example #12
0
        public async Task <string> Google()
        {
            var initializer = new GoogleAuthorizationCodeFlow.Initializer
            {
                Scopes        = new[] { "email", "profile" },
                ClientSecrets = new ClientSecrets {
                    ClientId = "111234912313-l9aqmsrga183h3dnr90c4dad3ffotmlr.apps.googleusercontent.com", ClientSecret = "OOBmRORPQ1MgEr4Y3MSKPTeA"
                },
            };
            var flow = new GoogleAuthorizationCodeFlow(initializer);

            var result = await new AuthorizationCodeInstalledApp(flow, new LocalServerCodeReceiver()).AuthorizeAsync("user", CancellationToken.None);

            if (result.Token.IsExpired(SystemClock.Default))
            {
                await result.RefreshTokenAsync(CancellationToken.None);
            }
            var auth = await authProvider.SignInWithOAuthAsync(FirebaseAuthType.Google, result.Token.AccessToken);

            return(auth.User.Email);
        }
Example #13
0
        public async Task <bool> SignInWithFirebaseAsync(string googleAccessToken)
        {
            try
            {
                var authProvider = new FirebaseAuthProvider(new FirebaseConfig(ApiKey));

                FirebaseAuthLink = await authProvider.SignInWithOAuthAsync(FirebaseAuthType.Google, googleAccessToken);

                accessToken = FirebaseAuthLink.FirebaseToken;

                FirebaseAuthLink.FirebaseAuthRefreshed += FirebaseAuthLink_FirebaseAuthRefreshed;

                return(true);
            }
            catch (Exception e)
            {
                // Log Exception.
                LifecycleLog.Exception(e);
                return(false);
            }
        }
        async void OnLoginButtonClicked(object sender, EventArgs e)
        {
            var user = new LoginUser
            {
                UserEmail = UserEmailEntry.Text,
                Password  = passwordEntry.Text
            };

            //Calling Auth

            // Email/Password Auth
            var authProvider = new FirebaseAuthProvider(new FirebaseConfig("AIzaSyDhxe5x5aiiHdxlDC0XtIncM-Ja1upWrXY"));

            var auth = await authProvider.CreateUserWithEmailAndPasswordAsync(user.UserEmail, user.Password);

            // The auth Object will contain auth.User and the Authentication Token from the request
            System.Diagnostics.Debug.WriteLine(auth.FirebaseToken);


            var auth = await authProvider.SignInWithOAuthAsync(FirebaseAuthType.Facebook, facebookAccessToken);

            var isValid = AreCredentialsCorrect(user);

            if (isValid)
            {
                App.IsUserLoggedIn = true;
                // MainPage = App.ManuPage;
                // Navigation.InsertPageBefore(new ManuPage(), this);
                await Navigation.PopAsync();
            }
            else
            {
                messageLabel.Text  = "Login failed";
                passwordEntry.Text = string.Empty;
            }
        }
        private static async Task Initialize(FirebaseAuthType authType, string oauthAccessToken)
        {
            var _authProvider = new FirebaseAuthProvider(new FirebaseConfig(APIKEY));

            AuthLink = await _authProvider.SignInWithOAuthAsync(authType, oauthAccessToken);
        }