public ActionResult ChangePassword(ChangePassword model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = DB.Account.Single(x => x.Id == CurrentUser.Id);

            user.Password        = Md5HashHelper.GetHash(model.Pass);
            user.PasswordUpdated = DateTime.Now;
            DB.SaveChanges();

            Mails.SendPasswordChangeMessage(user, model.Pass);
            SuccessMessage("Новый пароль сохранен и отправлен на ваш email: " + user.Login);
            return(RedirectToAction("Index", "Profile"));
        }
        public ActionResult PasswordRecovery(PasswordUpdate model)
        {
            if (String.IsNullOrEmpty(model.login))
            {
                ErrorMessage("Вы не указали eMail");
                return(View(model));
            }

            var user = DB.Account.FirstOrDefault(x => x.Login == model.login && x.TypeUser == (SByte)TypeUsers.ProducerUser);

            // пользователь не найден, отсылаем на домашнюю с ошибкой
            if (user == null)
            {
                ErrorMessage($"Пользователь с email {model.login} не найден, обращайтесь на {ConfigurationManager.AppSettings["MailFrom"]}");
                return(View(model));
            }

            // если новый или активный: отсылаем новый пароль на почту
            if (user.EnabledEnum == UserStatus.New || user.EnabledEnum == UserStatus.Active)
            {
                var password = GetRandomPassword();
                user.Password        = Md5HashHelper.GetHash(password);
                user.PasswordUpdated = DateTime.Now;
                DB.Entry(user).State = EntityState.Modified;
                DB.SaveChanges();
                Mails.SendPasswordRecoveryMessage(user, password);

                SuccessMessage($"Новый пароль отправлен на ваш email {model.login}");
            }

            // если заблокирован
            else if (user.EnabledEnum == UserStatus.Blocked)
            {
                ErrorMessage($"Ваша учетная запись заблокирована, обращайтесь на {ConfigurationManager.AppSettings["MailFrom"]}");
            }

            // если запросивший регистрацию
            else if (user.EnabledEnum == UserStatus.Request)
            {
                SuccessMessage($"Ваша заявка на регистрацию еще не рассмотрена, обращайтесь на {ConfigurationManager.AppSettings["MailFrom"]}");
            }

            return(Redirect("~"));
        }
