Ejemplo n.º 1
0
        public static Tenant ResolveTenant(string tenantKey)
        {
            lock (lockObject)
            {
                var currentTenant = new DbTenant().ReadAll().Find(item => (item as DbTenant).Alias.ToLowerInvariant() == tenantKey.ToLowerInvariant());

                if (currentTenant != null)
                {
                    DbTenant record = currentTenant as DbTenant;

                    return(new Tenant()
                    {
                        Id = record.RecordId, Name = record.Name, Status = record.Status.ToString(), DbConnectionString = record.DbConnectionString
                    });
                }

                return(null);
            }
        }
Ejemplo n.º 2
0
        public Tenant SaveTenant(CoreSettings coreSettings, Tenant t)
        {
            if (t == null)
            {
                throw new ArgumentNullException("tenant");
            }

            using var tx = TenantDbContext.Database.BeginTransaction();

            if (!string.IsNullOrEmpty(t.MappedDomain))
            {
                var baseUrl = coreSettings.GetBaseDomain(t.HostedRegion);

                if (baseUrl != null && t.MappedDomain.EndsWith("." + baseUrl, StringComparison.InvariantCultureIgnoreCase))
                {
                    ValidateDomain(t.MappedDomain.Substring(0, t.MappedDomain.Length - baseUrl.Length - 1), t.TenantId, false);
                }
                else
                {
                    ValidateDomain(t.MappedDomain, t.TenantId, false);
                }
            }

            if (t.TenantId == Tenant.DEFAULT_TENANT)
            {
                t.Version = TenantDbContext.TenantVersion
                            .Where(r => r.DefaultVersion == 1 || r.Id == 0)
                            .OrderByDescending(r => r.Id)
                            .Select(r => r.Id)
                            .FirstOrDefault();

                var tenant = new DbTenant
                {
                    Id                    = t.TenantId,
                    Alias                 = t.TenantAlias.ToLowerInvariant(),
                    MappedDomain          = !string.IsNullOrEmpty(t.MappedDomain) ? t.MappedDomain.ToLowerInvariant() : null,
                    Version               = t.Version,
                    VersionChanged        = t.VersionChanged,
                    Name                  = t.Name ?? t.TenantAlias,
                    Language              = t.Language,
                    TimeZone              = t.TimeZone,
                    OwnerId               = t.OwnerId,
                    TrustedDomains        = t.GetTrustedDomains(),
                    TrustedDomainsEnabled = t.TrustedDomainsType,
                    CreationDateTime      = t.CreatedDateTime,
                    Status                = t.Status,
                    StatusChanged         = t.StatusChangeDate,
                    PaymentId             = t.PaymentId,
                    LastModified          = t.LastModified = DateTime.UtcNow,
                    Industry              = t.Industry,
                    Spam                  = t.Spam,
                    Calls                 = t.Calls
                };

                tenant = TenantDbContext.Tenants.Add(tenant).Entity;
                TenantDbContext.SaveChanges();
                t.TenantId = tenant.Id;
            }
            else
            {
                var tenant = TenantDbContext.Tenants
                             .Where(r => r.Id == t.TenantId)
                             .FirstOrDefault();

                if (tenant != null)
                {
                    tenant.Alias                 = t.TenantAlias.ToLowerInvariant();
                    tenant.MappedDomain          = !string.IsNullOrEmpty(t.MappedDomain) ? t.MappedDomain.ToLowerInvariant() : null;
                    tenant.Version               = t.Version;
                    tenant.VersionChanged        = t.VersionChanged;
                    tenant.Name                  = t.Name ?? t.TenantAlias;
                    tenant.Language              = t.Language;
                    tenant.TimeZone              = t.TimeZone;
                    tenant.TrustedDomains        = t.GetTrustedDomains();
                    tenant.TrustedDomainsEnabled = t.TrustedDomainsType;
                    tenant.CreationDateTime      = t.CreatedDateTime;
                    tenant.Status                = t.Status;
                    tenant.StatusChanged         = t.StatusChangeDate;
                    tenant.PaymentId             = t.PaymentId;
                    tenant.LastModified          = t.LastModified = DateTime.UtcNow;
                    tenant.Industry              = t.Industry;
                    tenant.Spam                  = t.Spam;
                    tenant.Calls                 = t.Calls;
                }
                TenantDbContext.SaveChanges();
            }

            if (string.IsNullOrEmpty(t.PartnerId) && string.IsNullOrEmpty(t.AffiliateId) && string.IsNullOrEmpty(t.Campaign))
            {
                var p = TenantDbContext.TenantPartner
                        .Where(r => r.TenantId == t.TenantId)
                        .FirstOrDefault();

                if (p != null)
                {
                    TenantDbContext.TenantPartner.Remove(p);
                }
            }
            else
            {
                var tenantPartner = new DbTenantPartner
                {
                    TenantId    = t.TenantId,
                    PartnerId   = t.PartnerId,
                    AffiliateId = t.AffiliateId,
                    Campaign    = t.Campaign
                };

                TenantDbContext.TenantPartner.Add(tenantPartner);
            }

            tx.Commit();

            //CalculateTenantDomain(t);
            return(t);
        }