예제 #1
0
        protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            Log.Debug(TAG, "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);
            if (CallbackManager != null)
            {
                CallbackManager.OnActivityResult(requestCode, (int)resultCode, data);
            }
            if (requestCode == RC_SIGN_IN)
            {
                IsLogin_InProgress(false);
                GoogleSignInResult result = Auth.GoogleSignInApi.GetSignInResultFromIntent(data);
                if (result.IsSuccess)
                {
                    GoogleSignInAccount userAccount = result.SignInAccount;
                    var success = await FirebaseAuthHelper.FirebaseAuthWithGoogle(FirebaseAuth, userAccount);

                    if (success)
                    {
                        Intent mainactivityIntent = new Intent(this, typeof(MainActivity));
                        StartActivity(mainactivityIntent);
                        Finish();
                    }
                }
            }
        }
예제 #2
0
    IEnumerator Login()
    {
        var loadingCircleInstance = Instantiate(loadingCircle);

        yield return(FirebaseAuthHelper.LoginAsync(email.text, password.text));

        Destroy(loadingCircleInstance.gameObject);
    }
예제 #3
0
        public async void register()
        {
            bool result = await FirebaseAuthHelper.Register(User);

            if (result == true)
            {
                switchViews();
            }
        }
예제 #4
0
        public async void login()
        {
            bool result = await FirebaseAuthHelper.Login(User);

            if (result)
            {
                AuthenticationSucessfull?.Invoke(this, new EventArgs());
            }
        }
예제 #5
0
        public async void Register()
        {
            bool result = await FirebaseAuthHelper.Register(User);

            if (result)
            {
                Authenticated?.Invoke(this, new EventArgs());
            }
        }
예제 #6
0
        public async Task Login()
        {
            bool result = await FirebaseAuthHelper.Login(User);

            if (result)
            {
                Authenticated?.Invoke(this, new EventArgs());
            }
        }
예제 #7
0
        public IActionResult PrivacyPolicy()
        {
            string authSessionCookie = Request.Cookies["authSession"];

            bool userLoggedIn = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie, true);

            ViewData["userLoggedIn"] = userLoggedIn;

            return(View());
        }
예제 #8
0
        public IActionResult LogInPOST()
        {
            string email    = Request.Form["email"];
            string password = Request.Form["password"];

            string idTokenOrError = FirebaseAuthHelper.SignInWithEmailAndPassword(email, password);
            string idToken;

            if (idTokenOrError.StartsWith("error: "))
            {
                JObject errorJObject = JObject.Parse(idTokenOrError.Remove(0, 7));
                return(Content(FirebaseAuthHelper.GenerateNiceErrorMessage(errorJObject["message"].ToString())));
            }
            else
            {
                idToken = idTokenOrError.Remove(0, 9);
            }

            TimeSpan expirationTimeSpan;

            if (Request.Form["remember-me"] == "on")
            {
                expirationTimeSpan = TimeSpan.FromDays(14);
            }
            else
            {
                expirationTimeSpan = TimeSpan.FromDays(1);
            }

            SessionCookieOptions options = new SessionCookieOptions()
            {
                ExpiresIn = expirationTimeSpan
            };

            try
            {
                string sessionCookie = FirebaseAuth.DefaultInstance.CreateSessionCookieAsync(idToken, options).Result;

                CookieOptions cookieOptions = new CookieOptions()
                {
                    Expires  = DateTimeOffset.UtcNow.Add(options.ExpiresIn),
                    HttpOnly = true,
                    Secure   = EnvironmentHelper.KeepCookiesSecure()
                };

                Response.Cookies.Append("authSession", sessionCookie, cookieOptions);
                return(Content("success"));
            }
            catch (FirebaseAuthException)
            {
                return(Content("Error: Failed to create a session cookie."));
            }
        }
예제 #9
0
        public IActionResult Register()
        {
            string authSessionCookie = Request.Cookies["authSession"];

            switch (FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie, true))
            {
            case true:
                return(Redirect("/"));

            case false:
                return(View());
            }
        }
