Example #1
0
        //#########################################
        //##        GetDeploy                    ##
        //#########################################

        public async Task GetDeploy(int Id)
        {
            var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault();

            string tennantID         = deployTypes.Tennant.AzureTennantId;
            string clientID          = deployTypes.Tennant.AzureClientId;
            string secret            = deployTypes.Tennant.AzureClientSecret;
            string subscriptionID    = deployTypes.Tennant.AzureSubscriptionId;
            string resourcegroupname = deployTypes.ResourceGroupName;

            if (string.IsNullOrEmpty(resourcegroupname) == true)
            {
                resourcegroupname = deployTypes.Tennant.ResourceGroupName;
            }
            string resourcegroup = deployTypes.Tennant.ResourceGroupName;
            string azuredeploy   = deployTypes.AzureDeployName;

            var results = RESTApi.PostAction(tennantID, clientID, secret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result);
            string accesstoken = AccessToken.access_token;

            var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroupname, accesstoken, azuredeploy);

            if (await getcontent == null)
            {
                deployTypes.DeployResult = "";
            }
            else
            {
                deployTypes.DeployResult = await getcontent;
            }
            _context.Update(deployTypes);
            await _context.SaveChangesAsync();
        }
Example #2
0
        public async Task <IActionResult> CreateConAccessPolicy(int Id)
        {
            var    deployTypes = _context.DeployTypes.Include(d => d.Tennants).Where(d => d.DeployTypeID == Id).FirstOrDefault();
            var    policyPath  = _context.TennantParams.Where(t => t.ParamName == "PolicyPath").FirstOrDefault();
            string path        = policyPath.ParamValue;

            var tokenResults = RESTApi.GraphToken(deployTypes.Tennants.AzureTennantID, deployTypes.Tennants.AzureClientID, deployTypes.Tennants.AzureClientSecret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result);
            string accesstoken = AccessToken.access_token;

            string uri     = "https://graph.microsoft.com/beta/conditionalAccess/Policies";
            var    restAPI = new RESTApi(_storageConfig, hostingEnv);

            var result = await restAPI.GraphPostAction(accesstoken, uri, path);

            string filename = path;

            filename = hostingEnv.WebRootPath + $@"\csv\{filename}";


            if (!System.IO.File.Exists(filename))
            {
                System.IO.File.WriteAllText(filename, result);
            }

            deployTypes.DeploySaved  = "N/A";
            deployTypes.DeployResult = result;
            deployTypes.DeployState  = "N/A";
            deployTypes.DeployState  = "Deployed";
            _context.Update(deployTypes);
            await _context.SaveChangesAsync();

            return(RedirectToAction("Index", "DeployTypes", new { Id = deployTypes.TennantID }));
        }
Example #3
0
        //##########################################
        //##            CheckQueue                ##
        //##########################################

        public async Task <string> CheckQueue(int Id)
        {
            var QueueList = _context.Queue.Include(q => q.DeployType).Where(q => q.DeployTypeId == Id).FirstOrDefault();

            string tennantID      = QueueList.DeployType.Tennant.AzureTennantId;
            string clientID       = QueueList.DeployType.Tennant.AzureClientId;
            string secret         = QueueList.DeployType.Tennant.AzureClientSecret;
            string subscriptionID = QueueList.DeployType.Tennant.AzureSubscriptionId;
            string resourcegroup  = QueueList.Resourcegroup;

            if (string.IsNullOrEmpty(resourcegroup) == true)
            {
                resourcegroup = QueueList.DeployType.Tennant.ResourceGroupName;
            }
            string azuredeploy = QueueList.Azuredeploy;

            var results = RESTApi.PostAction(tennantID, clientID, secret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result);
            string accesstoken = AccessToken.access_token;

            var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroup, accesstoken, azuredeploy);

            if (await getcontent == null)
            {
                QueueList.DeployType.DeployResult = "";
            }
            else
            {
                QueueList.DeployType.DeployResult = await getcontent;
            }
            _context.Update(QueueList.DeployType);
            await _context.SaveChangesAsync();


            var content = await getcontent;

            return(content);
        }
