Beispiel #1
0
    public async Task FindAsyncByName()
    {
        var acme = await _tenantStore.FindAsync("acme");

        acme.ShouldNotBeNull();
        acme.Name.ShouldBe("acme");
    }
Beispiel #2
0
        public async Task Get_Tenant_Should_Cached()
        {
            var acme = await _tenantRepository.FindByNameAsync("acme");

            acme.ShouldNotBeNull();

            (await _cache.GetAsync(TenantCacheItem.CalculateCacheKey(acme.Id, null))).ShouldBeNull();
            (await _cache.GetAsync(TenantCacheItem.CalculateCacheKey(null, acme.Name))).ShouldBeNull();

            await _tenantStore.FindAsync(acme.Id);

            (await _cache.GetAsync(TenantCacheItem.CalculateCacheKey(acme.Id, null))).ShouldNotBeNull();

            await _tenantStore.FindAsync(acme.Name);

            (await _cache.GetAsync(TenantCacheItem.CalculateCacheKey(null, acme.Name))).ShouldNotBeNull();


            var volosoft = _tenantRepository.FindByName("volosoft");

            volosoft.ShouldNotBeNull();

            (_cache.Get(TenantCacheItem.CalculateCacheKey(volosoft.Id, null))).ShouldBeNull();
            (_cache.Get(TenantCacheItem.CalculateCacheKey(null, volosoft.Name))).ShouldBeNull();

            _tenantStore.Find(volosoft.Id);
            (_cache.Get(TenantCacheItem.CalculateCacheKey(volosoft.Id, null))).ShouldNotBeNull();

            _tenantStore.Find(volosoft.Name);
            (_cache.Get(TenantCacheItem.CalculateCacheKey(null, volosoft.Name))).ShouldNotBeNull();
        }
Beispiel #3
0
 private async Task <TenantInfo> FindTenantAsync(string tenantIdOrName)
 {
     if (Guid.TryParse(tenantIdOrName, out var parsedTenantId))
     {
         return(await _tenantStore.FindAsync(parsedTenantId));
     }
     else
     {
         return(await _tenantStore.FindAsync(tenantIdOrName));
     }
 }
Beispiel #4
0
 private async Task <TenantConfiguration> FindTenantAsync(string tenantIdOrName)
 {
     if (Guid.TryParse(tenantIdOrName, out var parsedTenantId))
     {
         return(await _tenantStore.FindAsync(parsedTenantId).ConfigureAwait(false));
     }
     else
     {
         return(await _tenantStore.FindAsync(tenantIdOrName).ConfigureAwait(false));
     }
 }
Beispiel #5
0
        public async Task InvokeAsync(HttpContext httpContext, ITenantStore tenantStore)
        {
            async Task <TenantInfo> FindTenantAsync(string tenantIdOrName)
            {
                return(await tenantStore.FindAsync(tenantIdOrName));
            }

            var resolveResult = _tenantResolver.ResolveTenantIdOrName();

            _tenantResolveResultAccessor.Result = resolveResult;

            TenantInfo tenant = null;

            if (resolveResult.TenantIdOrName != null)
            {
                tenant = await FindTenantAsync(resolveResult.TenantIdOrName);

                if (tenant == null)
                {
                    //TODO: A better exception?
                    throw new LinFxException("There is no tenant with given tenant id or name: " + resolveResult.TenantIdOrName);
                }
            }

            using (_currentTenant.Change(tenant?.Id, tenant?.Name))
            {
                await _next(httpContext);
            }
        }
        private async Task MigrateAndSeedForTenantAsync(
            Guid tenantId,
            string adminEmail,
            string adminPassword)
        {
            try
            {
                using (_currentTenant.Change(tenantId))
                {
                    // Create database tables if needed
                    using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
                    {
                        var tenantConfiguration = await _tenantStore.FindAsync(tenantId);

                        if (tenantConfiguration?.ConnectionStrings != null &&
                            !tenantConfiguration.ConnectionStrings.Default.IsNullOrWhiteSpace())
                        {
                            foreach (var migrator in _dbSchemaMigrators)
                            {
                                await migrator.MigrateAsync();
                            }
                        }

                        await uow.CompleteAsync();
                    }

                    // Seed data
                    using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
                    {
                        await _dataSeeder.SeedAsync(
                            new DataSeedContext(tenantId)
                            .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, adminEmail)
                            .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, adminPassword)
                            );

                        await uow.CompleteAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogException(ex);
            }
        }
 public static TenantInfo Find(this ITenantStore tenantStore, string name)
 {
     return(AsyncHelper.RunSync(() => tenantStore.FindAsync(name)));
 }
 public static TenantInfo Find(this ITenantStore tenantStore, Guid id)
 {
     return(AsyncHelper.RunSync(() => tenantStore.FindAsync(id)));
 }