예제 #1
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string serverName = request.DataStore.GetValue("ASServerUrl");
            string username   = request.DataStore.GetValue("ASAdmin") ??
                                AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"));
            string password = request.DataStore.GetValue("ASAdminPassword");

            string connectionString = string.Empty;

            if (serverName.ToLowerInvariant().StartsWith("asazure"))
            {
                connectionString += "Provider=MSOLAP;";
            }

            connectionString += $"Data Source={serverName};";

            if (!string.IsNullOrEmpty(password))
            {
                connectionString +=
                    $"User ID={username};Password={password};Persist Security Info=True; Impersonation Level=Impersonate;UseADALCache=0";
            }

            try
            {
                Server server = new Server();
                server.Connect(connectionString);
                request.DataStore.AddToDataStore("ASConnectionString", connectionString, DataStoreType.Private);
            }
            catch (Exception ex)
            {
                return(new ActionResponse(ActionStatus.FailureExpected, null, ex, null));
            }

            return(new ActionResponse(ActionStatus.Success));
        }
예제 #2
0
        public async Task GetAzureEmail()
        {
            DataStore dataStore = new DataStore();
            var       datastore = await AAD.GetUserTokenFromPopup();

            var emailAddress = AzureUtility.GetEmailFromToken(datastore.GetJson("AzureToken"));
        }
예제 #3
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken     = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription   = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup  = request.DataStore.GetValue("SelectedResourceGroup");
            var deploymentName = request.DataStore.GetValue("DeploymentName") ?? "AzureMLDeployment";

            var workspaceName      = request.DataStore.GetValue("WorkspaceName");
            var storageAccountName = request.DataStore.GetValue("StorageAccountName");
            var planName           = request.DataStore.GetValue("PlanName") ?? "azuremlplan";
            var skuName            = request.DataStore.GetValue("SkuName") ?? "S1";
            var skuTier            = request.DataStore.GetValue("SkuTier") ?? "Standard";
            var skuCapacity        = request.DataStore.GetValue("SkuCapacity") ?? "1";

            // Get email address

            var param = new AzureArmParameterGenerator();

            param.AddStringParam("name", workspaceName);
            param.AddStringParam("resourcegroup", resourceGroup);
            param.AddStringParam("subscription", subscription);
            param.AddStringParam("newStorageAccountName", storageAccountName);
            param.AddStringParam("planName", planName);
            param.AddStringParam("skuName", skuName);
            param.AddStringParam("skuTier", skuTier);
            param.AddStringParam("skuCapacity", skuCapacity);
            param.AddStringParam("ownerEmail", AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken")));

            SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken);

            Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds);

            var armTemplate      = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, "Service/Arm/azureml.json")));
            var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject());

            armTemplate.Remove("parameters");
            armTemplate.Add("parameters", armParamTemplate["parameters"]);


            var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment()
            {
                Properties = new DeploymentPropertiesExtended()
                {
                    Template   = armTemplate.ToString(),
                    Parameters = JsonUtility.GetEmptyJObject().ToString()
                }
            };

            var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result;

            if (!validate.IsValid)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null,
                                          DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}"));
            }

            var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result;

            return(new ActionResponse(ActionStatus.Success));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string  code      = request.DataStore.GetValue("code");
            string  aadTenant = request.DataStore.GetValue("AADTenant");
            string  oauthType = (request.DataStore.GetValue("oauthType") ?? string.Empty).ToLowerInvariant();
            JObject token     = new JObject();

            token = oauthType == "mscrm" ? AzureTokenUtility.GetTokenForResourceFromCode(Constants.AzureManagementCoreApi, Constants.MsCrmClientId, aadTenant, request.Info.WebsiteRootUrl, code) :
                    AzureTokenUtility.GetTokenForResourceFromCode(oauthType, aadTenant, request.Info.WebsiteRootUrl, code);

            if (token.SelectToken("error") != null)
            {
                return(new ActionResponse(ActionStatus.Failure, token, null, DefaultErrorCodes.DefaultLoginFailed, token.SelectToken("error_description")?.ToString()));
            }

            var emailAddress = AzureUtility.GetEmailFromToken(token);

            if (emailAddress.Contains('#'))
            {
                emailAddress = emailAddress.Split('#')?[1];
            }
            request.DataStore.AddToDataStore("EmailAddress", emailAddress);

            switch (oauthType)
            {
            case "keyvault":
                request.DataStore.AddToDataStore("AzureTokenKV", token);
                break;

            case "as":
                request.DataStore.AddToDataStore("AzureTokenAS", token);
                break;

            case "mscrm":
                JObject crmToken = AzureTokenUtility.GetTokenForResourceFromExistingToken(oauthType, request.Info.WebsiteRootUrl, token, Constants.MsCrmResource);
                request.DataStore.AddToDataStore("MsCrmToken", crmToken);
                request.DataStore.AddToDataStore("AzureToken", token);
                break;

            case "powerbi":
                request.DataStore.AddToDataStore("PBIToken", token);
                request.DataStore.AddToDataStore("DirectoryName", emailAddress.Split('@').Last());
                request.DataStore.AddToDataStore("PowerBITenantId", AzureUtility.GetTenantFromToken(token));
                break;

            default:
                request.DataStore.AddToDataStore("AzureToken", token);
                var tenantId      = AzureUtility.GetTenantFromToken(token);
                var directoryName = emailAddress.Split('@').Last();
                request.DataStore.AddToDataStore("DirectoryName", directoryName);
                request.DataStore.AddToDataStore("PowerBITenantId", tenantId);
                break;
            }

            return(new ActionResponse(ActionStatus.Success, token, true));
        }
