예제 #1
0
        public async Task <Guid?> GetUserIdAsync(string identifier)
        {
            if (identifier is null)
            {
                throw new ArgumentNullException(nameof(identifier));
            }

            var azureSession = azureSessionService.CreateSession();
            var azureUser    = default(IActiveDirectoryUser);

            if (identifier.IsEMail())
            {
                var verifiedDomains = await GetVerifiedDomainsAsync()
                                      .ConfigureAwait(false);

                if (!verifiedDomains.Any(domain => identifier.EndsWith($"@{domain}", StringComparison.OrdinalIgnoreCase)))
                {
                    var defaultDomain = await GetDefaultDomainAsync().ConfigureAwait(false);

                    identifier = $"{identifier.Replace("@", "_", StringComparison.OrdinalIgnoreCase)}#EXT#@{defaultDomain}";
                }

                azureUser = await azureSession.ActiveDirectoryUsers
                            .GetByNameAsync(identifier)
                            .ConfigureAwait(false);
            }
            else if (identifier.IsGuid())
            {
                azureUser = await azureSession.ActiveDirectoryUsers
                            .GetByIdAsync(identifier)
                            .ConfigureAwait(false);
            }

            if (azureUser is null)
            {
                return(null);
            }

            return(Guid.Parse(azureUser.Inner.ObjectId));
        }
        private async Task DeleteResourceGroupAsync(AzureResourceGroup azureResourceGroup)
        {
            var session = azureSessionService.CreateSession(azureResourceGroup.SubscriptionId);

            var mgmtLocks = await GetManagementLocksAsync()
                            .ConfigureAwait(false);

            if (mgmtLocks.Any())
            {
                await session.ManagementLocks
                .DeleteByIdsAsync(mgmtLocks.ToArray())
                .ConfigureAwait(false);

                var timeoutDuration = TimeSpan.FromMinutes(5);
                var timeout         = DateTime.UtcNow.Add(timeoutDuration);

                while (DateTime.UtcNow < timeout && mgmtLocks.Any())
                {
                    await Task.Delay(5000).ConfigureAwait(false);

                    mgmtLocks = await GetManagementLocksAsync()
                                .ConfigureAwait(false);
                }
            }

            await session.ResourceGroups
            .DeleteByNameAsync(azureResourceGroup.ResourceGroupName)
            .ConfigureAwait(false);

            async Task <IEnumerable <string> > GetManagementLocksAsync()
            {
                var locks = await session.ManagementLocks
                            .ListByResourceGroupAsync(azureResourceGroup.ResourceGroupName, loadAllPages : true)
                            .ConfigureAwait(false);

                return(locks.Select(lck => lck.Id));
            }
        }