Example #4
0
        public async Task <IActionResult> GetConAccessPolicy(int Id)
        {
            var deployTypes = _context.DeployTypes.Include(d => d.Tennants).Where(d => d.DeployTypeID == Id).FirstOrDefault();

            var tokenResults = RESTApi.GraphToken(deployTypes.Tennants.AzureTennantID, deployTypes.Tennants.AzureClientID, deployTypes.Tennants.AzureClientSecret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result);
            string accesstoken = AccessToken.access_token;
            string uri         = "https://graph.microsoft.com/beta/conditionalAccess/Policies";
            var    result      = await RESTApi.GraphGetAction(accesstoken, uri);

            JObject o = JObject.Parse(result);

            deployTypes.DeploySaved  = "N/A";
            deployTypes.DeployResult = result;
            deployTypes.DeployState  = "N/A";
            deployTypes.DeployState  = "Deployed";
            _context.Update(deployTypes);
            await _context.SaveChangesAsync();

            return(RedirectToAction("Index", "DeployTypes", new { Id = deployTypes.TennantID }));
        }
Example #5
0
        //##########################################
        //##            DeployfromQueue           ##
        //#########################################

        public async Task <string> DeployfromQueue(int Id, bool Force)
        {
            var results = string.Empty;

            //Get DeployType to allow update of DeployState
            var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault();

            //Get Queue Item to process
            var QueueItem = _context.Queue.Include(q => q.DeployType).Include(q => q.DeployType.Tennant).Where(q => q.DeployTypeId == Id).FirstOrDefault();

            //Declare variables for use in Deploy method
            string resourcegroup  = QueueItem.Resourcegroup;
            string subscriptionID = QueueItem.SubscriptionId;
            string azuredeploy    = QueueItem.Azuredeploy;
            string tennantID      = QueueItem.DeployType.Tennant.AzureTennantId;
            string TennantName    = QueueItem.DeployType.Tennant.TennantName;
            string clientID       = QueueItem.DeployType.Tennant.AzureClientId;
            string secret         = QueueItem.DeployType.Tennant.AzureClientSecret;
            string DepParams      = QueueItem.DeployType.ParamsFile;
            string DeployFile     = QueueItem.DeployType.DeployFile;

            //Get Access Token from HTTP POST to Azure
            var tokenResults = RESTApi.PostAction(tennantID, clientID, secret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result);
            string accesstoken = AccessToken.access_token;
            var    sasToken    = AzureHelper.GetSASToken(_storageConfig);

            //Create relevant JSON Object for deployment.
            string jsonDeploy = "{\"properties\": { \"templateLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/{template}{sasToken}\", \"contentVersion\": \"1.0.0.0\"}, \"mode\": \"Incremental\", \"parametersLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/deployments/{parameters}{sasToken}\", \"contentVersion\": \"1.0.0.0\" } } }";

            jsonDeploy = jsonDeploy.Replace("{sasToken}", sasToken);

            //Set Deploy Template dependent on Deployment Type
            //Add new Deployment Type logic here!

            jsonDeploy = jsonDeploy.Replace("{template}", DeployFile);
            DepParams  = DepParams.Replace("{tennant}", TennantName);
            DepParams  = DepParams.Replace("{id}", QueueItem.DeployType.DeployTypeId.ToString());
            jsonDeploy = jsonDeploy.Replace("{parameters}", DepParams);

            //Run main deploy REST API call to Azure
            var     putcontent = RESTApi.PutAsync(subscriptionID, resourcegroup, azuredeploy, accesstoken, jsonDeploy, false);
            JObject json       = JsonConvert.DeserializeObject <JObject>(putcontent.Result);

            //Make DeployState as Queued
            deployTypes.DeployState = "Queued";
            _context.Update(deployTypes);

            //Run CheckQueue method to ensure deployment complete before moving onto next item.
            var check = CheckQueue(Id);

            while (!check.Result.Contains("Succeeded") && !check.Result.Contains("Failed"))
            {
                QueueItem.Status = "Running";
                _context.Update(QueueItem);
                await _context.SaveChangesAsync();

                //Currently set to sleep for 30 secs
                //Thread.Sleep(30000);
                check = CheckQueue(Id);
            }

            //Check to see if deployment failed.
            if (check.Result.Contains("Failed"))
            {
                results          = "Failed";
                QueueItem.Status = "Failed - See Results";
                _context.Update(QueueItem);
            }
            //On successful completion of deployment mark Queue Item to Complete.
            results          = "Succeeded";
            QueueItem.Status = "Complete";
            _context.Update(QueueItem);

            var content = await _context.SaveChangesAsync();

            return(results);
        }
