private static IList <IAzureTenant> ProcessTenants(AccountTokenWrapper accountTokenWrapper, Account account) { IList <IAzureTenant> tenants = new List <IAzureTenant>(); if (account.Properties != null && account.Properties.Tenants != null) { foreach (Tenant tenant in account.Properties.Tenants) { AccountSecurityToken token; if (accountTokenWrapper.SecurityTokenMappings.TryGetValue(tenant.Id, out token)) { AzureTenant azureTenant = new AzureTenant() { TenantId = tenant.Id, AccountDisplayableId = tenant.DisplayName, Resource = token.Resource, AccessToken = token.Token, TokenType = token.TokenType }; tenants.Add(azureTenant); } // else ignore for now as we can't handle a request to get a tenant without an access key } } return(tenants); }
/// <summary> /// Public for testing purposes. Creates an Azure account with the correct set of mappings for tenants etc. /// </summary> /// <param name="accountTokenWrapper"></param> /// <returns></returns> public AzureUserAccount CreateUserAccount(AccountTokenWrapper accountTokenWrapper) { Account account = accountTokenWrapper.Account; CommonUtil.CheckForNull(accountTokenWrapper, nameof(accountTokenWrapper)); CommonUtil.CheckForNull(account, nameof(account)); CommonUtil.CheckForNull(account.Key, nameof(account) + ".Key"); CommonUtil.CheckForNull(accountTokenWrapper.SecurityTokenMappings, nameof(account) + ".SecurityTokenMappings"); AzureUserAccount userAccount = new AzureUserAccount(); userAccount.UniqueId = account.Key.AccountId; userAccount.DisplayInfo = ToDisplayInfo(account); userAccount.NeedsReauthentication = account.IsStale; userAccount.AllTenants = ProcessTenants(accountTokenWrapper, account); return(userAccount); }
/// <summary> /// Set current logged in user /// </summary> public async Task <IUserAccount> SetCurrentAccountAsync(object account) { CommonUtil.CheckForNull(account, nameof(account)); AccountTokenWrapper accountTokenWrapper = account as AccountTokenWrapper; if (accountTokenWrapper != null) { AzureUserAccount userAccount = CreateUserAccount(accountTokenWrapper); accountsMap[userAccount.UniqueId] = userAccount; currentAccountId = userAccount.UniqueId; } else { throw new ServiceFailedException(string.Format(CultureInfo.CurrentCulture, SR.UnsupportedAuthType, account.GetType().Name)); } OnCurrentAccountChanged(); return(await GetCurrentAccountAsync()); }
private async Task <AzureAuthenticationManager> CreateAccountManager(AccountTokenWrapper currentAccount, IEnumerable <IAzureUserAccountSubscriptionContext> subscriptions, bool shouldFail = false) { AzureAuthenticationManager azureAuthenticationManager = new AzureAuthenticationManager(); azureAuthenticationManager.SetServiceProvider(serviceProvider); if (currentAccount != null) { await azureAuthenticationManager.SetCurrentAccountAsync(currentAccount); } if (!shouldFail) { resourceManagerMock.Setup(x => x.GetSubscriptionContextsAsync(It.IsAny <IAzureUserAccount>())).Returns(Task.FromResult(subscriptions)); } else { resourceManagerMock.Setup(x => x.GetSubscriptionContextsAsync(It.IsAny <IAzureUserAccount>())).Throws(new Exception()); } return(azureAuthenticationManager); }