Esempio n. 1
0
        /// <inheritdoc />
        public async Task ModifyClaimMappingAsync(ulong roleId, AuthorizationClaim claim, ClaimMappingType?newType)
        {
            RequireClaims(AuthorizationClaim.AuthorizationConfigure);

            var foundClaims = await ClaimMappingRepository.SearchBriefsAsync(new ClaimMappingSearchCriteria
            {
                Claims  = new[] { claim },
                RoleIds = new[] { roleId },
                GuildId = CurrentGuildId
            });

            using (var createTransaction = await ClaimMappingRepository.BeginCreateTransactionAsync())
                using (var deleteTransaction = await ClaimMappingRepository.BeginDeleteTransactionAsync())
                {
                    foreach (var existing in foundClaims)
                    {
                        await ClaimMappingRepository.TryDeleteAsync(existing.Id, CurrentUserId.Value);
                    }

                    if (newType.HasValue)
                    {
                        await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData()
                        {
                            GuildId     = CurrentGuildId.Value,
                            Type        = newType.Value,
                            RoleId      = roleId,
                            Claim       = claim,
                            CreatedById = CurrentUserId.Value
                        });
                    }

                    createTransaction.Commit();
                    deleteTransaction.Commit();
                }
        }
Esempio n. 2
0
        /// <inheritdoc />
        public async Task RemoveClaimMappingAsync(IGuildUser user, ClaimMappingType type, AuthorizationClaim claim)
        {
            RequireClaims(AuthorizationClaim.AuthorizationConfigure);

            using (var transaction = await ClaimMappingRepository.BeginDeleteTransactionAsync())
            {
                var mappingIds = await ClaimMappingRepository.SearchIdsAsync(new ClaimMappingSearchCriteria()
                {
                    Types     = new[] { type },
                    GuildId   = user.Guild.Id,
                    UserId    = user.Id,
                    Claims    = new[] { claim },
                    IsDeleted = false,
                });

                if (!mappingIds.Any())
                {
                    throw new InvalidOperationException($"A claim mapping of type {type} to claim {claim} for user {user.GetDisplayName()} does not exist");
                }

                await ClaimMappingRepository.TryDeleteAsync(mappingIds.First(), CurrentUserId.Value);

                transaction.Commit();
            }
        }
Esempio n. 3
0
 /// <inheritdoc />
 public async Task UnConfigureGuildAsync(IGuild guild)
 {
     using (var deleteTransaction = await ClaimMappingRepository.BeginDeleteTransactionAsync())
     {
         foreach (var claimMappingId in await ClaimMappingRepository.SearchIdsAsync(new ClaimMappingSearchCriteria()
         {
             GuildId = guild.Id,
             IsDeleted = false
         }))
         {
             await ClaimMappingRepository.TryDeleteAsync(claimMappingId, DiscordClient.CurrentUser.Id);
         }
     }
 }