Example #6
0
        //#########################################
        //##        GetDeployAll                 ##
        //#########################################

        public async Task GetDeployAll(int Id)
        {
            var deployTypes = await _context.DeployTypes.Include(d => d.Tennant).Where(d => d.TennantId == Id).Where(d => d.DeployState != null).ToListAsync();

            string tennantID      = deployTypes.FirstOrDefault().Tennant.AzureTennantId;
            string clientID       = deployTypes.FirstOrDefault().Tennant.AzureClientId;
            string secret         = deployTypes.FirstOrDefault().Tennant.AzureClientSecret;
            string subscriptionID = deployTypes.FirstOrDefault().Tennant.AzureSubscriptionId;
            //string resourcegroupname = deployTypes.FirstOrDefault().Tennants.ResourceGroupName;
            //if (string.IsNullOrEmpty(resourcegroupname) == true)
            //{
            //    resourcegroupname = deployTypes.FirstOrDefault().Tennants.ResourceGroupName;
            //}
            string resourcegroup = deployTypes.FirstOrDefault().Tennant.ResourceGroupName;
            string azuredeploy   = string.Empty;

            //Add logic for getting deployment for solutions.
            //Example for rdssmallsolution below.

            for (var i = 0; i < deployTypes.Count(); i++)
            {
                string resourcegroupname = deployTypes[i].ResourceGroupName;
                if (string.IsNullOrEmpty(resourcegroupname) == true)
                {
                    resourcegroupname = deployTypes.FirstOrDefault().Tennant.ResourceGroupName;
                }
                if (deployTypes[i].AzureDeployName.Contains("rdssmallsolution"))
                {
                    if (deployTypes[i].DeployName.Contains("(IDS)") || deployTypes[i].DeployName.Contains("Identity Small"))
                    {
                        azuredeploy = "IDSmall";
                    }
                    if (deployTypes[i].DeployName.Contains("(RDSS)") || deployTypes[i].DeployName.Contains("RDS Small"))
                    {
                        azuredeploy = "RDSSmall";
                    }
                    if (deployTypes[i].DeployName.Contains("(VNET)"))
                    {
                        azuredeploy = "VNET";
                    }
                }
                else
                {
                    if (deployTypes[i].AzureDeployName.Contains("rdsmedsolution"))
                    {
                        if (deployTypes[i].DeployName.Contains("(IDM)") || deployTypes[i].DeployName.Contains("Identity Medium") || deployTypes[i].DeployName.Contains("(IDMTYPE)"))
                        {
                            azuredeploy = "IDMed";
                        }
                        if (deployTypes[i].DeployName.Contains("(RDSM)") || deployTypes[i].DeployName.Contains("RDS Medium") || deployTypes[i].DeployName.Contains("(RDSMTYPE)"))
                        {
                            azuredeploy = "RDSMed";
                        }
                        if (deployTypes[i].DeployName.Contains("(VNET)"))
                        {
                            azuredeploy = "VNET";
                        }
                    }

                    else
                    {
                        azuredeploy = deployTypes[i].AzureDeployName;
                    }
                }
                var results = RESTApi.PostAction(tennantID, clientID, secret);
                RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result);
                string accesstoken = AccessToken.access_token;

                var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroupname, accesstoken, azuredeploy);

                if (await getcontent == null)
                {
                    deployTypes[i].DeployResult = " ";
                }
                else
                {
                    deployTypes[i].DeployResult = await getcontent;
                }
                _context.Update(deployTypes[i]);
                await _context.SaveChangesAsync();
            }
            //End of solution logic loop.
        }
