private void AddBillingOfficePhone(BillingOfficePhoneDto billingOfficePhoneDto, BillingOffice billingOffice)
        {
            var phoneType = _mappingHelper.MapLookupField <BillingOfficePhoneType> (billingOfficePhoneDto.BillingOfficePhoneType);

            var phoneNumber = new PhoneBuilder()
                              .WithPhoneNumber(billingOfficePhoneDto.PhoneNumber)
                              .WithPhoneExtensionNumber(billingOfficePhoneDto.Extension)
                              .Build();

            var billingOfficePhone = new BillingOfficePhone(phoneType, phoneNumber);

            billingOffice.AddPhoneNumber(billingOfficePhone);
        }
Example #2
0
        bool IService.SendMessage(string phoneTo, string messageText)
        {
            //todo setError(null);

            var phone = PhoneBuilder.ParseString(phoneTo);

            if (!phone.IsCorrect)
            {
                throw new ArgumentException("Некорректный номер телефона: " + phone.Error, nameof(phoneTo));
            }

            var message = new Message()
            {
                To            = new Contact <string>("", phone.ToString()),
                Subject       = string.Empty,
                Body          = messageText,
                IdMessageType = IdMessageType
            };

            return(RegisterMessage(message));
        }
Example #3
0
        public JsonResult RegisterSave(Model.Register model)
        {
            var answer = JsonAnswer <User>();

            try
            {
                if (ModelState.IsValid)
                {
                    using (var db = new CoreContext())
                    {
                        if (!string.IsNullOrEmpty(model.email))
                        {
                            if (db.Users.Where(x => x.email.ToLower() == model.email.ToLower()).Count() > 0)
                            {
                                ModelState.AddModelError(nameof(model.email), "Этот email-адрес уже используется!");
                            }
                        }

                        if (!string.IsNullOrEmpty(model.phone))
                        {
                            var phone = PhoneBuilder.ParseString(model.phone);
                            if (!phone.IsCorrect)
                            {
                                ModelState.AddModelError(nameof(model.phone), phone.Error);
                            }
                            else
                            {
                                model.phone = phone.ParsedPhoneNumber;
                                if (db.Users.Where(x => x.phone.ToLower() == model.phone.ToLower()).Count() > 0)
                                {
                                    ModelState.AddModelError(nameof(model.phone), "Этот номер телефона уже используется!");
                                }
                            }
                        }
                    }
                }

                if (ModelState.IsValid)
                {
                    var preparedData = new Model.PreparedForRegister();
                    var symbols      = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
                    var salt         = "";

                    var rand = new Random();
                    for (int i = 0; i < 5; i++)
                    {
                        var index = rand.Next(0, symbols.Length - 1);
                        salt = salt + symbols[index];
                    }

                    preparedData.salt = salt;

                    var regMode = AppCore.WebConfig.register_mode;
                    switch (regMode)
                    {
                    case RegisterMode.SelfConfirmation:
                        preparedData.State = Core.Db.UserState.RegisterNeedConfirmation;
                        break;

                    case RegisterMode.Immediately:
                        preparedData.State = Core.Db.UserState.Active;
                        break;

                    case RegisterMode.ManualCheck:
                        preparedData.State = Core.Db.UserState.RegisterWaitForModerate;
                        break;
                    }

                    preparedData.email = model.email;
                    preparedData.phone = model.phone;

                    preparedData.IP_reg   = Request.ServerVariables["REMOTE_ADDR"];
                    preparedData.password = model.password;

                    preparedData.name = model.name;

                    preparedData.DateReg = DateTime.Now;
                    preparedData.Fields.CopyValuesFrom(model.Fields);

                    preparedData.Superuser = 0;

                    var isSuperuserNeeded = AppCore.GetModulesManager().GetModule <Auth.ModuleAuth>()?.IsSuperuserNeeded() ?? false;
                    if (isSuperuserNeeded)
                    {
                        preparedData.Superuser = 1;
                        preparedData.State     = Core.Db.UserState.Active;
                    }

                    var result = Module.RegisterUser(preparedData);
                    if (isSuperuserNeeded && result.Success)
                    {
                        result.Message += " Учетная запись была помечена как \"Суперпользователь\" и немедленно активирована.";
                    }
                    answer = result;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("RegisterSave: {0}", ex.Message);
                answer.FromException(ex);
            }

            return(ReturnJson(answer));
        }
Example #4
0
        public ActionResult profileSave([Bind(Prefix = nameof(Design.Model.Profile.Edit))] Model.ProfileEdit model)
        {
            var answer = JsonAnswer <User>();
            var prefix = nameof(Design.Model.Profile.Edit) + ".";

            try
            {
                //if (!this.IsReCaptchaValid && !AppCore.GetUserContextManager().GetCurrentUserContext().IsSuperuser) ModelState.AddModelError("ReCaptcha", "Вы точно не робот?");
                if (model == null)
                {
                    throw new Exception("Нет переданных данных.");
                }

                using (var db = new UnitOfWork <User>())
                    using (var trans = db.CreateScope())
                    {
                        var data = db.Repo1.Where(x => x.IdUser == model.ID).FirstOrDefault();
                        if (data == null)
                        {
                            throw new Exception("Указанный пользователь не найден.");
                        }
                        else
                        {
                            Module.CheckPermissionToEditOtherUser(model.ID);
                        }

                        if (ModelState.IsValid)
                        {
                            if (ModelState.Keys.Contains(prefix + nameof(model.email)))
                            {
                                model.email = model.email?.ToLower();
                                data.email  = data.email?.ToLower();
                                if (data.email != model.email)
                                {
                                    var others = db.Repo1.AsNoTracking().Where(x => x.email.ToLower() == model.email && x.IdUser != data.IdUser).Count();
                                    if (others > 0)
                                    {
                                        ModelState.AddModelError(prefix + nameof(model.email), "Такой email-адрес уже используется!");
                                    }
                                    else
                                    {
                                        data.email = model.email;
                                    }
                                }
                            }

                            if (ModelState.Keys.Contains(prefix + nameof(model.phone)))
                            {
                                model.phone = model.phone?.ToLower();
                                data.phone  = data.phone?.ToLower();
                                if (data.phone != model.phone)
                                {
                                    if (string.IsNullOrEmpty(model.phone))
                                    {
                                        model.phone = null;
                                    }
                                    else
                                    {
                                        var others = db.Repo1.AsNoTracking().Where(x => x.phone.ToLower() == model.phone && x.IdUser != data.IdUser).Count();
                                        if (others > 0)
                                        {
                                            ModelState.AddModelError(prefix + nameof(model.phone), "Такой номер телефона уже используется!");
                                        }
                                        else
                                        {
                                            var phone = PhoneBuilder.ParseString(model.phone);
                                            if (!phone.IsCorrect)
                                            {
                                                ModelState.AddModelError(prefix + nameof(model.phone), phone.Error);
                                            }
                                            else
                                            {
                                                data.phone = phone.ParsedPhoneNumber;
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        if (ModelState.IsValid)
                        {
                            if (ModelState.Keys.Contains(prefix + nameof(model.name)))
                            {
                                data.name = model.name;
                            }
                            if (ModelState.Keys.Contains(prefix + nameof(model.IdPhoto)))
                            {
                                if (model.IdPhoto.HasValue)
                                {
                                    AppCore.Get <FileManager>().UpdateExpiration(model.IdPhoto.Value, null);
                                }
                                data.IdPhoto = model.IdPhoto;
                            }
                            if (ModelState.Keys.Contains(prefix + nameof(model.Comment)))
                            {
                                data.Comment = model.Comment;
                            }

                            data.Fields.CopyValuesFrom(model.Fields, fdata => ModelState.Keys.Contains(prefix + "Fields.fieldValue_" + fdata.IdField));
                            data.DateChange = DateTime.Now.Timestamp();

                            db.SaveChanges();

                            trans.Commit();

                            answer.Data = data;

                            answer.FromSuccess("Сохранение данных прошло успешно!");
                        }
                    }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("ProfileSave: {0}", ex);
                answer.FromException(ex);
            }

            return(ReturnJson(answer));
        }
Example #5
0
 public void SetPhoneBuilder(PhoneBuilder phoneBuilder)
 {
     this.phoneBuilder = phoneBuilder;
 }
Example #6
0
        private ExecutionAuthResult CheckLogin(int idUser, string login, string password, DB.CoreContext db, out DB.User outData)
        {
            outData = null;

            try
            {
                if (idUser <= 0 && string.IsNullOrEmpty(login))
                {
                    return(new ExecutionAuthResult(eAuthResult.WrongAuthData, "Не указаны реквизиты для авторизации!"));
                }

                List <DB.User> query           = null;
                bool           directAuthorize = false;

                // Если в $user передан id и $password не передан вообще.
                if (idUser > 0)
                {
                    query           = db.Users.Where(x => x.IdUser == idUser).ToList();
                    directAuthorize = true;
                }

                // Если Email
                if (query == null && login.isEmail())
                {
                    switch (AppCore.WebConfig.userAuthorizeAllowed)
                    {
                    case eUserAuthorizeAllowed.Nothing:
                        return(new ExecutionAuthResult(eAuthResult.AuthDisabled, "Авторизация запрещена."));

                    case eUserAuthorizeAllowed.OnlyPhone:
                        return(new ExecutionAuthResult(eAuthResult.AuthMethodNotAllowed, "Авторизация возможна только по номеру телефона."));

                    case eUserAuthorizeAllowed.EmailAndPhone:
                        query = (from p in db.Users where string.Compare(p.email, login, true) == 0 select p).ToList();
                        break;

                    case eUserAuthorizeAllowed.OnlyEmail:
                        query = (from p in db.Users where string.Compare(p.email, login, true) == 0 select p).ToList();
                        break;
                    }
                }

                // Если номер телефона
                if (query == null)
                {
                    var phone = PhoneBuilder.ParseString(login);
                    if (phone.IsCorrect)
                    {
                        switch (AppCore.WebConfig.userAuthorizeAllowed)
                        {
                        case eUserAuthorizeAllowed.Nothing:
                            return(new ExecutionAuthResult(eAuthResult.AuthDisabled, "Авторизация запрещена."));

                        case eUserAuthorizeAllowed.OnlyEmail:
                            return(new ExecutionAuthResult(eAuthResult.AuthMethodNotAllowed, "Авторизация возможна только через электронную почту."));

                        case eUserAuthorizeAllowed.EmailAndPhone:
                            query = (from p in db.Users where string.Compare(p.phone, phone.ParsedPhoneNumber, true) == 0 select p).ToList();
                            break;

                        case eUserAuthorizeAllowed.OnlyPhone:
                            query = (from p in db.Users where string.Compare(p.phone, phone.ParsedPhoneNumber, true) == 0 select p).ToList();
                            break;
                        }
                    }
                    else
                    {
                        if (!login.isEmail())
                        {
                            return(new ExecutionAuthResult(eAuthResult.WrongAuthData, "Переданные данные не являются ни номером телефона, ни адресом электронной почты."));
                        }
                    }
                }

                if (query == null)
                {
                    return(new ExecutionAuthResult(eAuthResult.UnknownError, "Что-то пошло не так во время авторизации."));
                }

                if (query.Count == 1)
                {
                    var res = query.First();

                    if (directAuthorize || res.password == UsersExtensions.hashPassword(password))
                    {
                        outData = res;
                        return(new ExecutionAuthResult(eAuthResult.Success));
                    }
                    else
                    {
                        return(new ExecutionAuthResult(eAuthResult.WrongPassword, "Неверный пароль."));
                    }
                }
                else if (query.Count > 1)
                {
                    AppCore.Get <MessagingManager <WebApplication> >().GetCriticalMessagesReceivers().ForEach(x => x.SendToAdmin("Одинаковые реквизиты входа!", "Найдено несколько пользователей с логином '" + login + "'"));
                    return(new ExecutionAuthResult(eAuthResult.MultipleFound, "Найдено несколько пользователей с логином '" + login + "'. Обратитесь к администратору для решения проблемы."));
                }
                else
                {
                    return(new ExecutionAuthResult(eAuthResult.NothingFound, $"Пользователь '{login}' не найден в базе данных."));
                }
            }
            catch (Exception ex)
            {
                this.RegisterEvent(EventType.Error, "Ошибка во время поиска и проверки пользователя", $"IdUser={idUser}, Login='******'.", null, ex);
                return(new ExecutionAuthResult(eAuthResult.UnknownError, "Неизвестная ошибка во время проверки авторизации."));
            }
        }