예제 #1
0
        public async Task InitializeDialog(AzureContext azureContext)
        {
            _AzureContext = azureContext;
            _AzureContext.LogProvider.WriteLog("InitializeDialog", "Start AzureSubscriptionContextDialog InitializeDialog");

            lblAzureEnvironment.Text = _AzureContext.AzureEnvironment.ToString();

            if (_AzureContext.TokenProvider.LastUserInfo != null)
            {
                lblAzureUsername.Text = _AzureContext.TokenProvider.LastUserInfo.DisplayableId;
            }

            cboTenant.Items.Clear();
            if (_AzureContext.AzureRetriever != null && _AzureContext.TokenProvider != null)
            {
                _AzureContext.LogProvider.WriteLog("InitializeDialog", "Loading Azure Tenants");
                foreach (AzureTenant azureTenant in await _AzureContext.GetAzureARMTenants())
                {
                    if (azureTenant.Subscriptions.Count > 0) // Only add Tenants that have one or more Subscriptions
                    {
                        cboTenant.Items.Add(azureTenant);
                        _AzureContext.LogProvider.WriteLog("InitializeDialog", "Added Azure Tenant '" + azureTenant.ToString() + "'");
                    }
                    else
                    {
                        _AzureContext.LogProvider.WriteLog("InitializeDialog", "Not adding Azure Tenant '" + azureTenant.ToString() + "'.  Contains no subscriptions.");
                    }
                }
                cboTenant.Enabled = true;

                if (_AzureContext.AzureTenant != null)
                {
                    foreach (AzureTenant azureTenant in cboTenant.Items)
                    {
                        if (_AzureContext.AzureTenant == azureTenant)
                        {
                            cboTenant.SelectedItem = azureTenant;
                        }
                    }
                }
            }

            _AzureContext.LogProvider.WriteLog("InitializeDialog", "End AzureSubscriptionContextDialog InitializeDialog");
            _AzureContext.StatusProvider.UpdateStatus("Ready");
        }
예제 #2
0
        public static async Task <AzureContext> SetupAzureContext(AzureEnvironment azureEnvironment, string restResponseFile)
        {
            ILogProvider    logProvider    = new FakeLogProvider();
            IStatusProvider statusProvider = new FakeStatusProvider();
            TargetSettings  targetSettings = new FakeSettingsProvider().GetTargetSettings();
            TestRetriever   testRetriever  = new TestRetriever(logProvider, statusProvider);
            AzureContext    azureContext   = new AzureContext(testRetriever, targetSettings);

            azureContext.AzureEnvironment = azureEnvironment;
            azureContext.TokenProvider    = new FakeTokenProvider();
            azureContext.AzureRetriever.LoadRestCache(restResponseFile);
            List <AzureTenant> tenants = await azureContext.GetAzureARMTenants(true);


            List <AzureSubscription> subscriptions = tenants[0].Subscriptions;
            await azureContext.SetSubscriptionContext(subscriptions[0]);

            return(azureContext);
        }
