예제 #1
0
        public virtual async Task <JsonResult> SendEmailActivationLink(SendEmailActivationLinkViewModel model)
        {
            IActiveUnitOfWork current = this._unitOfWorkManager.Current;

            current.DisableFilter(new string[] { "MayHaveTenant" });
            FuelWerx.Authorization.Users.User userByChecking = await this.GetUserByChecking(model.EmailAddress, model.TenancyName);

            FuelWerx.Authorization.Users.User user = userByChecking;
            user.SetNewEmailConfirmationCode();
            await this._userEmailer.SendEmailActivationLinkAsync(user, null);

            return(this.Json(new MvcAjaxResponse()));
        }
예제 #2
0
        public virtual async Task <ActionResult> Register(RegisterViewModel model)
        {
            ActionResult actionResult;

            AbpUserManager <Tenant, Role, FuelWerx.Authorization.Users.User> .AbpLoginResult loginResultAsync;
            Guid guid;
            Guid guid1;
            bool flag;

            AbpUserManager <Tenant, Role, FuelWerx.Authorization.Users.User> .AbpLoginResult abpLoginResult;
            TenantLogosEditDto tenantLogosEditDto = Abp.Threading.AsyncHelper.RunSync <TenantLogosEditDto>(() => this.GetCurrentTenantLogos());
            dynamic            viewBag            = this.ViewBag;

            guid = (tenantLogosEditDto.HeaderImageId.HasValue ? tenantLogosEditDto.HeaderImageId.Value : Guid.Empty);
            viewBag.TenantCompanyHeaderImageId = guid;
            dynamic obj = this.ViewBag;

            guid1 = (tenantLogosEditDto.HeaderMobileImageId.HasValue ? tenantLogosEditDto.HeaderMobileImageId.Value : Guid.Empty);
            obj.TenantCompanyHeaderMobileImageId = guid1;
            try
            {
                this.CheckSelfRegistrationIsEnabled();
                this.CheckModelState();
                if (!model.IsExternalLogin && this.UseCaptchaOnRegistration())
                {
                    RecaptchaVerificationHelper recaptchaVerificationHelper = this.GetRecaptchaVerificationHelper();
                    if (recaptchaVerificationHelper.Response.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(this.L("CaptchaCanNotBeEmpty"));
                    }
                    if (recaptchaVerificationHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success)
                    {
                        throw new UserFriendlyException(this.L("IncorrectCaptchaAnswer"));
                    }
                }
                if (!this._multiTenancyConfig.IsEnabled)
                {
                    model.TenancyName = "Default";
                }
                else if (model.TenancyName.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(this.L("TenantNameCanNotBeEmpty"));
                }
                Tenant activeTenantAsync = await this.GetActiveTenantAsync(model.TenancyName);

                bool settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "App.UserManagement.AllowSelfRegistration", activeTenantAsync.Id);

                if (!settingValueForTenantAsync)
                {
                    throw new UserFriendlyException(this.L("SelfUserRegistrationIsDisabledMessage_Detail"));
                }
                settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "App.UserManagement.IsNewRegisteredUserActiveByDefault", activeTenantAsync.Id);

                bool flag1 = settingValueForTenantAsync;
                settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "Abp.Zero.UserManagement.IsEmailConfirmationRequiredForLogin", activeTenantAsync.Id);

                bool flag2 = settingValueForTenantAsync;
                FuelWerx.Authorization.Users.User user = new FuelWerx.Authorization.Users.User()
                {
                    TenantId     = new int?(activeTenantAsync.Id),
                    Name         = model.Name,
                    Surname      = model.Surname,
                    EmailAddress = model.EmailAddress,
                    IsActive     = flag1
                };
                FuelWerx.Authorization.Users.User userName = user;
                ExternalLoginInfo externalLoginInfoAsync   = null;
                if (model.IsExternalLogin)
                {
                    externalLoginInfoAsync = await AuthenticationManagerExtensions.GetExternalLoginInfoAsync(this.AuthenticationManager);

                    if (externalLoginInfoAsync == null)
                    {
                        throw new ApplicationException("Can not external login!");
                    }
                    FuelWerx.Authorization.Users.User user1 = userName;
                    List <UserLogin> userLogins             = new List <UserLogin>();
                    UserLogin        userLogin = new UserLogin()
                    {
                        LoginProvider = externalLoginInfoAsync.Login.LoginProvider,
                        ProviderKey   = externalLoginInfoAsync.Login.ProviderKey
                    };
                    userLogins.Add(userLogin);
                    user1.Logins   = userLogins;
                    model.UserName = model.EmailAddress;
                    model.Password = FuelWerx.Authorization.Users.User.CreateRandomPassword();
                    if (string.Equals(externalLoginInfoAsync.Email, model.EmailAddress, StringComparison.InvariantCultureIgnoreCase))
                    {
                        userName.IsEmailConfirmed = true;
                    }
                }
                else if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(this.L("FormIsNotValidMessage"));
                }
                userName.UserName = model.UserName;
                userName.Password = (new PasswordHasher()).HashPassword(model.Password);
                IActiveUnitOfWork current = this._unitOfWorkManager.Current;
                current.EnableFilter(new string[] { "MayHaveTenant" });
                this._unitOfWorkManager.Current.SetFilterParameter("MayHaveTenant", "tenantId", activeTenantAsync.Id);
                userName.Roles = new List <UserRole>();
                IQueryable <Role> roles     = this._roleManager.Roles;
                List <Role>       listAsync = await(
                    from r in roles
                    where r.IsDefault
                    select r).ToListAsync <Role>();
                foreach (Role role in listAsync)
                {
                    ICollection <UserRole> userRoles = userName.Roles;
                    userRoles.Add(new UserRole()
                    {
                        RoleId = role.Id
                    });
                }
                this.CheckErrors(await this._userManager.CreateAsync(userName));
                await this._unitOfWorkManager.Current.SaveChangesAsync();

                if (!userName.IsEmailConfirmed)
                {
                    userName.SetNewEmailConfirmationCode();
                    await this._userEmailer.SendEmailActivationLinkAsync(userName, null);
                }
                if (userName.IsActive && (userName.IsEmailConfirmed || !flag2))
                {
                    if (externalLoginInfoAsync == null)
                    {
                        loginResultAsync = await this.GetLoginResultAsync(userName.UserName, model.Password, activeTenantAsync.TenancyName);

                        abpLoginResult = loginResultAsync;
                    }
                    else
                    {
                        loginResultAsync = await this._userManager.LoginAsync(externalLoginInfoAsync.Login, activeTenantAsync.TenancyName);

                        abpLoginResult = loginResultAsync;
                    }
                    if (abpLoginResult.Result != AbpLoginResultType.Success)
                    {
                        this.Logger.Warn(string.Concat("New registered user could not be login. This should not be normally. login result: ", abpLoginResult.Result));
                        abpLoginResult = null;
                    }
                    else
                    {
                        await this.SignInAsync(abpLoginResult.User, abpLoginResult.Identity, false);

                        actionResult = this.Redirect(this.Url.Action("Index", "Application"));
                        return(actionResult);
                    }
                }
                AccountController       accountController       = this;
                RegisterResultViewModel registerResultViewModel = new RegisterResultViewModel()
                {
                    TenancyName    = activeTenantAsync.TenancyName,
                    NameAndSurname = string.Concat(userName.Name, " ", userName.Surname),
                    UserName       = userName.UserName,
                    EmailAddress   = userName.EmailAddress,
                    IsActive       = userName.IsActive,
                    IsEmailConfirmationRequired = flag2
                };
                actionResult = accountController.View("RegisterResult", registerResultViewModel);
            }
            catch (UserFriendlyException userFriendlyException1)
            {
                UserFriendlyException userFriendlyException = userFriendlyException1;
                ((dynamic)this.ViewBag).IsMultiTenancyEnabled = this._multiTenancyConfig.IsEnabled;
                dynamic viewBag1 = this.ViewBag;
                flag = (model.IsExternalLogin ? false : this.UseCaptchaOnRegistration());
                viewBag1.UseCaptcha = flag;
                ((dynamic)this.ViewBag).ErrorMessage = userFriendlyException.Message;
                actionResult = this.View("Register", model);
            }
            return(actionResult);
        }
