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())); }
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); }
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); } }