예제 #5
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var    token = request.DataStore.GetJson("AzureToken", "access_token");
            string admin = request.DataStore.GetValue("ASAdmin") ??
                           AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"));

            var obj = JsonUtility.GetJObjectFromStringValue(admin);

            return(new ActionResponse(ActionStatus.Success, obj));
        }
예제 #6
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            string subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");

            string serverName = request.DataStore.GetValue("ASServerName") ?? "analysisserver-" + RandomGenerator.GetRandomLowerCaseCharacters(5);
            string location   = request.DataStore.GetValue("ASLocation") ?? "westus";
            string sku        = request.DataStore.GetValue("ASSku") ?? "D1";
            string admin      = AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"));

            SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken);
            AzureArmParameterGenerator   param = new AzureArmParameterGenerator();

            param.AddStringParam("name", serverName);
            param.AddStringParam("location", location);
            param.AddStringParam("sku", sku);
            param.AddStringParam("admin", admin);

            string armTemplatefilePath = File.ReadAllText(request.ControllerModel.SiteCommonFilePath + "/service/arm/NewAzureAS.json");
            string template            = AzureUtility.GetAzureArmParameters(armTemplatefilePath, param);
            await AzureUtility.ValidateAndDeployArm(creds, resourceGroup, "ASDeployment", template);

            await AzureUtility.WaitForArmDeployment(creds, resourceGroup, "ASDeployment");

            AzureHttpClient client   = new AzureHttpClient(azureToken, subscription, resourceGroup);
            var             response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get
                                                                                                 , $"/providers/Microsoft.AnalysisServices/servers/{serverName}/"
                                                                                                 , "2016-05-16"
                                                                                                 , string.Empty
                                                                                                 , new Dictionary <string, string>());

            string responseBody = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            JObject responseObj = JsonUtility.GetJObjectFromJsonString(responseBody);

            request.DataStore.AddToDataStore("ASServerUrl", responseObj["properties"]["serverFullName"], DataStoreType.Public);

            request.Logger.LogResource(request.DataStore, responseObj["properties"]["serverFullName"].ToString(),
                                       DeployedResourceType.AzureAnalysisServices, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, sku);

            return(new ActionResponse(ActionStatus.Success, responseObj));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string connectionString = request.DataStore.GetValue("ASConnectionString");

            AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"));
            string asDatabase = request.DataStore.GetValue("ASDatabase");

            Server server = new Server();

            server.Connect(connectionString);

            // Process
            var db = server.Databases.Find(asDatabase);

            db.Model.RequestRefresh(RefreshType.Full);
            db.Model.SaveChanges();
            return(new ActionResponse(ActionStatus.Success));
        }
