示例#1
0
        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);
                }
            }
        }
示例#2
0
        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));
            }
        }
示例#3
0
        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));
            }
        }
示例#4
0
        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());
        }
示例#5
0
        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));
            }
        }