예제 #3
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (!string.IsNullOrWhiteSpace(Email))
            {
                var hash = Md5HashHelper.GetHash(Email);

                output.TagName = "img";
                if (!string.IsNullOrWhiteSpace(Class))
                {
                    output.Attributes.Add("class", Class);
                }

                if (!string.IsNullOrWhiteSpace(Alt))
                {
                    output.Attributes.Add("alt", Alt);
                }

                output.Attributes.Add("src", GetAvatarUrl(hash, Size));
                output.TagMode = TagMode.SelfClosing;
            }
        }
        public ActionResult Edit(UserEdit model)
        {
            var user = DB.Account.Single(x => x.Id == model.Id);

            if (!ModelState.IsValid)
            {
                SetChangeModel(user, model);
                ViewBag.IsControlPanelUser = user.TypeUser == (sbyte)TypeUsers.ControlPanelUser;
                return(View(model));
            }

            var activated = false;

            if (Request.Form["activate"] != null)
            {
                if (user.EnabledEnum == UserStatus.Request)
                {
                    activated = true;
                }
                user.EnabledEnum = UserStatus.New;
            }
            else if (Request.Form["block"] != null)
            {
                user.EnabledEnum = UserStatus.Blocked;
            }

            var groups = DB.AccountGroup.Where(x => model.AccountGroupIds.Contains(x.Id));

            user.AccountGroup.Clear();
            foreach (var group in groups)
            {
                user.AccountGroup.Add(group);
            }

            user.AccountRegion.Clear();
            foreach (var regionCode in model.AccountRegionIds)
            {
                user.AccountRegion.Add(new AccountRegion()
                {
                    AccountId = user.Id, RegionId = regionCode
                });
            }

            var password = "";

            // если подтверждение регистрации пользователя
            if (activated)
            {
                password             = GetRandomPassword();
                user.Password        = Md5HashHelper.GetHash(password);
                user.PasswordUpdated = DateTime.Now;
            }

            user.AppointmentId        = model.AppointmentId;
            user.LastUpdatePermisison = DateTime.Now;
            DB.SaveChanges();

            // отправка сообщения пользователю с паролем
            if (activated)
            {
                Mails.SendAccountVerificationMessage(user, password);
            }

            SuccessMessage("Изменения успешно сохранены");
            // если админ - на список админов
            if (user.TypeUser == (sbyte)TypeUsers.ControlPanelUser)
            {
                return(RedirectToAction("AdminList"));
            }

            return(RedirectToAction("Index"));
        }
        private Account SaveAccount(AccountCompany accountCompany, RegViewModel Reg_ViewModel = null, RegDomainViewModel RegDomain_ViewModel = null, RegNotProducerViewModel RegNotProducer_ViewModel = null, string Pass = null)
        {
            var newAccount = new Account();

            newAccount.EnabledEnum = UserStatus.New;
            newAccount.TypeUser    = (sbyte)TypeUsers.ProducerUser;
            newAccount.CompanyId   = accountCompany.Id;

            // регистрация первого пользователя компании
            if (Reg_ViewModel != null)
            {
                newAccount.Login           = Reg_ViewModel.login;
                newAccount.Password        = Md5HashHelper.GetHash(Pass);
                newAccount.PasswordUpdated = DateTime.Now;
                newAccount.FirstName       = Reg_ViewModel.FirstName;
                newAccount.LastName        = Reg_ViewModel.LastName;
                newAccount.OtherName       = Reg_ViewModel.OtherName;
                newAccount.Name            = Reg_ViewModel.LastName + " " + Reg_ViewModel.FirstName + " " + Reg_ViewModel.OtherName;
                newAccount.Phone           = Reg_ViewModel.PhoneNumber;
                newAccount.AppointmentId   = Reg_ViewModel.AppointmentId;
            }

            // регистрация второго и последующих пользователей производителя
            if (RegDomain_ViewModel != null)
            {
                newAccount.Login           = RegDomain_ViewModel.Mailname + "@" + DB.CompanyDomainName.Single(x => x.Id == RegDomain_ViewModel.EmailDomain).Name;
                newAccount.Password        = Md5HashHelper.GetHash(Pass);
                newAccount.PasswordUpdated = DateTime.Now;
                newAccount.FirstName       = RegDomain_ViewModel.FirstName;
                newAccount.LastName        = RegDomain_ViewModel.LastName;
                newAccount.OtherName       = RegDomain_ViewModel.OtherName;
                newAccount.Name            = RegDomain_ViewModel.LastName + " " + RegDomain_ViewModel.FirstName + " " + RegDomain_ViewModel.OtherName;
                newAccount.Phone           = RegDomain_ViewModel.PhoneNumber;
                newAccount.AppointmentId   = RegDomain_ViewModel.AppointmentId;
            }

            // Если компания в списке отсутствует
            if (RegNotProducer_ViewModel != null)
            {
                // создали новую должность
                var appointment = new AccountAppointment()
                {
                    Name = RegNotProducer_ViewModel.Appointment, GlobalEnabled = false
                };
                DB.Entry(appointment).State = EntityState.Added;
                DB.SaveChanges();

                newAccount.Login         = RegNotProducer_ViewModel.login;
                newAccount.FirstName     = RegNotProducer_ViewModel.FirstName;
                newAccount.LastName      = RegNotProducer_ViewModel.LastName;
                newAccount.OtherName     = RegNotProducer_ViewModel.OtherName;
                newAccount.Name          = RegNotProducer_ViewModel.LastName + " " + RegNotProducer_ViewModel.FirstName + " " + RegNotProducer_ViewModel.OtherName;
                newAccount.Phone         = RegNotProducer_ViewModel.PhoneNumber;
                newAccount.AppointmentId = appointment.Id;
                // особый статус
                newAccount.EnabledEnum = UserStatus.Request;
            }

            DB.Entry(newAccount).State = EntityState.Added;
            DB.SaveChanges();
            return(newAccount);
        }
        public ActionResult UserAuthentication(LoginValidation user)
        {
            // валидация
            if (String.IsNullOrEmpty(user.login) || String.IsNullOrEmpty(user.password))
            {
                ErrorMessage("Некорректно введены данные. Вашим логином является email, указанный при регистрации. Пароль при регистрации был выслан на ваш email");
                ViewBag.CurrentUser = null;
                return(Redirect("~"));
            }

            // проверка наличия в БД
            var thisUser = DB.Account.SingleOrDefault(x => x.Login == user.login && x.TypeUser == SbyteTypeUser);

            if (thisUser == null)
            {
                ErrorMessage("Пользователь не найден. Вашим логином является email, указанный при регистрации");
                ViewBag.CurrentUser = null;
                return(Redirect("~"));
            }

            // проверка пароля
            var passHash = Md5HashHelper.GetHash(user.password);

            if (passHash != thisUser.Password)
            {
                ErrorMessage("Неправильно введен пароль");
                ViewBag.CurrentUser = null;
                return(Redirect("~"));
            }

            // если логинится не впервый раз и не заблокирован
            if (thisUser.EnabledEnum == UserStatus.Active)
            {
                CurrentUser = thisUser;
                return(Autentificate());
            }

            // если логинится впервые
            else if (thisUser.EnabledEnum == UserStatus.New)
            {
                var group = DB.AdminGroup();
                group.Account.Add(thisUser);
                DB.SaveChanges();

                thisUser.PasswordUpdated = DateTime.Now;
                thisUser.EnabledEnum     = UserStatus.Active;
                DB.Entry(thisUser).State = EntityState.Modified;
                DB.SaveChanges();

                CurrentUser = thisUser;
                SuccessMessage("Вы успешно подтвердили свою регистрацию на сайте");
                return(Autentificate());
            }

            // аккаунт заблокирован
            else if (thisUser.EnabledEnum == UserStatus.Blocked)
            {
                CurrentUser = null;
                ErrorMessage("Ваша учетная запись заблокирована, обращайтесь на " + ConfigurationManager.AppSettings["MailFrom"]);
                return(Redirect("~"));
            }

            // заявка на регистрацию
            else if (thisUser.EnabledEnum == UserStatus.Request)
            {
                CurrentUser = null;
                SuccessMessage("Ваша заявка на регистрацию еще не рассмотрена, обращайтесь на " + ConfigurationManager.AppSettings["MailFrom"]);
                return(Redirect("~"));
            }
            return(Redirect("~"));
        }