Example #1
0
        public ActionResult SignUpWithKey(InviteSignUpWithKeyViewModel model, bool?isdialog)
        {
            if (ModelState.IsValid)
            {
                string key = string.IsNullOrWhiteSpace(model.InviteKey) ? null : model.InviteKey.Trim().ToLower();

                if (key != string.Empty)
                {
                    string email = string.IsNullOrWhiteSpace(model.Email) ? null : model.Email.Trim().ToLower();

                    key = key.Replace("`", "");
                    var inviteEntity = InviteService.GetInvite(key);

                    if (inviteEntity == null)
                    {
                        throw new BusinessLogicException("Вы не можете зарегистрироваться, так как вы указали неправильный код приглашения");
                    }

                    if (inviteEntity.State == (byte)InviteState.Requested)
                    {
                        throw new BusinessLogicException("Вы не можете зарегистрироваться, так как ваш запрос еще не рассмотрели");
                    }

                    if (inviteEntity.State == (byte)InviteState.Used)
                    {
                        throw new BusinessLogicException("Вы не можете  зарегистрироваться, так как данный ключ уже был использован");
                    }

                    if (inviteEntity.State != (byte)InviteState.Used || inviteEntity.State != (byte)InviteState.Requested)
                    {
                        var phone = UserService.NormalizePhoneNumber(model.PhoneNumber);

                        var encryptedPhoneNumber = CryptographyService.DecryptPhone(phone);
                        var existedUsersCount    = DataService.PerThread.BaseUserSet.OfType <User>().Count(u => u.EncryptedPhoneNumber == encryptedPhoneNumber);
                        if (existedUsersCount != 0)
                        {
                            throw new ValidationException("Пользователь с таким номером телефона уже зарегистрирован");
                        }

                        var user = (User)AccountService.SignUp(email, email, model.Password);
                        user.FirstName    = inviteEntity.Name;
                        user.SurName      = inviteEntity.Surname;
                        user.Patronymic   = inviteEntity.Patronymic;
                        user.InviteTicket = inviteEntity;
                        user.PhoneNumber  = phone;
                        user.Info         = inviteEntity.UserInfo;
                        user.UTCOffset    = (short)TimeSpan.Parse(model.UTCOffset).TotalMinutes;

                        UserService.NormalizePhoneNumber(user);

                        inviteEntity.State = (byte)InviteState.Used;

                        DataService.PerThread.SaveChanges();
                        AccountService.TrySignIn(email, model.Password, true, HttpContext.Request.UserHostAddress);

                        MonitoringService.AsynchLogUserRegistration(user.Id, HttpContext.Request.UserHostAddress);

                        return(RedirectToAction("index", "user", null));
                    }
                }
            }

            if (isdialog.HasValue)
            {
                if (isdialog.Value)
                {
                    return(View("SignUpWithKey", "_LightLayout", model));
                }
            }

            return(View(model));
        }