public IAccessToken Authenticate(ref AzureAccount account, AzureEnvironment environment, string tenant, SecureString password,
     ShowDialog promptBehavior)
 {
     var token = TokenProvider.GetAccessToken(GetAdalConfiguration(environment, tenant), promptBehavior, account.Id, password, account.Type);
     account.Id = token.UserId;
     return token;
 }
        public IAccessToken Authenticate(AzureAccount account, AzureEnvironment environment, string tenant, SecureString password, ShowDialog promptBehavior)
        {
            if (account.Id == null)
            {
                account.Id = "test";
            }

            return TokenProvider(account, environment, tenant);
        }
        public static void SetCurrentContext(AzureSubscription subscription, AzureEnvironment environment, AzureAccount account)
        {
            if (environment == null)
            {
                if (subscription != null && CurrentContext != null &&
                    subscription.Environment == CurrentContext.Environment.Name)
                {
                    environment = CurrentContext.Environment;
                }
                else
                {
                    environment = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud];
                }

                if (subscription != null)
                {
                    subscription.Environment = environment.Name;
                }
            }

            if (account == null)
            {
                if (subscription != null && CurrentContext != null && subscription.Account != null)
                {
                    if (CurrentContext.Account != null && subscription.Account == CurrentContext.Account.Id)
                    {
                        account = CurrentContext.Account;
                    }
                    else
                    {
                        throw new ArgumentException(Resources.AccountIdDoesntMatchSubscription, "account");
                    }

                    subscription.Account = account.Id;

                }
            }

            if (subscription != null && subscription.Environment != environment.Name)
            {
                throw new ArgumentException(Resources.EnvironmentNameDoesntMatchSubscription, "environment");
            }

            CurrentContext = new AzureContext
            {
                Subscription = subscription,
                Account = account,
                Environment = environment
            };
        }
        private AdalConfiguration GetAdalConfiguration(AzureEnvironment environment, string tenantId)
        {
            if (environment == null)
            {
                throw new ArgumentNullException("environment");
            }
            var adEndpoint = environment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectory];
            var adResourceId = environment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectoryServiceEndpointResourceId];

            return new AdalConfiguration
            {
                AdEndpoint = adEndpoint,
                ResourceClientUri = adResourceId,
                AdDomain = tenantId
            };
        }
        public IAccessToken Authenticate(AzureAccount account, AzureEnvironment environment, string tenant, SecureString password, ShowDialog promptBehavior)
        {
            if (account.Id == null)
            {
                account.Id = "test";
            }

            var token = new MockAccessToken
            {
                UserId = account.Id,
                LoginType = LoginType.OrgId,
                AccessToken = "123"
            };

            return token;
        }
        public override void ExecuteCmdlet()
        {
            var newEnvironment = new AzureEnvironment { Name = Name };
            if (ProfileClient.Profile.Environments.ContainsKey(Name))
            {
                newEnvironment = ProfileClient.Profile.Environments[Name];
            }
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.PublishSettingsFileUrl, PublishSettingsFileUrl);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.ServiceManagement, ServiceEndpoint);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.ResourceManager, ResourceManagerEndpoint);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.ManagementPortalUrl, ManagementPortalUrl);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.StorageEndpointSuffix, StorageEndpoint);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.ActiveDirectory, ActiveDirectoryEndpoint);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.ActiveDirectoryServiceEndpointResourceId, ActiveDirectoryServiceEndpointResourceId);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.Gallery, GalleryEndpoint);
            SetEndpointIfProvided(newEnvironment, AzureEnvironment.Endpoint.Graph, GraphEndpoint);

            ProfileClient.AddOrSetEnvironment(newEnvironment);

            WriteObject(newEnvironment);
        }
        public override void ExecuteCmdlet()
        {
            var newEnvironment = new AzureEnvironment {Name = Name};
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.PublishSettingsFileUrl] = PublishSettingsFileUrl;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.ServiceManagement] = ServiceEndpoint;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.ResourceManager] = ResourceManagerEndpoint;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.ManagementPortalUrl] = ManagementPortalUrl;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.StorageEndpointSuffix] = StorageEndpoint;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectory] = ActiveDirectoryEndpoint;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectoryServiceEndpointResourceId] = ActiveDirectoryServiceEndpointResourceId;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.Gallery] = GalleryEndpoint;
            newEnvironment.Endpoints[AzureEnvironment.Endpoint.Graph] = GraphEndpoint;

            ProfileClient.AddOrSetEnvironment(newEnvironment);
            List<object> args = new List<object> { "Name", newEnvironment.Name };
            foreach (AzureEnvironment.Endpoint property in Enum.GetValues(typeof(AzureEnvironment.Endpoint)))
            {
                args.AddRange(new object[] { property, newEnvironment.GetEndpoint(property) });
            }
            WriteObject(base.ConstructPSObject(null, args.ToArray()));
        }
        private IEnumerable<AzureSubscription> ListServiceManagementSubscriptions(AzureAccount account, AzureEnvironment environment, SecureString password, ShowDialog promptBehavior, string[] tenants)
        {
            List<AzureSubscription> result = new List<AzureSubscription>();

            if (!environment.IsEndpointSet(AzureEnvironment.Endpoint.ServiceManagement))
            {
                return result;
            }

            foreach (var tenant in tenants)
            {
                try
                {
                    var tenantAccount = new AzureAccount();
                    CopyAccount(account, tenantAccount);
                    var tenantToken = AzureSession.AuthenticationFactory.Authenticate(tenantAccount, environment, tenant, password, ShowDialog.Never);
                    if (tenantAccount.Id == account.Id)
                    {
                        tenantAccount = account;
                    }

                    tenantAccount.SetOrAppendProperty(AzureAccount.Property.Tenants, new string[] { tenant });
                    using (var subscriptionClient = AzureSession.ClientFactory.CreateCustomClient<WindowsAzure.Subscriptions.SubscriptionClient>(
                            new TokenCloudCredentials(tenantToken.AccessToken),
                            environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ServiceManagement)))
                    {
                        var subscriptionListResult = subscriptionClient.Subscriptions.List();
                        foreach (var subscription in subscriptionListResult.Subscriptions)
                        {
                            // only add the subscription if it's actually in this tenant
                            if (subscription.ActiveDirectoryTenantId == tenant)
                            {
                                AzureSubscription psSubscription = new AzureSubscription
                                {
                                    Id = new Guid(subscription.SubscriptionId),
                                    Name = subscription.SubscriptionName,
                                    Environment = environment.Name
                                };
                                psSubscription.Properties[AzureSubscription.Property.SupportedModes] =
                                    AzureModule.AzureServiceManagement.ToString();
                                psSubscription.SetProperty(AzureSubscription.Property.Tenants,
                                    subscription.ActiveDirectoryTenantId);
                                psSubscription.Account = tenantAccount.Id;
                                tenantAccount.SetOrAppendProperty(AzureAccount.Property.Subscriptions,
                                    new string[] { psSubscription.Id.ToString() });
                                result.Add(psSubscription);
                            }
                        }
                    }

                    AddOrSetAccount(tenantAccount);
                }
                catch (CloudException cEx)
                {
                    WriteOrThrowAadExceptionMessage(cEx);
                }
                catch (AadAuthenticationException aadEx)
                {
                    WriteOrThrowAadExceptionMessage(aadEx);
                }
            }

            return result;
        }
        private void SetupAzureEnvironmentFromEnvironmentVariables(AzureModule mode)
        {
            TestEnvironment rdfeEnvironment = new RDFETestEnvironmentFactory().GetTestEnvironment();
            TestEnvironment csmEnvironment = new CSMTestEnvironmentFactory().GetTestEnvironment();
            TestEnvironment currentEnvironment = (mode == AzureModule.AzureResourceManager ? csmEnvironment : rdfeEnvironment);

            if (currentEnvironment.UserName == null)
            {
                currentEnvironment.UserName = "******";
            }

            SetEndpointsToDefaults(rdfeEnvironment, csmEnvironment);

            SetAuthenticationFactory(mode, rdfeEnvironment, csmEnvironment);

            AzureEnvironment environment = new AzureEnvironment { Name = testEnvironmentName };

            Debug.Assert(currentEnvironment != null);
            environment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectory] = currentEnvironment.ActiveDirectoryEndpoint.AbsoluteUri;
            environment.Endpoints[AzureEnvironment.Endpoint.Gallery] = currentEnvironment.GalleryUri.AbsoluteUri;

            if (csmEnvironment != null)
            {
                environment.Endpoints[AzureEnvironment.Endpoint.ResourceManager] = csmEnvironment.BaseUri.AbsoluteUri;                
            }

            if (rdfeEnvironment != null)
            {
                environment.Endpoints[AzureEnvironment.Endpoint.ServiceManagement] = rdfeEnvironment.BaseUri.AbsoluteUri;                
            }

            if (!client.Profile.Environments.ContainsKey(testEnvironmentName))
            {
                client.AddOrSetEnvironment(environment);
            }

            testSubscription = new AzureSubscription()
            {
                Id = new Guid(currentEnvironment.SubscriptionId),
                Name = testSubscriptionName,
                Environment = testEnvironmentName,
                Account = currentEnvironment.UserName,
                Properties = new Dictionary<AzureSubscription.Property,string> 
                {
                     { AzureSubscription.Property.Default, "True"},
                     { AzureSubscription.Property.StorageAccount, Environment.GetEnvironmentVariable("AZURE_STORAGE_ACCOUNT")},
                }
            };

            testAccount = new AzureAccount()
            {
                Id = currentEnvironment.UserName,
                Type = AzureAccount.AccountType.User,
                Properties = new Dictionary<AzureAccount.Property, string> 
                {
                     { AzureAccount.Property.Subscriptions, currentEnvironment.SubscriptionId},
                }
            };

            client.Profile.Subscriptions[testSubscription.Id] = testSubscription;
            client.Profile.Accounts[testAccount.Id] = testAccount;
            client.SetSubscriptionAsCurrent(testSubscription.Name, testSubscription.Account);
        }
        public Uri GetEndpoint(string enviornment, AzureEnvironment.Endpoint endpoint)
        {
            AzureEnvironment env = GetEnvironment(enviornment);
            Uri endpointUri = null;

            if (env != null)
            {
                string endpointString = env.GetEndpoint(endpoint);
                if (!string.IsNullOrEmpty(endpointString))
                {
                    endpointUri = new Uri(endpointString);
                }
            }

            return endpointUri;
        }
        private AzureEnvironment MergeEnvironmentProperties(AzureEnvironment environment1, AzureEnvironment environment2)
        {
            if (environment1 == null || environment2 == null)
            {
                throw new ArgumentNullException("environment1");
            }
            if (environment1.Name != environment2.Name)
            {
                throw new ArgumentException("Subscription Ids do not match.");
            }
            AzureEnvironment mergedEnvironment = new AzureEnvironment
            {
                Name = environment1.Name
            };

            // Merge all properties
            foreach (AzureEnvironment.Endpoint property in Enum.GetValues(typeof(AzureEnvironment.Endpoint)))
            {
                string propertyValue = environment1.GetEndpoint(property) ?? environment2.GetEndpoint(property);
                if (propertyValue != null)
                {
                    mergedEnvironment.Endpoints[property] = propertyValue;
                }
            }

            return mergedEnvironment;
        }
        private IEnumerable<AzureSubscription> ListSubscriptionsFromServer(ref AzureAccount account, AzureEnvironment environment, SecureString password, ShowDialog promptBehavior)
        {
            try
            {
                if (!account.IsPropertySet(AzureAccount.Property.Tenants))
                {
                    LoadAccountTenants(ref account, environment, password, promptBehavior);
                }
            }
            catch (AadAuthenticationException aadEx)
            {
                WriteOrThrowAadExceptionMessage(aadEx);
                return new AzureSubscription[0];
            }

            try
            {
                List<AzureSubscription> mergedSubscriptions = MergeSubscriptions(
                    ListServiceManagementSubscriptions(ref account, environment, password, ShowDialog.Never).ToList(),
                    ListResourceManagerSubscriptions(ref account, environment, password, ShowDialog.Never).ToList());

                // Set user ID
                foreach (var subscription in mergedSubscriptions)
                {
                    subscription.Environment = environment.Name;
                    subscription.Account = account.Id;
                    account.SetOrAppendProperty(AzureAccount.Property.Subscriptions, subscription.Id.ToString());
                }

                if (mergedSubscriptions.Any())
                {
                    return mergedSubscriptions;
                }
                else
                {
                    return new AzureSubscription[0];
                }
            }
            catch (AadAuthenticationException aadEx)
            {
                WriteOrThrowAadExceptionMessage(aadEx);
                return new AzureSubscription[0];
            }
        }
        public List<AzureSubscription> RefreshSubscriptions(AzureEnvironment environment)
        {
            if (environment == null)
            {
                throw new ArgumentNullException("environment");
            }

            var subscriptionsFromServer = ListSubscriptionsFromServerForAllAccounts(environment);

            // Update back Profile.Subscriptions
            foreach (var subscription in subscriptionsFromServer)
            {
                // Resetting back default account
                if (Profile.Subscriptions.ContainsKey(subscription.Id))
                {
                    subscription.Account = Profile.Subscriptions[subscription.Id].Account;
                }
                AddOrSetSubscription(subscription);
            }

            return Profile.Subscriptions.Values.ToList();
        }
        public string GetEndpointSuffix(AzureEnvironment.Endpoint endpointSuffix)
        {
            if (Endpoints.ContainsKey(endpointSuffix))
            {
                return Endpoints[endpointSuffix];
            }

            return null;
        }
 public bool IsEndpointSetToValue(AzureEnvironment.Endpoint endpoint, string url)
 {
     if (url == null && !Endpoints.IsPropertySet(endpoint))
     {
         return true;
     }
     if (url != null && Endpoints.IsPropertySet(endpoint))
     {
         return GetEndpoint(endpoint)
             .Trim(new[] {'/'})
             .Equals(url.Trim(new[] {'/'}), StringComparison.InvariantCultureIgnoreCase);
     }
     return false;
 }
 public bool IsEndpointSet(AzureEnvironment.Endpoint endpoint)
 {
     return Endpoints.IsPropertySet(endpoint);
 }
        public Uri GetEndpointAsUri(AzureEnvironment.Endpoint endpoint)
        {
            if (Endpoints.ContainsKey(endpoint))
            {
                return new Uri(Endpoints[endpoint]);
            }

            return null;
        }
        public AzureEnvironment AddOrSetEnvironment(AzureEnvironment environment)
        {
            if (environment == null)
            {
                throw new ArgumentNullException("Environment needs to be specified.", "environment");
            }

            if (AzureEnvironment.PublicEnvironments.ContainsKey(environment.Name))
            {
                throw new ArgumentException(Resources.ChangingDefaultEnvironmentNotSupported, "environment");
            }

            if (Profile.Environments.ContainsKey(environment.Name))
            {
                Profile.Environments[environment.Name] =
                    MergeEnvironmentProperties(environment, Profile.Environments[environment.Name]);
            }
            else
            {
                Profile.Environments[environment.Name] = environment;
            }

            // Update in-memory environment
            if (AzureSession.CurrentContext != null && AzureSession.CurrentContext.Environment != null &&
                AzureSession.CurrentContext.Environment.Name == environment.Name)
            {
                AzureSession.SetCurrentContext(AzureSession.CurrentContext.Subscription, 
                    Profile.Environments[environment.Name], 
                    AzureSession.CurrentContext.Account);
            }

            return Profile.Environments[environment.Name];
        }
        public AzureAccount AddAccountAndLoadSubscriptions(AzureAccount account, AzureEnvironment environment, SecureString password)
        {
            if (environment == null)
            {
                throw new ArgumentNullException("environment");
            }

            if (account == null)
            {
                throw new ArgumentNullException("account");
            }

            var subscriptionsFromServer = ListSubscriptionsFromServer(ref account, environment, password, ShowDialog.Always).ToList();

            Debug.Assert(account != null);

            // If account id is null the login failed
            if (account.Id != null)
            {
                // Add the account to the profile
                AddOrSetAccount(account);

                // Update back Profile.Subscriptions
                foreach (var subscription in subscriptionsFromServer)
                {
                    AddOrSetSubscription(subscription);
                }

                if (Profile.DefaultSubscription == null)
                {
                    var firstSubscription = Profile.Subscriptions.Values.FirstOrDefault();
                    if (firstSubscription != null)
                    {
                        SetSubscriptionAsDefault(firstSubscription.Name, firstSubscription.Account);
                    }
                }

                return Profile.Accounts[account.Id];
            }
            else
            {
                return null;
            }
        }
 private void SetEndpointIfProvided(AzureEnvironment newEnvironment, AzureEnvironment.Endpoint endpoint, string property)
 {
     if (!string.IsNullOrEmpty(property))
     {
         newEnvironment.Endpoints[endpoint] = property;
     }
 }
        private IEnumerable<AzureSubscription> ListSubscriptionsFromServerForAllAccounts(AzureEnvironment environment)
        {
            // Get all AD accounts and iterate
            var accountNames = Profile.Accounts.Keys;

            List<AzureSubscription> subscriptions = new List<AzureSubscription>();

            foreach (var accountName in accountNames.ToArray())
            {
                var account = Profile.Accounts[accountName];

                if (account.Type != AzureAccount.AccountType.Certificate)
                {
                    subscriptions.AddRange(ListSubscriptionsFromServer(ref account, environment, null, ShowDialog.Never));
                }

                AddOrSetAccount(account);
            }

            if (subscriptions.Any())
            {
                return subscriptions;
            }
            else
            {
                return new AzureSubscription[0];
            }
        }
 private void SetMockData()
 {
     azureSubscription1 = new AzureSubscription
     {
         Id = new Guid("56E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub1",
         Environment = "Test",
         Account = "test",
         Properties = new Dictionary<AzureSubscription.Property, string>
         {
             { AzureSubscription.Property.Default, "True" } 
         }
     };
     azureSubscription2 = new AzureSubscription
     {
         Id = new Guid("66E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub2",
         Environment = "Test",
         Account = "test"
     };
     azureEnvironment = new AzureEnvironment
     {
         Name = "Test",
         Endpoints = new Dictionary<AzureEnvironment.Endpoint, string>
         {
             { AzureEnvironment.Endpoint.ServiceManagement, "https://umapi.rdfetest.dnsdemo4.com:8443/" },
             { AzureEnvironment.Endpoint.ManagementPortalUrl, "https://windows.azure-test.net" },
             { AzureEnvironment.Endpoint.AdTenant, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.ActiveDirectory, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.Gallery, "https://current.gallery.azure-test.net" },
             { AzureEnvironment.Endpoint.ResourceManager, "https://api-current.resources.windows-int.net/" },
         }
     };
     azureAccount = new AzureAccount
     {
         Id = "test",
         Type = AzureAccount.AccountType.User,
         Properties = new Dictionary<AzureAccount.Property, string>
         {
             { AzureAccount.Property.Subscriptions, azureSubscription1.Id + "," + azureSubscription2.Id } 
         }
     };
 }
        private void LoadAccountTenants(ref AzureAccount account, AzureEnvironment environment, SecureString password, ShowDialog promptBehavior)
        {
            var commonTenantToken = AzureSession.AuthenticationFactory.Authenticate(ref account, environment,
                AuthenticationFactory.CommonAdTenant, password, promptBehavior);

            if (environment.IsEndpointSet(AzureEnvironment.Endpoint.ResourceManager))
            {
                using (var subscriptionClient = AzureSession.ClientFactory
                        .CreateCustomClient<Azure.Subscriptions.SubscriptionClient>(
                            new TokenCloudCredentials(commonTenantToken.AccessToken),
                            environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ResourceManager)))
                {
                    account.SetOrAppendProperty(AzureAccount.Property.Tenants,
                        subscriptionClient.Tenants.List().TenantIds.Select(ti => ti.TenantId).ToArray());
                }
            }
            else
            {
                using (var subscriptionClient = AzureSession.ClientFactory
                        .CreateCustomClient<WindowsAzure.Subscriptions.SubscriptionClient>(
                            new TokenCloudCredentials(commonTenantToken.AccessToken),
                            environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ServiceManagement)))
                {
                    var subscriptionListResult = subscriptionClient.Subscriptions.List();
                    account.SetOrAppendProperty(AzureAccount.Property.Tenants,
                        subscriptionListResult.Subscriptions.Select(s => s.ActiveDirectoryTenantId).Distinct().ToArray());
                }
            }
        }
        public void SetAzureEnvironmentUpdatesEnvironment()
        {
            MockDataStore dataStore = new MockDataStore();
            ProfileClient.DataStore = dataStore;
            ProfileClient client = new ProfileClient();

            Assert.Equal(2, client.Profile.Environments.Count);

            Assert.Throws<ArgumentNullException>(() => client.AddOrSetEnvironment(null));
            
            var env2 = client.AddOrSetEnvironment(azureEnvironment);
            Assert.Equal(env2.Name, azureEnvironment.Name);
            Assert.NotNull(env2.Endpoints[AzureEnvironment.Endpoint.ServiceManagement]);
            AzureEnvironment newEnv = new AzureEnvironment
            {
                Name = azureEnvironment.Name
            };
            newEnv.Endpoints[AzureEnvironment.Endpoint.Graph] = "foo";
            env2 = client.AddOrSetEnvironment(newEnv);
            Assert.Equal("foo", env2.Endpoints[AzureEnvironment.Endpoint.Graph]);
            Assert.NotNull(env2.Endpoints[AzureEnvironment.Endpoint.ServiceManagement]);
        }
        private IEnumerable<AzureSubscription> ListServiceManagementSubscriptions(ref AzureAccount account, AzureEnvironment environment, SecureString password, ShowDialog promptBehavior)
        {
            List<AzureSubscription> result = new List<AzureSubscription>();

            if (!environment.IsEndpointSet(AzureEnvironment.Endpoint.ServiceManagement))
            {
                return result;
            }

            foreach (var tenant in account.GetPropertyAsArray(AzureAccount.Property.Tenants))
            {
                try
                {
                    var tenantToken = AzureSession.AuthenticationFactory.Authenticate(ref account, environment, tenant, password, ShowDialog.Never);

                    using (var subscriptionClient = AzureSession.ClientFactory.CreateCustomClient<WindowsAzure.Subscriptions.SubscriptionClient>(
                            new TokenCloudCredentials(tenantToken.AccessToken),
                            environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ServiceManagement)))
                    {
                        var subscriptionListResult = subscriptionClient.Subscriptions.List();
                        foreach (var subscription in subscriptionListResult.Subscriptions)
                        {
                            AzureSubscription psSubscription = new AzureSubscription
                            {
                                Id = new Guid(subscription.SubscriptionId),
                                Name = subscription.SubscriptionName,
                                Environment = environment.Name
                            };
                            psSubscription.Properties[AzureSubscription.Property.SupportedModes] = AzureModule.AzureServiceManagement.ToString();
                            psSubscription.SetProperty(AzureSubscription.Property.Tenants, subscription.ActiveDirectoryTenantId);

                            AzureSession.SubscriptionTokenCache[Tuple.Create(psSubscription.Id, account.Id)] = tenantToken;

                            result.Add(psSubscription);
                        }
                    }
                }
                catch (CloudException cEx)
                {
                    WriteOrThrowAadExceptionMessage(cEx);
                }
                catch (AadAuthenticationException aadEx)
                {
                    WriteOrThrowAadExceptionMessage(aadEx);
                }
            }

            return result;
        }