예제 #10
0
        public IActionResult CreateACountryPOST()
        {
            string authSessionCookie = Request.Cookies["authSession"];

            bool userLoggedIn = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie);

            if (userLoggedIn)
            {
                FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
                string        firebaseUid   = firebaseToken.Uid;

                using (DatabaseContext database = new DatabaseContext())
                {
                    User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                    if (user.CountryName == null)
                    {
                        Country country = new Country
                        {
                            CountryName = Request.Form["country-name"],
                            CapitalName = Request.Form["capital-name"],
                            FlagId      = CountryGenerationHelper.FlagNameToId(Request.Form["flag-name"])
                        };

                        if (database.Countries.Any(c => c.CountryName == country.CountryName))
                        {
                            ViewData["errorMessage"] = "There is another country with that name, and we don't allow duplicate country names. Sorry!";
                            return(View("../Error/TextError"));
                        }

                        database.Countries.Add(country);
                        user.CountryName = country.CountryName;
                        user.Ministry    = MinistryHelper.MinistryCode.PrimeMinister;
                        database.SaveChanges();

                        return(Redirect("/"));
                    }
                    else
                    {
                        ViewData["errorMessage"] = "You are already a minister in another country.";
                        return(View("../Error/TextError"));
                    }
                }
            }
            else
            {
                ViewData["errorMessage"] = "You are not logged in.";
                return(View("../Error/TextError"));
            }
        }
예제 #11
0
        public IActionResult CheckVerificationEmail()
        {
            string authSessionCookie = Request.Cookies["authSession"];

            if (FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie))
            {
                return(Redirect("/"));
            }

            bool userLoggedIn = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie, true);

            ViewData["userLoggedIn"] = userLoggedIn;

            return(View());
        }
예제 #12
0
        public IActionResult LogIn(string redirect = "/")
        {
            string authSessionCookie = Request.Cookies["authSession"];

            switch (FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie))
            {
            case true:
                return(Redirect(redirect));

            case false:
                if (FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie, true))
                {
                    return(Redirect("/Auth/CheckVerificationEmail"));
                }

                ViewData["redirectPath"] = redirect;

                return(View());
            }
        }
예제 #13
0
        public async void OnSuccess(Java.Lang.Object result)
        {
            _ = Log.Debug(Class.ToString(), result.Class.ToString());

            var success = await FirebaseAuthHelper.FirebaseAuthWithFacebook(FirebaseAuth, ((LoginResult)result).AccessToken);

            if (success)
            {
                IsLogin_InProgress(false);
                Toast.MakeText(this, "Authentication successful", ToastLength.Long).Show();
                Intent mainactivityIntent = new Intent(this, typeof(MainActivity));
                StartActivity(mainactivityIntent);
                Finish();
            }
            else
            {
                Toast.MakeText(this, "Authentication failed.", ToastLength.Long).Show();
                IsLogin_InProgress(false);
            }
        }
예제 #14
0
        public IActionResult Index()
        {
            string authSessionCookie = Request.Cookies["authSession"];

            bool userLoggedIn = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie);

            if (userLoggedIn)
            {
                FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;

                return(Redirect("/Game/Index"));
            }
            else
            {
                if (FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie, true))
                {
                    return(Redirect("/Auth/CheckVerificationEmail"));
                }

                return(View());
            }
        }
