Ejemplo n.º 1
0
        public virtual ActionResult Login(Model.AuthLoginData model)
        {
            var message = "";

            try
            {
                if (!AppCore.GetUserContextManager().GetCurrentUserContext().IsGuest)
                {
                    throw new BehaviourException("Вы уже авторизованы!");
                }

                if (string.IsNullOrEmpty(model.login))
                {
                    throw new BehaviourException("Некорректно введен логин!");
                }
                if (string.IsNullOrEmpty(model.pass))
                {
                    throw new BehaviourException("Некорректно введен пароль!");
                }

                if (ModelState.IsValid)
                {
                    var result = AppCore.Get <WebUserContextManager>().CreateUserContext(model.login, model.pass, out var userContext, out var resultReason);
                    if (result == eAuthResult.Success)
                    {
                        AppCore.Get <Binding.Providers.SessionBinder>().BindUserContextToRequest(userContext);
                        AppCore.GetUserContextManager().SetCurrentUserContext(userContext);
                        //message = "Авторизация прошла успешно!";
                    }
                    else
                    {
                        throw new BehaviourException(resultReason);
                    }
                }
            }
            catch (BehaviourException ex)
            {
                Module.RegisterEvent(EventType.Warning, "Ошибка авторизации", ex.Message, ex.InnerException);
                message = ex.Message;
            }
            catch (Exception ex)
            {
                Module.RegisterEvent(EventType.Warning, "Ошибка авторизации - непредвиденная", ex.Message, ex.InnerException);
                message = "Неожиданная ошибка во время авторизации. Попробуйте еще раз или обратитесь в техническую поддержку.";
            }

            if (!ModelState.IsValid || !string.IsNullOrEmpty(message))
            {
                this.RegisterEventInvalidModel("Форма авторизации", ignoreParamsKeys: new List <string>()
                {
                    nameof(model.pass)
                });
            }

            if (!AppCore.GetUserContextManager().GetCurrentUserContext().IsGuest)
            {
                if (!string.IsNullOrEmpty(model?.urlFrom) && Url.IsLocalUrl(model.urlFrom))
                {
                    return(new RedirectResult(model.urlFrom, false));
                }

                var redirect = Module.GetRememberedUserContextRequestedAddressWhenRedirectedToAuthorization();
                if (redirect != null)
                {
                    return(new RedirectResult(redirect.ToString(), false));
                }
            }

            this.assign("authorized", !AppCore.GetUserContextManager().GetCurrentUserContext().IsGuest);

            return(View("login.cshtml", new Design.Model.Login()
            {
                Result = message
            }));
        }
Ejemplo n.º 2
0
        public ActionResult LoginJson(Model.AuthLoginData model)
        {
            var success = false;
            var message = "";

            try
            {
                if (!AppCore.GetUserContextManager().GetCurrentUserContext().IsGuest)
                {
                    throw new BehaviourException("Вы уже авторизованы!");
                }

                if (string.IsNullOrEmpty(model.login))
                {
                    throw new BehaviourException("Некорректно введен логин!");
                }
                if (string.IsNullOrEmpty(model.pass))
                {
                    throw new BehaviourException("Некорректно введен пароль!");
                }

                if (ModelState.IsValid)
                {
                    var result = AppCore.Get <WebUserContextManager>().CreateUserContext(model.login, model.pass, out var userContext, out var resultReason);
                    switch (result)
                    {
                    case eAuthResult.Success:
                        AppCore.Get <Binding.Providers.SessionBinder>().BindUserContextToRequest(userContext);
                        AppCore.GetUserContextManager().SetCurrentUserContext(userContext);
                        message = "Авторизация прошла успешно!";
                        success = true;
                        break;

                    case eAuthResult.AuthDisabled:
                    case eAuthResult.AuthMethodNotAllowed:
                    case eAuthResult.BlockedUntil:
                    case eAuthResult.MultipleFound:
                    case eAuthResult.NothingFound:
                    case eAuthResult.RegisterDecline:
                    case eAuthResult.RegisterNeedConfirmation:
                    case eAuthResult.RegisterWaitForModerate:
                    case eAuthResult.WrongAuthData:
                    case eAuthResult.Disabled:
                    case eAuthResult.YetAuthorized:
                        ModelState.AddModelError(nameof(model.login), resultReason);
                        break;

                    case eAuthResult.WrongPassword:
                        ModelState.AddModelError(nameof(model.pass), resultReason);
                        break;

                    default:
                        throw new BehaviourException(resultReason);
                    }
                }
            }
            catch (BehaviourException ex)
            {
                Module.RegisterEvent(EventType.Warning, "Ошибка авторизации", ex.Message, ex.InnerException);
                message = ex.Message;
            }
            catch (Exception ex)
            {
                Module.RegisterEvent(EventType.Warning, "Ошибка авторизации - непредвиденная", ex.Message, ex.InnerException);
                message = "Неожиданная ошибка во время авторизации. Попробуйте еще раз или обратитесь в техническую поддержку.";
            }

            if (!ModelState.IsValid || !string.IsNullOrEmpty(message))
            {
                this.RegisterEventInvalidModel("Форма авторизации JSON", ignoreParamsKeys: new List <string>()
                {
                    nameof(model.pass)
                });
            }

            return(this.ReturnJson(success, message, new
            {
                authorized = !AppCore.GetUserContextManager().GetCurrentUserContext().IsGuest,
                admin = this.Module.CheckPermission(ModulesConstants.PermissionManage)
            }));
        }