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 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 virtual async Task <ActionResult> Register(TenantRegistrationViewModel model) { try { CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { var recaptchaHelper = this.GetRecaptchaVerificationHelper(); if (recaptchaHelper.Response.IsNullOrEmpty()) { throw new UserFriendlyException(L("CaptchaCanNotBeEmpty")); } if (recaptchaHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success) { throw new UserFriendlyException(L("IncorrectCaptchaAnswer")); } } //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); } CurrentUnitOfWork.SetTenantId(null); var tenantId = await _tenantManager.CreateWithAdminUserAsync( model.TenancyName, model.Name, model.AdminPassword, model.AdminEmailAddress, null, isNewRegisteredTenantActiveByDefault, defaultEditionId, false, true); ViewBag.UseCaptcha = UseCaptchaOnRegistration(); var tenant = await _tenantManager.GetByIdAsync(tenantId); await _appNotifier.NewTenantRegisteredAsync(tenant); CurrentUnitOfWork.SetTenantId(tenant.Id); var user = await _userManager.FindByNameAsync(AbpUserBase.AdminUserName); //Directly login if possible if (tenant.IsActive && user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin)) { var loginResult = await GetLoginResultAsync(user.UserName, model.AdminPassword, tenant.TenancyName); if (loginResult.Result == AbpLoginResultType.Success) { await SignInAsync(loginResult.User, loginResult.Identity); return(Redirect(Url.Action("Index", "Application"))); } Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result); } return(View("RegisterResult", new TenantRegisterResultViewModel { TenancyName = model.TenancyName, Name = model.Name, UserName = AbpUserBase.AdminUserName, EmailAddress = model.AdminEmailAddress, IsActive = isNewRegisteredTenantActiveByDefault, IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin })); } catch (UserFriendlyException ex) { ViewBag.UseCaptcha = UseCaptchaOnRegistration(); ViewBag.ErrorMessage = ex.Message; return(View("Index", model)); } }
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 }); } }
public virtual async Task <ActionResult> NewTenantSignUp(TenantRegistrationView model) { try { if (!CheckActivationCode(model.OTP)) { ViewBag.ErrorMessage = L("OTPMismatched"); CheckTenantRegistrationIsEnabled(); ViewBag.UseCaptcha = UseCaptchaOnRegistration(); ViewBag.PasswordComplexitySetting = SettingManager.GetSettingValue(AppSettings.Security.PasswordComplexity).Replace("\"", ""); return(View(new TenantRegistrationView() { PlanId = model.PlanId, CurrentPlan = _tenantManager.GetCurrentTenantPlan(model.PlanId), listCountries = _tenantManager.GetCountries(), listCurrencies = _tenantManager.GetCurrencies() })); } CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { var recaptchaHelper = this.GetRecaptchaVerificationHelper(); if (recaptchaHelper.Response.IsNullOrEmpty()) { throw new UserFriendlyException(L("CaptchaCanNotBeEmpty")); } if (recaptchaHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success) { throw new UserFriendlyException(L("IncorrectCaptchaAnswer")); } } //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); } // model.PlanId = Convert.ToInt32(ViewBag.PlanId); CurrentUnitOfWork.SetTenantId(null); var tenantId = await _tenantManager.CreateWithAdminUserAsync( model.TenancyName, model.LoginName, model.AdminPassword, model.AdminEmailAddress, model.FullName, model.CellNumber.Replace("(", "").Replace(")", "").Replace("-", "").Replace(" ", ""), //model.PhoneNumber, //model.CompanyRegistrationNo, //model.CompanyVatNo, //model.Address, //model.City, model.CountryCode, model.CurrencyCode, //model.InvoicingInstruction, // model.BillingCountryCode, // model.BillingCurrencyCode, //model.Timezone, model.CardHoldersName, model.CardNumber, model.CardExpiration, model.CVV, model.payment, model.PlanId, null, true, defaultEditionId, false, true); ViewBag.UseCaptcha = UseCaptchaOnRegistration(); var tenant = await _tenantManager.GetByIdAsync(tenantId); await _appNotifier.NewTenantRegisteredAsync(tenant); CurrentUnitOfWork.SetTenantId(tenant.Id); var user = await _userManager.FindByNameAsync(AbpUserBase.AdminUserName); //Directly login if possible if (tenant.IsActive && user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin)) { var loginResult = await GetLoginResultAsync(user.UserName, model.AdminPassword, tenant.TenancyName); if (loginResult.Result == AbpLoginResultType.Success) { await SignInAsync(loginResult.User, loginResult.Identity); return(Redirect("~/Application#!/tenant/settings")); } Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result); } return(View("RegisterResult", new TenantRegisterResultViewModel { TenancyName = model.TenancyName, Name = model.LoginName, UserName = AbpUserBase.AdminUserName, EmailAddress = model.AdminEmailAddress, IsActive = isNewRegisteredTenantActiveByDefault, IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin })); } catch (UserFriendlyException ex) { ViewBag.UseCaptcha = UseCaptchaOnRegistration(); ViewBag.ErrorMessage = ex.Message; return(View(new TenantRegistrationView() { PlanId = model.PlanId, CurrentPlan = _tenantManager.GetCurrentTenantPlan(model.PlanId), listCountries = _tenantManager.GetCountries(), listCurrencies = _tenantManager.GetCurrencies() })); } }