예제 #15
0
        public IActionResult RegisterPOST()
        {
            string email    = Request.Form["email"];
            string password = Request.Form["password"];

            UserRecordArgs userRecordArgs = new UserRecordArgs
            {
                Email         = email,
                EmailVerified = false,
                Password      = password,
                Disabled      = false
            };

            UserRecord userRecord;

            try
            {
                userRecord = FirebaseAuth.DefaultInstance.CreateUserAsync(userRecordArgs).Result;
            }
            catch (Exception e)
            {
                if (e is ArgumentException)
                {
                    return(Content("Invalid email or password. Your password may be too weak."));
                }

                if (e is FirebaseAuthException firebaseAuthException)
                {
                    return(Content(FirebaseAuthHelper.GenerateNiceErrorMessage(firebaseAuthException.AuthErrorCode)));
                }

                if (e is AggregateException aggregateException)
                {
                    foreach (Exception exception in aggregateException.InnerExceptions)
                    {
                        if (exception is ArgumentException)
                        {
                            return(Content("Invalid email or password. Your password may be too weak."));
                        }

                        if (exception is FirebaseAuthException aggregateFirebaseAuthException)
                        {
                            return(Content(FirebaseAuthHelper.GenerateNiceErrorMessage(aggregateFirebaseAuthException.AuthErrorCode)));
                        }
                    }
                }

                return(Content("Error: Unknown error occurred."));
            }

            string idTokenOrError = FirebaseAuthHelper.SignInWithEmailAndPassword(email, password);
            string idToken;

            if (idTokenOrError.StartsWith("error: "))
            {
                JObject errorJObject = JObject.Parse(idTokenOrError.Remove(0, 7));
                return(Content(FirebaseAuthHelper.GenerateNiceErrorMessage(errorJObject["message"].ToString())));
            }
            else
            {
                idToken = idTokenOrError.Remove(0, 9);
            }

            using (DatabaseContext database = new DatabaseContext())
            {
                string username = Request.Form["username"];

                if (database.Users.Any(u => u.Username == username))
                {
                    FirebaseAuth.DefaultInstance.DeleteUserAsync(userRecord.Uid).Wait();
                    return(Content("There is another user with that username, and we don't allow duplicate usernames. Sorry!"));
                }

                User user = new User
                {
                    Username    = username,
                    FirebaseUid = userRecord.Uid
                };
                database.Users.Add(user);
                database.SaveChanges();
            }

            FirebaseAuthHelper.SendVerificationEmail(idToken);

            TimeSpan expirationTimeSpan;

            if (Request.Form["remember-me"] == "on")
            {
                expirationTimeSpan = TimeSpan.FromDays(14);
            }
            else
            {
                expirationTimeSpan = TimeSpan.FromDays(1);
            }

            SessionCookieOptions options = new SessionCookieOptions()
            {
                ExpiresIn = expirationTimeSpan
            };

            try
            {
                string sessionCookie = FirebaseAuth.DefaultInstance.CreateSessionCookieAsync(idToken, options).Result;

                CookieOptions cookieOptions = new CookieOptions()
                {
                    Expires  = DateTimeOffset.UtcNow.Add(options.ExpiresIn),
                    HttpOnly = true,
                    Secure   = EnvironmentHelper.KeepCookiesSecure()
                };

                Response.Cookies.Append("authSession", sessionCookie, cookieOptions);
                return(Content("success"));
            }
            catch (FirebaseAuthException)
            {
                return(Content("Error: Failed to create a session cookie."));
            }
        }
예제 #16
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            string authSessionCookie = context.HttpContext.Request.Cookies["authSession"];

            bool userLoggedInAtAll = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie);

            if (!userLoggedInAtAll)
            {
                Uri redirectUri = new Uri(context.HttpContext.Request.GetDisplayUrl());

                string redirectPath = HttpUtility.UrlEncode(redirectUri.PathAndQuery);

                context.Result = new RedirectResult($"/Auth/LogIn?redirect={redirectPath}");

                return;
            }

            FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
            string        firebaseUid   = firebaseToken.Uid;

            context.ActionArguments.Add("authSessionCookie", authSessionCookie);

            using (DatabaseContext database = new DatabaseContext())
            {
                User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                Controller controller = (Controller)context.Controller;

                controller.ViewData["user"] = user;

                // TODO: a better admin account
                if (user.Username == "No country test")
                {
                    controller.ViewData["country"] = database.Countries.Single(c => c.CountryName == "dummycountry");

                    controller.ViewData["ministryDashboard"] = MinistryHelper.MinistryCode.None;

                    controller.ViewData["unreadEmails"]        = 5;
                    controller.ViewData["unreadNotifications"] = 0;

                    controller.ViewData["noCountry"] = false;

                    base.OnActionExecuting(context);
                    return;
                }

                bool userLoggedIn = FirebaseAuthHelper.IsUserLoggedIn(authSessionCookie);

                if (userLoggedIn)
                {
                    controller.ViewData["userLoggedIn"] = userLoggedIn;

                    try
                    {
                        Country country = database.Countries.Single(c => c.CountryName == user.CountryName);

                        controller.ViewData["country"] = country;
                    }
                    catch
                    {
                        controller.ViewData["country"] = null;
                    }

                    controller.ViewData["ministryDashboard"] = MinistryHelper.MinistryCode.None;

                    UserEmail[] userEmails   = database.UserEmails.Where(ue => ue.ReceivingUsername == user.Username).ToArray();
                    int         unreadEmails = userEmails.Where(ue => !ue.MarkedAsRead).Count();

                    Notification[] notifications       = database.Notifications.Where(n => n.Username == user.Username).ToArray();
                    int            unreadNotifications = notifications.Where(n => !n.MarkedAsRead).Count();

                    controller.ViewData["unreadEmails"]        = unreadEmails;
                    controller.ViewData["unreadNotifications"] = unreadNotifications;

                    controller.ViewData["noCountry"] = user.CountryName == null;

                    base.OnActionExecuting(context);
                    return;
                }
                else
                {
                    context.Result = new RedirectResult("/Auth/CheckVerificationEmail");

                    return;
                }
            }
        }