public IActionResult GetTariff(string portalName) { if (string.IsNullOrEmpty(portalName)) { return(BadRequest(new { errors = "portalName is required." })); } var tenant = HostedSolution.GetTenant(portalName.Trim()); if (tenant == null) { return(BadRequest(new { errors = "Tenant not found." })); } var tariff = HostedSolution.GetTariff(tenant.TenantId, false); var quota = HostedSolution.GetTenantQuota(tenant.TenantId); return(Ok(new { errors = "", tenant = ToTenantWrapper(tenant), tariff = ToTariffWrapper(tariff, quota) })); }
private IActionResult GetTariff(Tenant tenant) { var tariff = HostedSolution.GetTariff(tenant.TenantId, false); var quota = HostedSolution.GetTenantQuota(tenant.TenantId); return(Ok(new { tenant = CommonMethods.ToTenantWrapper(tenant), tariff = ToTariffWrapper(tariff, quota), })); }
private bool CheckRegistrationPayment(out object error) { error = null; if (Configuration["core:base-domain"] == "localhost") { var tenants = HostedSolution.GetTenants(DateTime.MinValue); var firstTenant = tenants.FirstOrDefault(); if (firstTenant != null) { var activePortals = tenants.Count(r => r.Status != TenantStatus.Suspended && r.Status != TenantStatus.RemovePending); var quota = HostedSolution.GetTenantQuota(firstTenant.TenantId); if (quota.CountPortals > 0 && quota.CountPortals <= activePortals) { error = new { error = "portalsCountTooMuch", message = "Too much portals registered already", }; return false; } } } return true; }
public IActionResult SetTariff(TariffModel model) { if (model == null) { return(BadRequest(new { errors = "PortalName is required." })); } if (!ModelState.IsValid) { var errors = new JArray(); foreach (var k in ModelState.Keys) { errors.Add(ModelState[k].Errors.FirstOrDefault().ErrorMessage); } return(BadRequest(new { errors })); } var tenant = HostedSolution.GetTenant((model.PortalName ?? "").Trim()); if (tenant == null) { return(BadRequest(new { errors = "Tenant not found." })); } var quota = new TenantQuota(tenant.TenantId) { ActiveUsers = 10000, Features = model.Features ?? "", MaxFileSize = 1024 * 1024 * 1024, MaxTotalSize = 1024L * 1024 * 1024 * 1024 - 1, Name = "api", }; if (model.ActiveUsers != default) { quota.ActiveUsers = model.ActiveUsers; } if (model.MaxTotalSize != default) { quota.MaxTotalSize = model.MaxTotalSize; } if (model.MaxFileSize != default) { quota.MaxFileSize = model.MaxFileSize; } HostedSolution.SaveTenantQuota(quota); var tariff = new Tariff { QuotaId = quota.Id, DueDate = model.DueDate != default ? model.DueDate : DateTime.MaxValue, }; HostedSolution.SetTariff(tenant.TenantId, tariff); tariff = HostedSolution.GetTariff(tenant.TenantId, false); quota = HostedSolution.GetTenantQuota(tenant.TenantId); return(Ok(new { errors = "", tenant = ToTenantWrapper(tenant), tariff = ToTariffWrapper(tariff, quota) })); }
public IActionResult Register(TenantModel model) { if (model == null) { return(BadRequest(new { errors = "Tenant data is required." })); } if (!ModelState.IsValid) { var errors = new JArray(); foreach (var k in ModelState.Keys) { errors.Add(ModelState[k].Errors.FirstOrDefault().ErrorMessage); } return(Ok(new { errors })); } var sw = Stopwatch.StartNew(); object error; if (string.IsNullOrEmpty(model.PasswordHash) && !string.IsNullOrEmpty(model.Password)) { if (!CheckPasswordPolicy(model.Password, out error)) { sw.Stop(); return(BadRequest(error)); } model.PasswordHash = PasswordHasher.GetClientPassword(model.Password); } if (!CheckValidName(model.FirstName.Trim() + model.LastName.Trim(), out error)) { sw.Stop(); return(BadRequest(error)); } var checkTenantBusyPesp = CheckExistingNamePortal(model.PortalName.Trim()); if (checkTenantBusyPesp != null) { sw.Stop(); return(checkTenantBusyPesp); } Log.DebugFormat("PortalName = {0}; Elapsed ms. CheckExistingNamePortal: {1}", model.PortalName, sw.ElapsedMilliseconds); var clientIP = CommonMethods.GetClientIp(); Log.DebugFormat("clientIP = {0}", clientIP); if (CommonMethods.CheckMuchRegistration(model, clientIP, sw)) { return(BadRequest(new { errors = new[] { "tooMuchAttempts" } })); } if (CommonConstants.RecaptchaRequired && !CommonMethods.IsTestEmail(model.Email)) { /*** validate recaptcha ***/ if (!CommonMethods.ValidateRecaptcha(model.RecaptchaResponse, clientIP)) { Log.DebugFormat("PortalName = {0}; Elapsed ms. ValidateRecaptcha: {1}", model.PortalName, sw.ElapsedMilliseconds); sw.Stop(); return(BadRequest(new { errors = new[] { "recaptchaInvalid" }, message = "Recaptcha is invalid" })); } Log.DebugFormat("PortalName = {0}; Elapsed ms. ValidateRecaptcha: {1}", model.PortalName, sw.ElapsedMilliseconds); } //check payment portal count if (Configuration["core:base-domain"] == "localhost") { var tenants = HostedSolution.GetTenants(DateTime.MinValue); var firstTenant = tenants.FirstOrDefault(); if (firstTenant != null) { var activePortals = tenants.Count(r => r.Status != TenantStatus.Suspended && r.Status != TenantStatus.RemovePending); var quota = HostedSolution.GetTenantQuota(firstTenant.TenantId); if (quota.CountPortals > 0 && quota.CountPortals <= activePortals) { return(BadRequest(new { errors = new[] { "portalsCountTooMuch" }, message = "Too much portals registered already", })); } } } var language = model.Language ?? string.Empty; var tz = TimeZonesProvider.GetCurrentTimeZoneInfo(language); Log.DebugFormat("PortalName = {0}; Elapsed ms. TimeZonesProvider.GetCurrentTimeZoneInfo: {1}", model.PortalName, sw.ElapsedMilliseconds); if (!string.IsNullOrEmpty(model.TimeZoneName)) { tz = TimeZoneConverter.GetTimeZone(model.TimeZoneName.Trim(), false) ?? tz; Log.DebugFormat("PortalName = {0}; Elapsed ms. TimeZonesProvider.OlsonTimeZoneToTimeZoneInfo: {1}", model.PortalName, sw.ElapsedMilliseconds); } var lang = TimeZonesProvider.GetCurrentCulture(language); Log.DebugFormat("PortalName = {0}; model.Language = {1}, resultLang.DisplayName = {2}", model.PortalName, language, lang.DisplayName); var info = new TenantRegistrationInfo { Name = Configuration["web:portal-name"] ?? "Cloud Office Applications", Address = model.PortalName, Culture = lang, FirstName = model.FirstName.Trim(), LastName = model.LastName.Trim(), PasswordHash = String.IsNullOrEmpty(model.PasswordHash) ? null : model.PasswordHash, Email = model.Email.Trim(), TimeZoneInfo = tz, MobilePhone = string.IsNullOrEmpty(model.Phone) ? null : model.Phone.Trim(), Industry = (TenantIndustry)model.Industry, Spam = model.Spam, Calls = model.Calls, Analytics = model.Analytics, LimitedControlPanel = model.LimitedControlPanel }; if (!string.IsNullOrEmpty(model.PartnerId)) { if (Guid.TryParse(model.PartnerId, out Guid guid)) { // valid guid info.PartnerId = model.PartnerId; } } if (!string.IsNullOrEmpty(model.AffiliateId)) { info.AffiliateId = model.AffiliateId; } Tenant t; try { /****REGISTRATION!!!*****/ if (!string.IsNullOrEmpty(ApiSystemHelper.ApiCacheUrl)) { ApiSystemHelper.AddTenantToCache(info.Address, SecurityContext.CurrentAccount.ID); Log.DebugFormat("PortalName = {0}; Elapsed ms. CacheController.AddTenantToCache: {1}", model.PortalName, sw.ElapsedMilliseconds); } HostedSolution.RegisterTenant(info, out t); /*********/ Log.DebugFormat("PortalName = {0}; Elapsed ms. HostedSolution.RegisterTenant: {1}", model.PortalName, sw.ElapsedMilliseconds); } catch (Exception e) { sw.Stop(); Log.Error(e); return(StatusCode(StatusCodes.Status500InternalServerError, new { errors = new[] { "registerNewTenantError" }, message = e.Message, stacktrace = e.StackTrace })); } var isFirst = true; string sendCongratulationsAddress = null; if (!String.IsNullOrEmpty(model.PasswordHash)) { isFirst = !CommonMethods.SendCongratulations(Request.Scheme, t, model.SkipWelcome, out sendCongratulationsAddress); } else if (Configuration["core:base-domain"] == "localhost") { try { /* set wizard not completed*/ TenantManager.SetCurrentTenant(t); var settings = SettingsManager.Load <WizardSettings>(); settings.Completed = false; SettingsManager.Save(settings); } catch (Exception e) { Log.Error(e); } } var reference = CommonMethods.CreateReference(Request.Scheme, t.GetTenantDomain(CoreSettings), info.Email, isFirst, model.Module); Log.DebugFormat("PortalName = {0}; Elapsed ms. CreateReferenceByCookie...: {1}", model.PortalName, sw.ElapsedMilliseconds); sw.Stop(); return(Ok(new { errors = "", reference, tenant = ToTenantWrapper(t), referenceWelcome = sendCongratulationsAddress, })); }