Beispiel #1
0
        public async Task DeleteRefreshTokenGrantAsync(TClient client, string sessionId)
        {
            if (sessionId.IsNullOrWhiteSpace())
            {
                return;
            }

            logger.ScopeTrace($"Delete Refresh Token grant, Route '{RouteBinding.Route}', Session ID '{sessionId}'.");

            var idKey = new Track.IdKey {
                TenantName = RouteBinding.TenantName, TrackName = RouteBinding.TrackName
            };
            await idKey.ValidateObjectAsync();

            RefreshTokenGrant grant = await tenantRepository.DeleteAsync <RefreshTokenTtlGrant>(idKey, d => d.SessionId == sessionId);

            if (grant != null)
            {
                logger.ScopeTrace($"TTL Refresh Token grant deleted, Refresh Token '{grant.RefreshToken}', Session ID '{sessionId}'.");
            }
            else
            {
                grant = await tenantRepository.DeleteAsync <RefreshTokenGrant>(idKey, d => d.SessionId == sessionId);

                if (grant != null)
                {
                    logger.ScopeTrace($"Refresh Token grant deleted, Refresh Token '{grant.RefreshToken}', Session ID '{sessionId}'.");
                }
            }
        }
Beispiel #2
0
        public async Task <IActionResult> DeleteTenant(string name)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(name, nameof(name)))
                {
                    return(BadRequest(ModelState));
                }
                name = name?.ToLower();

                if (name.Equals(Constants.Routes.MasterTenantName, StringComparison.OrdinalIgnoreCase))
                {
                    throw new InvalidOperationException("The master tenant can not be deleted.");
                }

                var mTracks = await tenantRepository.GetListAsync <Track>(new Track.IdKey {
                    TenantName = name
                }, whereQuery : p => p.DataType.Equals("track"));

                foreach (var mTrack in mTracks)
                {
                    await tenantRepository.DeleteListAsync <DefaultElement>(new Track.IdKey {
                        TenantName = name, TrackName = mTrack.Name
                    });

                    await tenantRepository.DeleteAsync <Track>(mTrack.Id);

                    if (mTrack.Key.Type == TrackKeyType.KeyVaultRenewSelfSigned)
                    {
                        await externalKeyLogic.DeleteExternalKeyAsync(mTrack.Key.ExternalName);
                    }
                }
                var mTenant = await tenantRepository.DeleteAsync <Tenant>(await Tenant.IdFormat(name));

                if (!string.IsNullOrEmpty(mTenant?.CustomDomain))
                {
                    await tenantCacheLogic.InvalidateCustomDomainCacheAsync(mTenant.CustomDomain);
                }

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"NotFound, Delete '{typeof(Api.Tenant).Name}' by name '{name}'.");
                    return(NotFound(typeof(Api.Tenant).Name, name));
                }
                throw;
            }
        }
Beispiel #3
0
        public async Task <IActionResult> DeleteTrack(string name)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(name, nameof(name)))
                {
                    return(BadRequest(ModelState));
                }
                name = name?.ToLower();

                //TODO delete all sub elements
                // Waiting for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/17296813-add-the-ability-to-delete-all-data-in-a-partition
                //            Add the ability to delete ALL data in a partition
                await tenantRepository.DeleteListAsync <DefaultElement>(new Track.IdKey {
                    TenantName = RouteBinding.TenantName, TrackName = name
                });

                await tenantRepository.DeleteAsync <Track>(await Track.IdFormat(RouteBinding, name));

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"NotFound, Delete '{typeof(Api.Track).Name}' by name '{name}'.");
                    return(NotFound(typeof(Api.Track).Name, name));
                }
                throw;
            }
        }
Beispiel #4
0
        public async Task <IActionResult> DeleteTenant(string name)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(name, nameof(name)))
                {
                    return(BadRequest(ModelState));
                }
                name = name?.ToLower();

                if (name.Equals(Constants.Routes.MasterTenantName, StringComparison.OrdinalIgnoreCase))
                {
                    throw new InvalidOperationException("The master track can not be deleted.");
                }

                //TODO delete all sub elements
                // Waiting for https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/17296813-add-the-ability-to-delete-all-data-in-a-partition
                //            Add the ability to delete ALL data in a partition
                var mTracks = await tenantRepository.GetListAsync <Track>(new Track.IdKey {
                    TenantName = name
                }, whereQuery : p => p.DataType.Equals("track"));

                foreach (var mTrack in mTracks)
                {
                    await tenantRepository.DeleteListAsync <DefaultElement>(new Track.IdKey {
                        TenantName = name, TrackName = mTrack.Name
                    });

                    await tenantRepository.DeleteAsync <Track>(mTrack.Id);
                }
                await tenantRepository.DeleteAsync <Tenant>(await Tenant.IdFormat(name));

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"NotFound, Delete '{typeof(Api.Tenant).Name}' by name '{name}'.");
                    return(NotFound(typeof(Api.Tenant).Name, name));
                }
                throw;
            }
        }
