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}")); } }
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."); } }