internal List GetRdpConnectionDetails()

in 2LCS/HttpClientHelper.cs [541:608]


        internal List<RDPConnectionDetails> GetRdpConnectionDetails(CloudHostedInstance instance)
        {
            var list = new List<RDPConnectionDetails>();

            //check RDP availability
            foreach (var vm in instance.Instances)
            {
                var result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result;
                result.EnsureSuccessStatusCode();
                var responseBody = result.Content.ReadAsStringAsync().Result;
                var rdpPresentResponse = JsonConvert.DeserializeObject<Response>(responseBody);
                if (!rdpPresentResponse.Success) continue;
                _httpClient.DefaultRequestHeaders.Remove("Accept");
                _httpClient.DefaultRequestHeaders.Remove("X-Requested-With");
                _httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
                _httpClient.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");

                result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}&isDownloadEnabled=True").Result;
                result.EnsureSuccessStatusCode();
                responseBody = result.Content.ReadAsStringAsync().Result;
                var line1 = responseBody.Split('\r', '\n').FirstOrDefault();
                if (line1 == null) continue;
                var splited = line1.Split(':');

                _httpClient.DefaultRequestHeaders.Remove("Accept");
                _httpClient.DefaultRequestHeaders.Add("Accept", "*/*");
                _httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
                _httpClient.DefaultRequestHeaders.Remove("Upgrade-Insecure-Requests");

                vm.Credentials = GetCredentials(instance.EnvironmentId, vm.ItemName);

                var localAdmin = vm.Credentials.Where(x => x.Key.Contains("Local admin")).ToDictionary(x => x.Key, x => x.Value);
                if (localAdmin.Count == 1)
                {
                    var adminUsername = localAdmin.First().Key.Split('\\')[1];
                    var adminDomain = localAdmin.First().Key.Split('\\')[0].Split('-')[2];
                    var adminPassword = localAdmin.First().Value;
                    var rdp = new RDPConnectionDetails
                    {
                        Address = splited[2],
                        Port = splited[3],
                        Domain = adminDomain,
                        Username = adminUsername,
                        Password = adminPassword,
                        Machine = vm.MachineName
                    };
                    list.Add(rdp);
                }
                var localUser = vm.Credentials.Where(x => x.Key.Contains("Local user")).ToDictionary(x => x.Key, x => x.Value);
                if (localUser.Count == 1)
                {
                    var userUsername = localUser.First().Key.Split('\\')[1];
                    var userDomain = localUser.First().Key.Split('\\')[0].Split('-')[2];
                    var userPassword = localUser.First().Value;
                    var rdp = new RDPConnectionDetails
                    {
                        Address = splited[2],
                        Port = splited[3],
                        Domain = userDomain,
                        Username = userUsername,
                        Password = userPassword,
                        Machine = vm.MachineName
                    };
                    list.Add(rdp);
                }
            }
            return list;
        }