Beispiel #26
0
 public void UpdateEnvironment(AzureEnvironment environment)
 {
     throw new NotImplementedException();
 }
 private void SetMockData()
 {
     rdfeSubscription1 = new Subscriptions.Models.SubscriptionListOperationResponse.Subscription
     {
         SubscriptionId = "16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         SubscriptionName = "RdfeSub1",
         SubscriptionStatus = Subscriptions.Models.SubscriptionStatus.Active,
         ActiveDirectoryTenantId = "Common"
     };
     rdfeSubscription2 = new Subscriptions.Models.SubscriptionListOperationResponse.Subscription
     {
         SubscriptionId = "26E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         SubscriptionName = "RdfeSub2",
         SubscriptionStatus = Subscriptions.Models.SubscriptionStatus.Active,
         ActiveDirectoryTenantId = "Common"
     };
     csmSubscription1 = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/36E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "CsmSub1",
         State = "Active",
         SubscriptionId = "36E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     csmSubscription1withDuplicateId = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "RdfeSub1",
         State = "Active",
         SubscriptionId = "16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     csmSubscription2 = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/46E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "CsmSub2",
         State = "Active",
         SubscriptionId = "46E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     azureSubscription1 = new AzureSubscription
     {
         Id = new Guid("56E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub1",
         Environment = "Test",
         Account = "test",
         Properties = new Dictionary<AzureSubscription.Property, string>
         {
             { AzureSubscription.Property.Default, "True" } 
         }
     };
     azureSubscription2 = new AzureSubscription
     {
         Id = new Guid("66E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub2",
         Environment = "Test",
         Account = "test"
     };
     azureSubscription3withoutUser = new AzureSubscription
     {
         Id = new Guid("76E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub3",
         Environment = "Test",
     };
     azureEnvironment = new AzureEnvironment
     {
         Name = "Test",
         Endpoints = new Dictionary<AzureEnvironment.Endpoint, string>
         {
             { AzureEnvironment.Endpoint.ServiceManagement, "https://umapi.rdfetest.dnsdemo4.com:8443/" },
             { AzureEnvironment.Endpoint.ManagementPortalUrl, "https://windows.azure-test.net" },
             { AzureEnvironment.Endpoint.AdTenant, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.ActiveDirectory, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.Gallery, "https://current.gallery.azure-test.net" },
             { AzureEnvironment.Endpoint.ResourceManager, "https://api-current.resources.windows-int.net/" },
         }
     };
     azureAccount = new AzureAccount
     {
         Id = "test",
         Type = AzureAccount.AccountType.User,
         Properties = new Dictionary<AzureAccount.Property, string>
         {
             { AzureAccount.Property.Subscriptions, azureSubscription1.Id + "," + azureSubscription2.Id } 
         }
     };
     newProfileDataPath = System.IO.Path.Combine(AzurePowerShell.ProfileDirectory, AzurePowerShell.ProfileFile);
     oldProfileDataPath = System.IO.Path.Combine(AzurePowerShell.ProfileDirectory, AzurePowerShell.OldProfileFile);
     oldProfileData = @"<?xml version=""1.0"" encoding=""utf-8""?>
         <ProfileData xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Microsoft.WindowsAzure.Commands.Utilities.Common"">
           <DefaultEnvironmentName>AzureCloud</DefaultEnvironmentName>
           <Environments>
             <AzureEnvironmentData>
               <ActiveDirectoryServiceEndpointResourceId>https://management.core.windows.net/</ActiveDirectoryServiceEndpointResourceId>
               <AdTenantUrl>https://login.windows-ppe.net/</AdTenantUrl>
               <CommonTenantId>Common</CommonTenantId>
               <GalleryEndpoint>https://current.gallery.azure-test.net</GalleryEndpoint>
               <ManagementPortalUrl>http://go.microsoft.com/fwlink/?LinkId=254433</ManagementPortalUrl>
               <Name>Current</Name>
               <PublishSettingsFileUrl>d:\Code\azure.publishsettings</PublishSettingsFileUrl>
               <ResourceManagerEndpoint>https://api-current.resources.windows-int.net/</ResourceManagerEndpoint>
               <ServiceEndpoint>https://umapi.rdfetest.dnsdemo4.com:8443/</ServiceEndpoint>
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <StorageEndpointSuffix i:nil=""true"" />
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureEnvironmentData>
             <AzureEnvironmentData>
               <ActiveDirectoryServiceEndpointResourceId>https://management.core.windows.net/</ActiveDirectoryServiceEndpointResourceId>
               <AdTenantUrl>https://login.windows-ppe.net/</AdTenantUrl>
               <CommonTenantId>Common</CommonTenantId>
               <GalleryEndpoint>https://df.gallery.azure-test.net</GalleryEndpoint>
               <ManagementPortalUrl>https://windows.azure-test.net</ManagementPortalUrl>
               <Name>Dogfood</Name>
               <PublishSettingsFileUrl>https://auxnext.windows.azure-test.net/publishsettings/index</PublishSettingsFileUrl>
               <ResourceManagerEndpoint>https://api-dogfood.resources.windows-int.net</ResourceManagerEndpoint>
               <ServiceEndpoint>https://management-preview.core.windows-int.net/</ServiceEndpoint>
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <StorageEndpointSuffix i:nil=""true"" />
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureEnvironmentData>
           </Environments>
           <Subscriptions>
             <AzureSubscriptionData>
               <ActiveDirectoryEndpoint i:nil=""true"" />
               <ActiveDirectoryServiceEndpointResourceId i:nil=""true"" />
               <ActiveDirectoryTenantId i:nil=""true"" />
               <ActiveDirectoryUserId i:nil=""true"" />
               <CloudStorageAccount i:nil=""true"" />
               <GalleryEndpoint i:nil=""true"" />
               <IsDefault>true</IsDefault>
               <LoginType i:nil=""true"" />
               <ManagementCertificate i:nil=""true""/>
               <ManagementEndpoint>https://management.core.windows.net/</ManagementEndpoint>
               <Name>Test</Name>
               <RegisteredResourceProviders xmlns:d4p1=""http://schemas.microsoft.com/2003/10/Serialization/Arrays"" />
               <ResourceManagerEndpoint i:nil=""true"" />
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <SubscriptionId>06E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E</SubscriptionId>
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureSubscriptionData>
             <AzureSubscriptionData>
               <ActiveDirectoryEndpoint i:nil=""true"" />
               <ActiveDirectoryServiceEndpointResourceId i:nil=""true"" />
               <ActiveDirectoryTenantId>123</ActiveDirectoryTenantId>
               <ActiveDirectoryUserId>[email protected]</ActiveDirectoryUserId>
               <CloudStorageAccount i:nil=""true"" />
               <GalleryEndpoint i:nil=""true"" />
               <IsDefault>true</IsDefault>
               <LoginType i:nil=""true"" />
               <ManagementCertificate i:nil=""true""/>
               <ManagementEndpoint>https://management-preview.core.windows-int.net/</ManagementEndpoint>
               <Name>Test 2</Name>
               <RegisteredResourceProviders xmlns:d4p1=""http://schemas.microsoft.com/2003/10/Serialization/Arrays"" />
               <ResourceManagerEndpoint i:nil=""true"" />
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <SubscriptionId>06E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1F</SubscriptionId>
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureSubscriptionData>
             <AzureSubscriptionData>
               <ActiveDirectoryEndpoint>https://login.windows.net/</ActiveDirectoryEndpoint>
               <ActiveDirectoryServiceEndpointResourceId>https://management.core.windows.net/</ActiveDirectoryServiceEndpointResourceId>
               <ActiveDirectoryTenantId>72f988bf-86f1-41af-91ab-2d7cd011db47</ActiveDirectoryTenantId>
               <ActiveDirectoryUserId>[email protected]</ActiveDirectoryUserId>
               <CloudStorageAccount i:nil=""true"" />
               <GalleryEndpoint i:nil=""true"" />
               <IsDefault>false</IsDefault>
               <LoginType i:nil=""true"" />
               <ManagementCertificate>3AF24D48B97730E5C4C9CCB12397B5E046F79E09</ManagementCertificate>
               <ManagementEndpoint>https://management.core.windows.net/</ManagementEndpoint>
               <Name>Test 3</Name>
               <RegisteredResourceProviders xmlns:d4p1=""http://schemas.microsoft.com/2003/10/Serialization/Arrays"" />
               <ResourceManagerEndpoint i:nil=""true"" />
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <SubscriptionId>d1e52cbc-b073-42e2-a0a0-c2f547118a6f</SubscriptionId>
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureSubscriptionData>
             <AzureSubscriptionData>
               <ActiveDirectoryEndpoint i:nil=""true"" />
               <ActiveDirectoryServiceEndpointResourceId i:nil=""true"" />
               <ActiveDirectoryTenantId i:nil=""true"" />
               <ActiveDirectoryUserId i:nil=""true"" />
               <CloudStorageAccount i:nil=""true"" />
               <GalleryEndpoint i:nil=""true"" />
               <IsDefault>false</IsDefault>
               <LoginType i:nil=""true"" />
               <ManagementCertificate>3AF24D48B97730E5C4C9CCB12397B5E046F79E09</ManagementCertificate>
               <ManagementEndpoint>https://management.core.chinacloudapi.cn/</ManagementEndpoint>
               <Name>Mooncake Test</Name>
               <RegisteredResourceProviders xmlns:d4p1=""http://schemas.microsoft.com/2003/10/Serialization/Arrays"" />
               <ResourceManagerEndpoint i:nil=""true"" />
               <SqlDatabaseDnsSuffix>.database.windows.net</SqlDatabaseDnsSuffix>
               <SubscriptionId>c14d7dc5-ed4d-4346-a02f-9f1bcf78fb66</SubscriptionId>
               <TrafficManagerDnsSuffix>trafficmanager.net</TrafficManagerDnsSuffix>
             </AzureSubscriptionData>
           </Subscriptions>
         </ProfileData>";
 }
 public void UpdateEnvironment(AzureEnvironment environment)
 {
     throw new NotImplementedException();
 }
 private void SetMockData()
 {
     rdfeSubscription1 = new Subscriptions.Models.SubscriptionListOperationResponse.Subscription
     {
         SubscriptionId = "16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         SubscriptionName = "RdfeSub1",
         SubscriptionStatus = Subscriptions.Models.SubscriptionStatus.Active,
         ActiveDirectoryTenantId = "Common"
     };
     rdfeSubscription2 = new Subscriptions.Models.SubscriptionListOperationResponse.Subscription
     {
         SubscriptionId = "26E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         SubscriptionName = "RdfeSub2",
         SubscriptionStatus = Subscriptions.Models.SubscriptionStatus.Active,
         ActiveDirectoryTenantId = "Common"
     };
     csmSubscription1 = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/36E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "CsmSub1",
         State = "Active",
         SubscriptionId = "36E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     csmSubscription1withDuplicateId = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "RdfeSub1",
         State = "Active",
         SubscriptionId = "16E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     csmSubscription2 = new Azure.Subscriptions.Models.Subscription
     {
         Id = "Subscriptions/46E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E",
         DisplayName = "CsmSub2",
         State = "Active",
         SubscriptionId = "46E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"
     };
     azureSubscription1 = new AzureSubscription
     {
         Id = new Guid("56E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub1",
         Environment = "Test",
         Account = "test",
         Properties = new Dictionary<AzureSubscription.Property, string>
         {
             { AzureSubscription.Property.Default, "True" } 
         }
     };
     azureSubscription2 = new AzureSubscription
     {
         Id = new Guid("66E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub2",
         Environment = "Test",
         Account = "test"
     };
     azureSubscription3withoutUser = new AzureSubscription
     {
         Id = new Guid("76E3F6FD-A3AA-439A-8FC4-1F5C41D2AD1E"),
         Name = "LocalSub3",
         Environment = "Test",
     };
     azureEnvironment = new AzureEnvironment
     {
         Name = "Test",
         Endpoints = new Dictionary<AzureEnvironment.Endpoint, string>
         {
             { AzureEnvironment.Endpoint.ServiceManagement, "https://umapi.rdfetest.dnsdemo4.com:8443/" },
             { AzureEnvironment.Endpoint.ManagementPortalUrl, "https://windows.azure-test.net" },
             { AzureEnvironment.Endpoint.AdTenant, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.ActiveDirectory, "https://login.windows-ppe.net/" },
             { AzureEnvironment.Endpoint.Gallery, "https://current.gallery.azure-test.net" },
             { AzureEnvironment.Endpoint.ResourceManager, "https://api-current.resources.windows-int.net/" },
         }
     };
     azureAccount = new AzureAccount
     {
         Id = "test",
         Type = AzureAccount.AccountType.User,
         Properties = new Dictionary<AzureAccount.Property, string>
         {
             { AzureAccount.Property.Subscriptions, azureSubscription1.Id + "," + azureSubscription2.Id } 
         }
     };
 }
        private void SetupAzureEnvironmentFromEnvironmentVariables(AzureModule mode)
        {
            TestEnvironment rdfeEnvironment = new RDFETestEnvironmentFactory().GetTestEnvironment();
            TestEnvironment csmEnvironment = new CSMTestEnvironmentFactory().GetTestEnvironment();
            TestEnvironment currentEnvironment = (mode == AzureModule.AzureResourceManager ? csmEnvironment : rdfeEnvironment);

            string jwtToken;

            if (mode == AzureModule.AzureResourceManager)
            {
                jwtToken = csmEnvironment.Credentials != null ?
                ((TokenCloudCredentials)csmEnvironment.Credentials).Token : null;
            }
            else if (mode == AzureModule.AzureServiceManagement)
            {
                jwtToken = rdfeEnvironment.Credentials != null ?
                ((TokenCloudCredentials)rdfeEnvironment.Credentials).Token : null;
            }
            else
            {
                throw new ArgumentException("Invalid module mode.");
            }

            SetEndpointsToDefaults(rdfeEnvironment, csmEnvironment);

            /*
                WindowsAzureProfile.Instance.TokenProvider = new FakeAccessTokenProvider(
                jwtToken,
                csmEnvironment.UserName,
                csmEnvironment.AuthorizationContext == null ? null : csmEnvironment.AuthorizationContext.TenatId);
            */
            if (HttpMockServer.GetCurrentMode() == HttpRecorderMode.Playback)
            {
                AzureSession.AuthenticationFactory = new MockAuthenticationFactory();
            }
            else
            {
                AzureSession.AuthenticationFactory = new MockAuthenticationFactory(currentEnvironment.UserName, jwtToken);
            }

            AzureEnvironment environment = new AzureEnvironment { Name = testEnvironmentName };

            Debug.Assert(currentEnvironment != null);
            environment.Endpoints[AzureEnvironment.Endpoint.ActiveDirectory] = currentEnvironment.ActiveDirectoryEndpoint.AbsoluteUri;
            environment.Endpoints[AzureEnvironment.Endpoint.Gallery] = currentEnvironment.GalleryUri.AbsoluteUri;

            if (csmEnvironment != null)
            {
                environment.Endpoints[AzureEnvironment.Endpoint.ResourceManager] = csmEnvironment.BaseUri.AbsoluteUri;                
            }

            if (rdfeEnvironment != null)
            {
                environment.Endpoints[AzureEnvironment.Endpoint.ServiceManagement] = rdfeEnvironment.BaseUri.AbsoluteUri;                
            }

            if (currentEnvironment.UserName == null)
            {
                currentEnvironment.UserName = "******";
            }

            if (!client.Profile.Environments.ContainsKey(testEnvironmentName))
            {
                client.AddOrSetEnvironment(environment);
            }

            testSubscription = new AzureSubscription()
            {
                Id = new Guid(currentEnvironment.SubscriptionId),
                Name = testSubscriptionName,
                Environment = testEnvironmentName,
                Account = currentEnvironment.UserName,
                Properties = new Dictionary<AzureSubscription.Property,string> 
                {
                     { AzureSubscription.Property.Default, "True"},
                     { AzureSubscription.Property.StorageAccount, Environment.GetEnvironmentVariable("AZURE_STORAGE_ACCOUNT")},
                }
            };

            testAccount = new AzureAccount()
            {
                Id = currentEnvironment.UserName,
                Type = AzureAccount.AccountType.User,
                Properties = new Dictionary<AzureAccount.Property, string> 
                {
                     { AzureAccount.Property.Subscriptions, currentEnvironment.SubscriptionId},
                }
            };

            client.Profile.Subscriptions[testSubscription.Id] = testSubscription;
            client.Profile.Accounts[testAccount.Id] = testAccount;
            client.SetSubscriptionAsCurrent(testSubscription.Name, testSubscription.Account);
        }