コード例 #1
0
        private Uri GetTenantAuthorityUrl(IHostContext context, string serverUrl)
        {
            using (var handler = context.CreateHttpClientHandler())
                using (var client = new HttpClient(handler))
                {
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Add("X-TFS-FedAuthRedirect", "Suppress");
                    client.DefaultRequestHeaders.UserAgent.Clear();
                    client.DefaultRequestHeaders.UserAgent.AddRange(VssClientHttpRequestSettings.Default.UserAgent);
                    using (var requestMessage = new HttpRequestMessage(HttpMethod.Head, $"{serverUrl.Trim('/')}/_apis/connectiondata"))
                    {
                        var response = client.SendAsync(requestMessage).GetAwaiter().GetResult();

                        // Get the tenant from the Login URL, MSA backed accounts will not return `Bearer` www-authenticate header.
                        var bearerResult = response.Headers.WwwAuthenticate.Where(p => p.Scheme.Equals("Bearer", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
                        if (bearerResult != null && bearerResult.Parameter.StartsWith("authorization_uri=", StringComparison.OrdinalIgnoreCase))
                        {
                            var authorizationUri = bearerResult.Parameter.Substring("authorization_uri=".Length);
                            if (Uri.TryCreate(authorizationUri, UriKind.Absolute, out Uri aadTenantUrl))
                            {
                                return(aadTenantUrl);
                            }
                        }

                        return(null);
                    }
                }
        }
コード例 #2
0
ファイル: CheckUtil.cs プロジェクト: rust-lang/gha-runner
        public static async Task <CheckResult> CheckHttpsPostRequests(this IHostContext hostContext, string url, string pat, string expectedHeader)
        {
            var result = new CheckResult();

            try
            {
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****                                                                                                       ****");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****     Send HTTPS Request (POST) to {url} ");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****                                                                                                       ****");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                using (var _ = new HttpEventSourceListener(result.Logs))
                    using (var httpClientHandler = hostContext.CreateHttpClientHandler())
                        using (var httpClient = new HttpClient(httpClientHandler))
                        {
                            httpClient.DefaultRequestHeaders.UserAgent.AddRange(hostContext.UserAgents);
                            if (!string.IsNullOrEmpty(pat))
                            {
                                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("token", pat);
                            }

                            // Send empty JSON '{}' to service
                            var response = await httpClient.PostAsJsonAsync <Dictionary <string, string> >(url, new Dictionary <string, string>());

                            result.Logs.Add($"{DateTime.UtcNow.ToString("O")} Http status code: {response.StatusCode}");
                            result.Logs.Add($"{DateTime.UtcNow.ToString("O")} Http response headers: {response.Headers}");

                            var responseContent = await response.Content.ReadAsStringAsync();

                            result.Logs.Add($"{DateTime.UtcNow.ToString("O")} Http response body: {responseContent}");
                            if (response.Headers.Contains(expectedHeader))
                            {
                                result.Pass = true;
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} Http request 'POST' to {url} has expected HTTP response header");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ");
                            }
                            else
                            {
                                result.Pass = false;
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} Http request 'POST' to {url} doesn't have expected HTTP response Header '{expectedHeader}'.");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ");
                                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ");
                            }
                        }
            }
            catch (Exception ex)
            {
                result.Pass = false;
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****                                                                                                       ****");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****     Https request 'POST' to {url} failed with error: {ex}");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ****                                                                                                       ****");
                result.Logs.Add($"{DateTime.UtcNow.ToString("O")} ***************************************************************************************************************");
            }

            return(result);
        }