private async Task <bool> TryDeleteApiProxyRevision(ICakeContext ctx, string orgName, string proxyName, string revisionNumber, ICredentialSettings settings) { var url = baseUri + $"v1/organizations/{orgName}/apis/{proxyName}/revisions/{revisionNumber}"; using (HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Delete, url)) { if (!string.IsNullOrEmpty(settings?.Credentials?.Username)) { AddAuthorization(settings.Credentials, message); } message.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); using (HttpResponseMessage response = await client.SendAsync(message)) { string body = response.Content != null ? await response.Content.ReadAsStringAsync() : null; if (settings?.Debug ?? false) { Console.WriteLine(); Console.WriteLine("RESPONSE from " + message.RequestUri); Console.WriteLine(body); } bool?result = null; if (response.StatusCode == HttpStatusCode.BadRequest) { var error = JsonConvert.DeserializeObject <ErrorResult>(body); if (error.Code == "distribution.ApplicationCanNotBeDeleted") { result = false; } } else if (response.IsSuccessStatusCode) { result = true; } ctx.Log.Verbose("Proxy revision {0} for {1} {2}", proxyName, revisionNumber, result ?? false ? "deleted" : "not deleted"); if (result == null) { throw new Exception($"Apigee returned unexpected status code '{response.StatusCode}' when deleting revision " + revisionNumber + " of proxy " + proxyName); } return(result.Value); } } }
private async Task <T> SendMessage <T>(ICakeContext ctx, HttpRequestMessage message, ICredentialSettings settings) { using (HttpResponseMessage response = await client.SendAsync(message)) { if (!response.IsSuccessStatusCode) { string error = response.Content != null ? await response.Content.ReadAsStringAsync() : null; ctx.Log.Error("Apigee status {0} returned: {1}", response.StatusCode, error); throw new Exception("Apigee returned " + response.StatusCode + ": " + message.Method + " " + message.RequestUri); } string body = await response.Content.ReadAsStringAsync(); if (settings?.Debug ?? false) { Console.WriteLine(); Console.WriteLine("RESPONSE from " + message.RequestUri); Console.WriteLine(body); } return(JsonConvert.DeserializeObject <T>(body)); } }
public async Task <ApiProxy> DeleteApiProxyRevision(ICakeContext ctx, string orgName, string proxyName, string revisionNumber, ICredentialSettings settings) { var url = baseUri + $"v1/organizations/{orgName}/apis/{proxyName}/revisions/{revisionNumber}"; using (HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Delete, url)) { if (!string.IsNullOrEmpty(settings?.Credentials?.Username)) { AddAuthorization(settings.Credentials, message); } message.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); return(await SendMessage <ApiProxy>(ctx, message, settings)); } }
public async Task DeleteAllUndeployedApiProxyRevisions(ICakeContext ctx, string orgName, string proxyName, ICredentialSettings settings) { var proxy = await GetApiProxy(ctx, orgName, proxyName, settings); var tasks = new List <Task>(); foreach (var revision in proxy.Revision) { tasks.Add(TryDeleteApiProxyRevision(ctx, orgName, proxyName, revision, settings)); } Task.WaitAll(tasks.ToArray()); }
public async Task <ApiProxy> GetApiProxy(ICakeContext ctx, string orgName, string proxyName, ICredentialSettings settings) { // https://api.enterprise.apigee.com string url = baseUri + $"v1/organizations/{orgName}/apis/{proxyName}"; using (HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, url)) { if (!string.IsNullOrEmpty(settings?.Credentials?.Username)) { AddAuthorization(settings.Credentials, message); } message.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); return(await SendMessage <ApiProxy>(ctx, message, settings)); } }