예제 #3
0
        protected virtual async Task CreateUserAsync(CreateOrUpdateUserInput input)
        {
            User tenantId = input.User.MapTo <User>();

            tenantId.TenantId = this.AbpSession.TenantId;
            if (input.User.Password.IsNullOrEmpty())
            {
                input.User.Password = User.CreateRandomPassword();
            }
            else
            {
                IdentityResult identityResult = await this.UserManager.PasswordValidator.ValidateAsync(input.User.Password);

                this.CheckErrors(identityResult);
            }
            tenantId.Password = (new PasswordHasher()).HashPassword(input.User.Password);
            tenantId.ShouldChangePasswordOnNextLogin = input.User.ShouldChangePasswordOnNextLogin;
            tenantId.Roles = new Collection <UserRole>();
            bool flag = false;

            string[] assignedRoleNames = input.AssignedRoleNames;
            for (int i = 0; i < (int)assignedRoleNames.Length; i++)
            {
                string str             = assignedRoleNames[i];
                Role   roleByNameAsync = await this._roleManager.GetRoleByNameAsync(str);

                ICollection <UserRole> roles = tenantId.Roles;
                roles.Add(new UserRole()
                {
                    RoleId = roleByNameAsync.Id
                });
                if (roleByNameAsync.DisplayName == this.L("KeyName_CustomersRole"))
                {
                    flag = true;
                }
            }
            assignedRoleNames = null;
            this.CheckErrors(await this.UserManager.CreateAsync(tenantId));
            await this.CurrentUnitOfWork.SaveChangesAsync();

            if (flag)
            {
                IRepository <Customer, long> repository = this._customerRepository;
                List <Customer> allListAsync            = await repository.GetAllListAsync((Customer m) => (int?)m.TenantId == tenantId.TenantId && m.UserId.HasValue && m.UserId == (long?)tenantId.Id);

                if (!allListAsync.Any <Customer>())
                {
                    Customer customer = new Customer()
                    {
                        AllowBillPay = false,
                        BusinessName = null,
                        FirstName    = tenantId.Name,
                        LastName     = tenantId.Surname,
                        Email        = tenantId.EmailAddress,
                        IsActive     = true,
                        PaymentAssistanceParticipant = false,
                        TitleId  = null,
                        UserId   = new long?(tenantId.Id),
                        TenantId = tenantId.TenantId.Value
                    };
                    await this._customerRepository.InsertAsync(customer);

                    await this.CurrentUnitOfWork.SaveChangesAsync();
                }
            }
            if (input.SendActivationEmail)
            {
                tenantId.SetNewEmailConfirmationCode();
                await this._userEmailer.SendEmailActivationLinkAsync(tenantId, input.User.Password);
            }
        }