예제 #1
0
        public VstsAdapterClient(
            GitHubAuth auth,
            string vstsInstanceName,
            string apiVersionOverride = null)
        {
            Auth             = auth;
            VstsInstanceName = vstsInstanceName;

            _httpClient = X509Helper.GetHttpClientWithCertRevocation();

            _httpClient.DefaultRequestHeaders.Add(
                "Accept",
                $"application/json;api-version={apiVersionOverride ?? DefaultVstsApiVersion}");

            if (auth?.AuthToken != null)
            {
                _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                    "Basic",
                    ClientHelpers.ToBase64($":{auth.AuthToken}"));
            }
        }
예제 #2
0
        public async Task PutGitHubFileAsync(
            string fileUrl,
            string commitMessage,
            string newFileContents)
        {
            EnsureAuthenticated();

            Trace.TraceInformation($"Getting the 'sha' of the current contents of file '{fileUrl}'");

            string currentFile = await _httpClient.GetStringAsync(fileUrl);

            string currentSha = JObject.Parse(currentFile)["sha"].ToString();

            Trace.TraceInformation($"Got 'sha' value of '{currentSha}'");

            Trace.TraceInformation($"Request to update file '{fileUrl}' contents to:");
            Trace.TraceInformation(newFileContents);

            string updateFileBody = JsonConvert.SerializeObject(new
            {
                message   = commitMessage,
                committer = new
                {
                    name  = Auth.User,
                    email = Auth.Email
                },
                content = ClientHelpers.ToBase64(newFileContents),
                sha     = currentSha
            }, Formatting.Indented);

            var bodyContent = new StringContent(updateFileBody);

            using (HttpResponseMessage response = await _httpClient.PutAsync(fileUrl, bodyContent))
            {
                await EnsureSuccessfulAsync(response);

                Trace.TraceInformation("Updated the file successfully.");
            }
        }