Example #7
0
        //#########################################
        //##        DeployToAzure                ##
        //#########################################

        public async Task <string[]> DeployToAzure(int Id, bool Force)
        {
            var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault();

            string[] resultsarr = new string[3];
            //Declare variables for use
            string tennantID         = deployTypes.Tennant.AzureTennantId;
            string clientID          = deployTypes.Tennant.AzureClientId;
            string secret            = deployTypes.Tennant.AzureClientSecret;
            string subscriptionID    = deployTypes.Tennant.AzureSubscriptionId;
            string resourcegroupname = deployTypes.ResourceGroupName;

            if (string.IsNullOrEmpty(resourcegroupname) == true)
            {
                resourcegroupname = deployTypes.Tennant.ResourceGroupName;
            }
            string resourcegrouplocation = deployTypes.Tennant.ResourceGroupLocation;
            string azuredeploy           = string.Empty;


            string jsonResourceGroup = "{ \"location\": \"{resourcegrouplocation}\" }";

            jsonResourceGroup = jsonResourceGroup.Replace("{resourcegrouplocation}", resourcegrouplocation);

            //Get Access Token from HTTP POST to Azure
            var results = RESTApi.PostAction(tennantID, clientID, secret);

            RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result);
            string accesstoken = AccessToken.access_token;
            var    sasToken    = AzureHelper.GetSASToken(_storageConfig);

            //Create json for deployment to be amended.
            string jsonDeploy = "{\"properties\": { \"templateLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/{template}{sasToken}\", \"contentVersion\": \"1.0.0.0\"}, \"mode\": \"Incremental\", \"parametersLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/deployments/{parameters}{sasToken}\", \"contentVersion\": \"1.0.0.0\" } } }";

            jsonDeploy = jsonDeploy.Replace("{sasToken}", sasToken);

            //Set Deploy Template dependent on Deployment Type
            //Add new Deployment Type logic here!

            jsonDeploy = jsonDeploy.Replace("{template}", deployTypes.DeployFile);
            var DepParams = deployTypes.ParamsFile;

            DepParams   = DepParams.Replace("{tennant}", deployTypes.Tennant.TennantName);
            DepParams   = DepParams.Replace("{id}", deployTypes.DeployTypeId.ToString());
            jsonDeploy  = jsonDeploy.Replace("{parameters}", DepParams);
            azuredeploy = deployTypes.AzureDeployName;


            var putResourceGroup = RESTApi.PutAsync(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonResourceGroup, true);

            //PUT request for deployment.
            var ValidateContent = RESTApi.Validate(subscriptionID, resourcegroupname, azuredeploy, accesstoken).Result;

            if (ValidateContent == "DeployExists" && Force == false)
            {
                resultsarr[0] = "DeployExists";
                resultsarr[1] = "";
                resultsarr[2] = "";
                return(resultsarr);
            }
            else
            {
                var ValidateTemplate = RESTApi.ValidateTemplate(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonDeploy).Result;
                if (ValidateTemplate[0] == "TemplateValid")
                {
                    var     putcontent = RESTApi.PutAsync(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonDeploy, false);
                    JObject json       = JsonConvert.DeserializeObject <JObject>(putcontent.Result);

                    //Update Deployment Type to show deployed
                    deployTypes.DeployState  = "Deployed";
                    deployTypes.DeployResult = await putcontent;
                    _context.Update(deployTypes);
                    await _context.SaveChangesAsync();

                    ValidateContent = "False";
                    resultsarr[0]   = "DeployNotExists";
                    resultsarr[1]   = "TemplateValid";
                    resultsarr[2]   = "";
                    return(resultsarr);
                }
                else
                {
                    resultsarr[0] = "DeployNotExists";
                    resultsarr[1] = ValidateTemplate[0];
                    resultsarr[2] = ValidateTemplate[1];
                    return(resultsarr);
                }
            }
        }