/// <summary> /// 检查验证码 /// </summary> /// <returns></returns> private async Task CheckCaptcha(RegisterTenantInput input) { var useCaptchaOnRegistration = SettingManager.GetSettingValueForApplication <bool>(AppSettings.TenantManagement.UseCaptchaOnRegistration); if (DebugHelper.IsDebug) { useCaptchaOnRegistration = false; } if (!useCaptchaOnRegistration) { return; } await _captchaValidator.ValidateAsync(input.CaptchaResponse); }
public async Task <RegisterTenantResult> Create(RegisterTenantInput input, CancellationToken ct) { using (DataFilter.Disable <IMultiTenant>()) { var existsTenant = await TenantRepository.FindByNameAsync(input.Name, false, ct); if (existsTenant != null) { throw new BusinessException(ScoringDomainErrorCodes.TenantAlreadyExists) .WithData("name", input.Name); } } // Create tenant var tenant = await TenantManager.CreateAsync(input.Name); tenant = await TenantRepository.InsertAsync(tenant, true, ct); IdentityUser adminIdentity; using (CurrentTenant.Change(tenant.Id)) { await DataSeeder.SeedAsync( new DataSeedContext(tenant.Id) .WithProperty("AdminEmail", input.AdminEmailAddress) .WithProperty("AdminPassword", input.AdminPassword) ); adminIdentity = await UserManager.FindByEmailAsync(input.AdminEmailAddress); } var adminTokenDto = new RegisterAdminTokenDto(await AuthJwtProvider.GenerateJwt(adminIdentity, ct)); var tenantDto = ObjectMapper.Map <Tenant, TenantDto>(tenant); return(new RegisterTenantResult(adminTokenDto, tenantDto)); }
public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input) { if (input.EditionId.HasValue) { await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType, input.Gateway, input.PaymentId); } else { await CheckRegistrationWithoutEdition(); } using (CurrentUnitOfWork.SetTenantId(null)) { CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { await _recaptchaValidator.ValidateAsync(input.CaptchaResponse); } //Getting host-specific settings var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault); var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin); DateTime?subscriptionEndDate = null; var isInTrialPeriod = false; if (input.EditionId.HasValue) { isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial; if (isInTrialPeriod) { var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value); subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0); } } var tenantId = await _tenantManager.CreateWithAdminUserAsync( input.TenancyName, input.Name, input.AdminPassword, input.AdminEmailAddress, null, isNewRegisteredTenantActiveByDefault, input.EditionId, false, true, subscriptionEndDate, isInTrialPeriod, AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName) ); Tenant tenant; if (input.SubscriptionStartType == SubscriptionStartType.Paid) { if (!input.Gateway.HasValue) { throw new Exception("Gateway is missing!"); } var payment = await _subscriptionPaymentRepository.GetByGatewayAndPaymentIdAsync( input.Gateway.Value, input.PaymentId ); tenant = await _tenantManager.UpdateTenantAsync( tenantId, true, false, payment.PaymentPeriodType, payment.EditionId, EditionPaymentType.NewRegistration); await _subscriptionPaymentRepository.UpdateByGatewayAndPaymentIdAsync(input.Gateway.Value, input.PaymentId, tenantId, SubscriptionPaymentStatus.Completed); } else { tenant = await TenantManager.GetByIdAsync(tenantId); } await _appNotifier.NewTenantRegisteredAsync(tenant); if (input.EditionId.HasValue && input.Gateway.HasValue && !input.PaymentId.IsNullOrEmpty()) { _paymentCache.RemoveCacheItem(input.Gateway.Value, input.PaymentId); } return(new RegisterTenantOutput { TenantId = tenant.Id, TenancyName = input.TenancyName, Name = input.Name, UserName = AbpUserBase.AdminUserName, EmailAddress = input.AdminEmailAddress, IsActive = tenant.IsActive, IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin, IsTenantActive = tenant.IsActive }); } }
public virtual async Task <ActionResult> Register(RegisterTenantInput model) { try { if (UseCaptchaOnRegistration()) { model.CaptchaResponse = HttpContext.Request.Form[RecaptchaValidator.RecaptchaResponseKey]; } var result = await _tenantRegistrationAppService.RegisterTenant(model); CurrentUnitOfWork.SetTenantId(result.TenantId); var user = await _userManager.FindByNameAsync(AbpUserBase.AdminUserName); //Directly login if possible if (result.IsTenantActive && result.IsActive && !result.IsEmailConfirmationRequired && !_webUrlService.SupportsTenancyNameInUrl) { var loginResult = await GetLoginResultAsync(user.UserName, model.AdminPassword, model.TenancyName); if (loginResult.Result == AbpLoginResultType.Success) { await _signInManager.SignOutAsync(); await _signInManager.SignInAsync(loginResult.Identity, false); SetTenantIdCookie(result.TenantId); return(Redirect(Url.Action("Index", "Home", new { area = "AppAreaName" }))); } Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result); } //Show result page var resultModel = ObjectMapper.Map <TenantRegisterResultViewModel>(result); resultModel.TenantLoginAddress = _webUrlService.SupportsTenancyNameInUrl ? _webUrlService.GetSiteRootAddress(model.TenancyName).EnsureEndsWith('/') + "Account/Login" : ""; return(View("RegisterResult", resultModel)); } catch (UserFriendlyException ex) { ViewBag.UseCaptcha = UseCaptchaOnRegistration(); ViewBag.ErrorMessage = ex.Message; var viewModel = new TenantRegisterViewModel { PasswordComplexitySetting = await _passwordComplexitySettingStore.GetSettingsAsync(), EditionId = model.EditionId, SubscriptionStartType = model.SubscriptionStartType, EditionPaymentType = EditionPaymentType.NewRegistration, Gateway = model.Gateway, PaymentId = model.PaymentId }; if (model.EditionId.HasValue) { viewModel.Edition = await _tenantRegistrationAppService.GetEdition(model.EditionId.Value); viewModel.EditionId = model.EditionId.Value; } return(View("Register", viewModel)); } }
public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input) { if (input.EditionId.HasValue) { await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType); } else { await CheckRegistrationWithoutEdition(); } using (CurrentUnitOfWork.SetTenantId(null)) { CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { await _recaptchaValidator.ValidateAsync(input.CaptchaResponse); } //Getting host-specific settings var isActive = await IsNewRegisteredTenantActiveByDefault(input.SubscriptionStartType); var isEmailConfirmationRequired = await SettingManager.GetSettingValueForApplicationAsync <bool>( AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin ); DateTime?subscriptionEndDate = null; var isInTrialPeriod = false; if (input.EditionId.HasValue) { isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial; if (isInTrialPeriod) { var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value); subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0); } } var tenantId = await _tenantManager.CreateWithAdminUserAsync( input.TenancyName, input.Name, input.AdminPassword, input.AdminEmailAddress, null, isActive, input.EditionId, shouldChangePasswordOnNextLogin : false, sendActivationEmail : true, subscriptionEndDate, isInTrialPeriod, AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName) ); var tenant = await TenantManager.GetByIdAsync(tenantId); await _appNotifier.NewTenantRegisteredAsync(tenant); return(new RegisterTenantOutput { TenantId = tenant.Id, TenancyName = input.TenancyName, Name = input.Name, UserName = AbpUserBase.AdminUserName, EmailAddress = input.AdminEmailAddress, IsActive = tenant.IsActive, IsEmailConfirmationRequired = isEmailConfirmationRequired, IsTenantActive = tenant.IsActive }); } }
public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input) { try { if (input.EditionId.HasValue) { await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType, input.Gateway, input.PaymentId); } else { await CheckRegistrationWithoutEdition(); } } catch (Exception ex) { throw ex; } try { using (CurrentUnitOfWork.SetTenantId(null)) { CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { await _recaptchaValidator.ValidateAsync(input.CaptchaResponse); } //Getting host-specific settings var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault); var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin); DateTime?subscriptionEndDate = null; var isInTrialPeriod = false; if (input.EditionId.HasValue) { isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial; if (isInTrialPeriod) { var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value); subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0); } } var tenantId = await _tenantManager.CreateWithAdminUserAsync( input.TenancyName, input.Name, input.AdminPassword, input.AdminEmailAddress, null, isNewRegisteredTenantActiveByDefault, input.EditionId, false, true, subscriptionEndDate, isInTrialPeriod, AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName), input.TenantTypeId ); Tenant tenant; if (input.SubscriptionStartType == SubscriptionStartType.Paid) { if (!input.Gateway.HasValue) { throw new Exception("Gateway is missing!"); } var payment = await _subscriptionPaymentRepository.GetByGatewayAndPaymentIdAsync( input.Gateway.Value, input.PaymentId ); tenant = await _tenantManager.UpdateTenantAsync( tenantId, true, false, payment.PaymentPeriodType, payment.EditionId, EditionPaymentType.NewRegistration); await _subscriptionPaymentRepository.UpdateByGatewayAndPaymentIdAsync(input.Gateway.Value, input.PaymentId, tenantId, SubscriptionPaymentStatus.Completed); } else { tenant = await TenantManager.GetByIdAsync(tenantId); } await _appNotifier.NewTenantRegisteredAsync(tenant); if (input.EditionId.HasValue && input.Gateway.HasValue && !input.PaymentId.IsNullOrEmpty()) { _paymentCache.RemoveCacheItem(input.Gateway.Value, input.PaymentId); } CreateMileInputDto mob = new CreateMileInputDto(); mob.Code = "LD"; mob.Name = "Lead"; mob.TenantId = tenantId; mob.Id = 0; mob.IsQuotation = false; var milestone2 = mob.MapTo <MileStone>(); await _MilestoneRepository.InsertAsync(milestone2); CreateMileInputDto mobj = new CreateMileInputDto(); mobj.Code = "QL"; mobj.Name = "Qualified"; mobj.TenantId = tenantId; mobj.Id = 0; mobj.IsQuotation = false; var milestone = mobj.MapTo <MileStone>(); await _MilestoneRepository.InsertAsync(milestone); CreateMileInputDto QT = new CreateMileInputDto(); QT.Code = "QT"; QT.Name = "Qouted"; QT.TenantId = tenantId; QT.Id = 0; QT.IsQuotation = true; var Qouted = QT.MapTo <MileStone>(); await _MilestoneRepository.InsertAsync(Qouted); CreateMileInputDto NG = new CreateMileInputDto(); NG.Code = "NG"; NG.Name = "Negotiation"; NG.TenantId = tenantId; NG.Id = 0; NG.IsQuotation = true; var Negotiation = NG.MapTo <MileStone>(); await _MilestoneRepository.InsertAsync(Negotiation); CreateMileInputDto CL = new CreateMileInputDto(); CL.Code = "CL"; CL.Name = "Closed"; CL.TenantId = tenantId; CL.Id = 0; CL.IsQuotation = true; var Closed = CL.MapTo <MileStone>(); await _MilestoneRepository.InsertAsync(Closed); CreateQuotationStatusInput QS1 = new CreateQuotationStatusInput(); QS1.QuotationStatusCode = "NW"; QS1.QuotationStatusName = "New"; QS1.New = true; QS1.TenantId = tenantId; QS1.Id = 0; var QS1s = QS1.MapTo <QuotationStatus>(); await _QuotationStatusRepository.InsertAsync(QS1s); CreateQuotationStatusInput QS2 = new CreateQuotationStatusInput(); QS2.QuotationStatusCode = "SU"; QS2.QuotationStatusName = "Submitted"; QS2.Submitted = true; QS2.TenantId = tenantId; QS2.Id = 0; var QS2s = QS2.MapTo <QuotationStatus>(); await _QuotationStatusRepository.InsertAsync(QS2s); CreateQuotationStatusInput QS3 = new CreateQuotationStatusInput(); QS3.QuotationStatusCode = "WO"; QS3.QuotationStatusName = "Won"; QS3.Won = true; QS3.TenantId = tenantId; QS3.Id = 0; var QS3s = QS3.MapTo <QuotationStatus>(); await _QuotationStatusRepository.InsertAsync(QS3s); CreateQuotationStatusInput QS4 = new CreateQuotationStatusInput(); QS4.QuotationStatusCode = "LO"; QS4.QuotationStatusName = "Lost"; QS4.Lost = true; QS4.TenantId = tenantId; QS4.Id = 0; var QS4s = QS4.MapTo <QuotationStatus>(); await _QuotationStatusRepository.InsertAsync(QS4s); CreateQuotationStatusInput QS5 = new CreateQuotationStatusInput(); QS5.QuotationStatusCode = "RE"; QS5.QuotationStatusName = "Revised"; QS5.Revised = true; QS5.TenantId = tenantId; QS5.Id = 0; var QS5s = QS5.MapTo <QuotationStatus>(); await _QuotationStatusRepository.InsertAsync(QS5s); return(new RegisterTenantOutput { TenantId = tenant.Id, TenancyName = input.TenancyName, Name = input.Name, UserName = AbpUserBase.AdminUserName, EmailAddress = input.AdminEmailAddress, IsActive = tenant.IsActive, IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin, IsTenantActive = tenant.IsActive }); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 租户注册 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input) { using (CurrentUnitOfWork.SetTenantId(null)) { CheckTenantRegistrationIsEnabled(); //if (UseCaptchaOnRegistration())//使用手机验证码作为验证 //{ // await _captchaValidator.ValidateAsync(input.CaptchaResponse); //} switch (input.Type) { case RegisterType.Telephone: { if (input.PhoneNumber.IsNullOrWhiteSpace()) { throw new UserFriendlyException(L("Identity.RequiredPhoneNumber")); } await _verificationCodeManager.CheckRegistrationVerificationCode(input.PhoneNumber, input.RegisterCode); break; } case RegisterType.Email: { if (input.EmailAddress.IsNullOrWhiteSpace()) { throw new UserFriendlyException(L("Identity.RequiredEmail")); } await _verificationCodeManager.CheckRegistrationVerificationCode(input.EmailAddress, input.RegisterCode); break; } default: break; } //Getting host-specific settings var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault); var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin); var defaultEditionIdValue = await SettingManager.GetSettingValueForApplicationAsync(AppSettings.TenantManagement.DefaultEdition); int?defaultEditionId = null; if (!string.IsNullOrEmpty(defaultEditionIdValue) && (await _editionManager.FindByIdAsync(Convert.ToInt32(defaultEditionIdValue)) != null)) { defaultEditionId = Convert.ToInt32(defaultEditionIdValue); } var tenantId = await TenantManager.CreateWithAdminUserAsync( input.TenancyName, input.TenancyName, input.Password, input.EmailAddress ?? string.Empty, input.PhoneNumber, null, isNewRegisteredTenantActiveByDefault, defaultEditionId, false, true, null, false, _appUrlService.CreateEmailActivationUrlFormat(input.TenancyName) ); var tenant = await TenantManager.GetByIdAsync(tenantId); await _appNotifier.NewTenantRegisteredAsync(tenant); return(new RegisterTenantOutput { TenantId = tenant.Id, TenancyName = input.TenancyName, Name = input.TenancyName, UserName = input.TenancyName, IsActive = tenant.IsActive, EmailAddress = input.EmailAddress, IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin, IsTenantActive = tenant.IsActive }); } }