public ActionResult Login(LoginViewModel viewModel, string returnUrl)
        {
            if (IsAuthenticate)
            {
                return RedirectToAction("Index", "Home");
            }

            if (!ModelState.IsValid)
            {
                return View(viewModel);
            }

            var validateResult = UserBusiness.Authenticate(viewModel);

            if (!validateResult.IsSuccess)
            {
                ModelState.AddModelError("", validateResult.Message);
                return View(viewModel);
            }

            var user = (User)validateResult.Data;
            var userData = JsonConvert.SerializeObject(new PrincipalSerializeViewModel(user));
            var authTicket = new FormsAuthenticationTicket(
                1,
                user.Email,
                DateTimeHelper.UTCNow(),
                DateTimeHelper.UTCNow().AddDays(BackendHelpers.FormsAuthenticationCookieTimeout()),
                viewModel.RememberMe,
                userData);

            var encTicket = FormsAuthentication.Encrypt(authTicket);
            var faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
            Response.Cookies.Add(faCookie);

            //returnURL needs to be decoded
            var decodedUrl = string.Empty;

            if (!string.IsNullOrWhiteSpace(returnUrl))
            {
                decodedUrl = Server.UrlDecode(returnUrl);
            }

            if (Url.IsLocalUrl(decodedUrl))
            {
                return Redirect(decodedUrl);
            }

            return RedirectToAction("Index", "Home");
        }
        public BaseModel Authenticate(LoginViewModel viewModel)
        {
            try
            {
                // Supper admin
                if (viewModel.Email == BackendHelpers.SuperAdminEmail() && string.Equals(BackendHelpers.CreatePasswordHash(viewModel.Password, BackendHelpers.SuperAdminPasswordSalt()),BackendHelpers.SuperAdminPasswordHash()))
                {
                    var supperAdmin = new User
                    {
                        Email = BackendHelpers.SuperAdminEmail(),
                        FirstName = Constants.RoleName.SuperAdmin,
                        LastName = Constants.AppName,
                        Role = new Role
                        {
                            Name = Constants.RoleName.SuperAdmin
                        }
                    };

                    return new BaseModel(true, (int) HttpStatusCode.OK, supperAdmin);
                }

                // Normal user
                var user = UserRepository.GetByEmail(viewModel.Email);
                if (user == null || !string.Equals(BackendHelpers.CreatePasswordHash(viewModel.Password, user.PasswordSalt), user.PasswordHash))
                {
                    return new BaseModel(false, (int)HttpStatusCode.BadRequest, Constants.Message.InvalidLogin);
                }

                return new BaseModel(true, (int) HttpStatusCode.OK, user);
            }
            catch (Exception ex)
            {
                Provider.Instance.LogError(ex);
                return new BaseModel(false, (int)HttpStatusCode.InternalServerError, ex.InnerException?.Message ?? ex.Message);
            }
        }
        public ActionResult Login(string returnUrl)
        {
            if (IsAuthenticate)
            {
                return RedirectToAction("Index", "Home");
            }

            if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null)
            {
                returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery);
            }

            if (Url.IsLocalUrl(returnUrl) && !string.IsNullOrEmpty(returnUrl))
            {
                ViewBag.ReturnURL = returnUrl;
            }

            var loginViewModel = new LoginViewModel();

            return View(loginViewModel);
        }