예제 #8
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string code      = request.DataStore.GetValue("code");
            string aadTenant = request.DataStore.GetValue("AADTenant");
            string oauthType = (request.DataStore.GetLastValue("oauthType") ?? string.Empty).ToLowerInvariant();
            string api;
            string clientId;
            string tokenUrl;

            switch (oauthType)
            {
            case "powerbi":
                tokenUrl = string.Format(Constants.AzureTokenUri, aadTenant);
                clientId = Constants.MicrosoftClientIdPowerBI;
                api      = Constants.PowerBIService;
                break;

            case "mscrm":
                api      = Constants.AzureManagementCoreApi;
                clientId = Constants.MsCrmClientId;
                tokenUrl = string.Format(Constants.AzureTokenUri, aadTenant);
                break;

            case "keyvault":
                api      = Constants.AzureManagementCoreApi;
                clientId = Constants.MicrosoftClientIdCrm;
                tokenUrl = string.Format(Constants.AzureTokenUri, aadTenant);
                break;

            default:
                api      = Constants.AzureManagementCoreApi;
                clientId = Constants.MicrosoftClientId;
                tokenUrl = string.Format(Constants.AzureTokenUri, aadTenant);
                break;
            }

            JObject primaryResponse = null;
            JObject obj             = null;

            using (HttpClient client = new HttpClient())
            {
                var builder = GetTokenUri(code, api, request.Info.WebsiteRootUrl, clientId);
                var content = new StringContent(builder.ToString());
                content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
                var response = await client.PostAsync(new Uri(tokenUrl), content).Result.Content.ReadAsStringAsync();

                primaryResponse = JsonUtility.GetJsonObjectFromJsonString(response);
                obj             = new JObject(new JProperty("AzureToken", primaryResponse));

                if (primaryResponse.SelectToken("error") != null)
                {
                    return(new ActionResponse(ActionStatus.Failure, obj, null,
                                              DefaultErrorCodes.DefaultLoginFailed,
                                              primaryResponse.SelectToken("error_description")?.ToString()));
                }
            }

            var emailAddress = AzureUtility.GetEmailFromToken(primaryResponse);

            if (emailAddress.Contains('#'))
            {
                emailAddress = emailAddress.Split('#')?[1];
            }
            request.DataStore.AddToDataStore("EmailAddress", emailAddress);

            switch (oauthType)
            {
            case "keyvault":
                request.DataStore.AddToDataStore("AzureTokenKV", primaryResponse);
                break;

            case "mscrm":
                JObject crmToken = RetrieveCrmToken(primaryResponse["refresh_token"].ToString(), request.Info.WebsiteRootUrl, request.DataStore);
                request.DataStore.AddToDataStore("MsCrmToken", crmToken);
                request.DataStore.AddToDataStore("AzureToken", primaryResponse);
                break;

            default:
                request.DataStore.AddToDataStore("AzureToken", primaryResponse);

                var tenantId = new JwtSecurityToken(primaryResponse["id_token"].ToString())
                               .Claims.First(e => e.Type.ToLowerInvariant() == "tid")
                               .Value;

                var directoryName = emailAddress.Split('@').Last();

                request.DataStore.AddToDataStore("DirectoryName", directoryName);
                request.DataStore.AddToDataStore("PowerBITenantId", tenantId);
                break;
            }
            return(new ActionResponse(ActionStatus.Success, obj, true));
        }