예제 #1
0
        public IActionResult PrivacyPolicy()
        {
            string authSessionCookie = Request.Cookies["authSession"];

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

            ViewData["userLoggedIn"] = userLoggedIn;

            return(View());
        }
예제 #2
0
        public IActionResult Register()
        {
            string authSessionCookie = Request.Cookies["authSession"];

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

            case false:
                return(View());
            }
        }
예제 #3
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"));
            }
        }
예제 #4
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());
        }
예제 #5
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());
            }
        }
예제 #6
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());
            }
        }
예제 #7
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;
                }
            }
        }