Beispiel #5
0
        public async Task DeleteAsync(Guid id)
        {
            var tenant = await _tenantRepository.FindAsync(id);

            if (tenant == null)
            {
                return;
            }

            await _tenantRepository.DeleteAsync(tenant);
        }
Beispiel #6
0
        public async Task <IResponseOutput> DeleteAsync(long id)
        {
            var result = false;

            if (id > 0)
            {
                result = (await _tenantRepository.DeleteAsync(m => m.Id == id)) > 0;
            }

            return(ResponseOutput.Result(result));
        }
Beispiel #7
0
        public async Task Cache_Should_Invalidator_When_Tenant_Changed()
        {
            var acme = await _tenantRepository.FindByNameAsync("acme");

            acme.ShouldNotBeNull();

            // FindAsync will cache tenant.
            await _tenantStore.FindAsync(acme.Id);

            await _tenantStore.FindAsync(acme.Name);

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

            await _tenantRepository.DeleteAsync(acme);

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


            var volosoft = await _tenantRepository.FindByNameAsync("volosoft");

            volosoft.ShouldNotBeNull();

            // Find will cache tenant.
            _tenantStore.Find(volosoft.Id);
            _tenantStore.Find(volosoft.Name);

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

            await _tenantRepository.DeleteAsync(volosoft);

            (_cache.Get(TenantCacheItem.CalculateCacheKey(volosoft.Id, null))).ShouldBeNull();
            (_cache.Get(TenantCacheItem.CalculateCacheKey(null, volosoft.Name))).ShouldBeNull();
        }
Beispiel #8
0
        public async Task <IResponseOutput> DeleteAsync(long id)
        {
            //删除角色权限
            await _rolePermissionRepository.Where(a => a.Role.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除用户角色
            await _userRoleRepository.Where(a => a.User.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除用户
            await _userRepository.Where(a => a.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除角色
            await _roleRepository.Where(a => a.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除租户
            await _tenantRepository.DeleteAsync(id);

            return(ResponseOutput.Ok());
        }
Beispiel #9
0
        protected async Task <IActionResult> Delete(string name)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(name, nameof(name)))
                {
                    return(BadRequest(ModelState));
                }

                await tenantService.DeleteAsync <MParty>(await GetId(name));

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"Delete '{typeof(AParty).Name}' by id '{name}'.");
                    return(NotFound(typeof(AParty).Name, name));
                }
                throw;
            }
        }
Beispiel #10
0
        public async Task <IActionResult> DeleteTrack(string name)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(name, nameof(name)))
                {
                    return(BadRequest(ModelState));
                }
                name = name?.ToLower();

                var mTrack = await tenantRepository.GetTrackByNameAsync(new Track.IdKey {
                    TenantName = RouteBinding.TenantName, TrackName = name
                });

                await tenantRepository.DeleteListAsync <DefaultElement>(new Track.IdKey {
                    TenantName = RouteBinding.TenantName, TrackName = name
                });

                await tenantRepository.DeleteAsync <Track>(await Track.IdFormat(RouteBinding, name));

                if (mTrack.Key.Type == TrackKeyType.KeyVaultRenewSelfSigned)
                {
                    await externalKeyLogic.DeleteExternalKeyAsync(mTrack.Key.ExternalName);
                }

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"NotFound, Delete '{typeof(Api.Track).Name}' by name '{name}'.");
                    return(NotFound(typeof(Api.Track).Name, name));
                }
                throw;
            }
        }
Beispiel #11
0
        public async Task <IActionResult> DeleteUser(string email)
        {
            try
            {
                if (!ModelState.TryValidateRequiredParameter(email, nameof(email)))
                {
                    return(BadRequest(ModelState));
                }
                email = email?.ToLower();

                await tenantRepository.DeleteAsync <Models.User>(await Models.User.IdFormat(RouteBinding, email));

                return(NoContent());
            }
            catch (CosmosDataException ex)
            {
                if (ex.StatusCode == HttpStatusCode.NotFound)
                {
                    logger.Warning(ex, $"NotFound, Delete '{typeof(Api.User).Name}' by email '{email}'.");
                    return(NotFound(typeof(Api.User).Name, email));
                }
                throw;
            }
        }
Beispiel #12
0
 public Task <int> Delete(string keyValue)
 {
     return(service.DeleteAsync(t => t.Id == keyValue));
 }