예제 #3
0
        public async Task BindContext(AzureContext azureContext, List <AzureEnvironment> azureEnvironments, List <AzureEnvironment> userDefinedAzureEnvironments)
        {
            _AzureContext = azureContext;

            cboAzureEnvironment.Items.Clear();
            foreach (AzureEnvironment azureEnvironment in azureEnvironments)
            {
                cboAzureEnvironment.Items.Add(azureEnvironment);
            }

            foreach (AzureEnvironment azureEnvironment in userDefinedAzureEnvironments)
            {
                cboAzureEnvironment.Items.Add(azureEnvironment);
            }

            if (_AzureContext.AzureEnvironment != null)
            {
                int environmentIndex = cboAzureEnvironment.FindStringExact(_AzureContext.AzureEnvironment.ToString());
                if (environmentIndex >= 0)
                {
                    cboAzureEnvironment.SelectedIndex = environmentIndex;
                }
            }

            if (cboAzureEnvironment.SelectedIndex < 0)
            {
                cboAzureEnvironment.SelectedIndex = 0;
            }

            if (_AzureContext.TokenProvider == null || _AzureContext.TokenProvider.LastUserInfo == null)
            {
                lblAuthenticatedUser.Text   = "-";
                cboAzureEnvironment.Enabled = true;
                btnAuthenticate.Text        = "Sign In";
            }
            else
            {
                lblAuthenticatedUser.Text   = _AzureContext.TokenProvider.LastUserInfo.DisplayableId;
                cboAzureEnvironment.Enabled = false;
                btnAuthenticate.Text        = "Sign Out";
            }

            cboTenant.Items.Clear();
            if (_AzureContext.AzureRetriever != null && _AzureContext.TokenProvider != null && _AzureContext.TokenProvider.LastUserInfo != null)
            {
                foreach (AzureTenant azureTenant in await _AzureContext.GetAzureARMTenants())
                {
                    if (azureTenant.Subscriptions.Count > 0) // Only add Tenants that have one or more Subscriptions
                    {
                        cboTenant.Items.Add(azureTenant);
                    }
                }
                cboTenant.Enabled = true;

                if (_AzureContext.AzureTenant != null)
                {
                    foreach (AzureTenant azureTenant in cboTenant.Items)
                    {
                        if (_AzureContext.AzureTenant == azureTenant)
                        {
                            cboTenant.SelectedItem = azureTenant;
                        }
                    }
                }

                if (cboTenant.SelectedItem != null)
                {
                    AzureTenant selectedTenant = (AzureTenant)cboTenant.SelectedItem;

                    cmbSubscriptions.Items.Clear();
                    if (_AzureContext.AzureRetriever != null)
                    {
                        foreach (AzureSubscription azureSubscription in await selectedTenant.GetAzureARMSubscriptions(_AzureContext, false))
                        {
                            cmbSubscriptions.Items.Add(azureSubscription);
                        }
                        cmbSubscriptions.Enabled = true;
                    }

                    if (_AzureContext.AzureSubscription != null)
                    {
                        foreach (AzureSubscription azureSubscription in cmbSubscriptions.Items)
                        {
                            if (_AzureContext.AzureSubscription == azureSubscription)
                            {
                                cmbSubscriptions.SelectedItem = azureSubscription;
                            }
                        }
                    }
                }
            }

            _AzureContext.StatusProvider.UpdateStatus("Ready");
        }
예제 #4
0
        private async void btnAuthenticate_Click(object sender, EventArgs e)
        {
            _AzureContext.LogProvider.WriteLog("btnAuthenticate_Click", "Start");

            if (btnAuthenticate.Text == "Sign In")
            {
                try
                {
                    cboTenant.Enabled = false;
                    cboTenant.Items.Clear();
                    cmbSubscriptions.Enabled = false;
                    cmbSubscriptions.Items.Clear();

                    await _AzureContext.Login(_AzureContext.AzureEnvironment.ServiceManagementUrl);

                    if (_AzureContext.TokenProvider != null)
                    {
                        lblAuthenticatedUser.Text = _AzureContext.TokenProvider.LastUserInfo.DisplayableId;
                        btnAuthenticate.Text      = "Sign Out";

                        cboTenant.Items.Clear();
                        foreach (AzureTenant azureTenant in await _AzureContext.GetAzureARMTenants())
                        {
                            if (azureTenant.Subscriptions.Count > 0) // Only add Tenants to the drop down that have subscriptions
                            {
                                cboTenant.Items.Add(azureTenant);
                            }
                        }

                        cboAzureEnvironment.Enabled = false;
                        cboTenant.Enabled           = true;

                        Application.DoEvents();

                        if (cboTenant.Items.Count == 0)
                        {
                            MessageBox.Show("This account does not have any Tenants with Azure Subscription(s).  Logging out of Azure AD Account.");
                            btnAuthenticate_Click(this, null); // No tenants, logout
                        }
                        if (cboTenant.Items.Count == 1)
                        {
                            cboTenant.SelectedIndex = 0;
                        }
                        else if (cboTenant.Items.Count > 1)
                        {
                            _AzureContext.StatusProvider.UpdateStatus("WAIT: Awaiting user selection of Azure Tenant");
                        }
                    }
                    else
                    {
                        _AzureContext.LogProvider.WriteLog("GetToken_Click", "Failed to get token");
                    }
                }
                catch (Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException exc)
                {
                    if (exc.ErrorCode == "authentication_canceled")
                    {
                        // do nothing
                    }
                    else
                    {
                        throw exc;
                    }
                }
            }
            else
            {
                await _AzureContext.Logout();

                lblAuthenticatedUser.Text = "<Not Authenticated>";
                btnAuthenticate.Text      = "Sign In";
                cboTenant.Items.Clear();
                cboTenant.Enabled = false;
                cmbSubscriptions.Items.Clear();
                cmbSubscriptions.Enabled    = false;
                cboAzureEnvironment.Enabled = true;
            }

            _AzureContext.LogProvider.WriteLog("btnAuthenticate_Click", "End");
            _AzureContext.StatusProvider.UpdateStatus("Ready");
        }