private string CreateOrUpdateApi(string apiName, string route, string serviceUrl)
        {
            var existingApi = GetApiByName(apiName);
            var apiId       = (existingApi != null) ? existingApi.Id : Guid.NewGuid().ToString();

            if (existingApi != null)
            {
                Log.Info($"Updating existing Api {existingApi.Id}");
            }

            var apiCreateOrUpdateParams = new ApiCreateOrUpdateParameters
            {
                ApiContract = new ApiContract
                {
                    Name        = apiName,
                    Description = $"Description: {apiName}",
                    Path        = route,
                    ServiceUrl  = serviceUrl,
                    Type        = ApiTypeContract.Http,
                    Protocols   = new List <ApiProtocolContract>
                    {
                        ApiProtocolContract.Https
                    }
                }
            };

            using (var mc = new ApiManagementClient(SubscriptionCloudCredentials))
            {
                mc.Apis.CreateOrUpdate(ApiManagementResGrpName, ApiManagementName, apiId, apiCreateOrUpdateParams, string.Empty);
            }

            Log.Info($"Successfully Created or Updated Api {apiName} Id: {apiId}");
            return(apiId);
        }
        public static void TryCreateApiService(
            this ApiManagementClient client,
            string resourceGroupName,
            string apiServiceName,
            string location,
            SkuType skuType = SkuType.Developer)
        {
            client.ResourceProvider.CreateOrUpdate(
                resourceGroupName,
                apiServiceName,
                new ApiServiceCreateOrUpdateParameters
            {
                Location   = location,
                Properties = new ApiServiceProperties
                {
                    AddresserEmail = "*****@*****.**",
                    PublisherEmail = "*****@*****.**",
                    PublisherName  = "apimgmt"
                },
                SkuProperties = new ApiServiceSkuProperties
                {
                    Capacity = 1,
                    SkuType  = skuType
                }
            });

            var response = client.ResourceProvider.Get(resourceGroupName, apiServiceName);

            ThrowIfTrue(!response.Value.Name.Equals(apiServiceName), string.Format("ApiService name is not equal to {0}", apiServiceName));
        }
Esempio n. 3
0
        public static void TryCreateApiService(
            this ApiManagementClient client,
            string resourceGroupName,
            string apiServiceName,
            string location,
            string skuType = SkuType.Developer)
        {
            client.ApiManagementService.CreateOrUpdate(
                resourceGroupName,
                apiServiceName,
                new ApiManagementServiceResource
            {
                Location = location,
                NotificationSenderEmail = "*****@*****.**",
                PublisherEmail          = "*****@*****.**",
                PublisherName           = "apimgmt",
                Sku = new ApiManagementServiceSkuProperties
                {
                    Capacity = 1,
                    Name     = skuType
                },
            });

            var response = client.ApiManagementService.Get(resourceGroupName, apiServiceName);

            ThrowIfTrue(!response.Name.Equals(apiServiceName), string.Format("ApiService name is not equal to {0}", apiServiceName));
        }
        private IEnumerable <ApiContract> GetApisFromServiceManager(string apiManagementName, string apiManagementResGrpName)
        {
            using (var mc = new ApiManagementClient(SubscriptionCloudCredentials))
            {
                var listResponse = mc.Apis.List(apiManagementResGrpName, apiManagementName, null);

                return(listResponse.Result.Values);
            }
        }
Esempio n. 5
0
        public async override Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            string token          = (string)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_ADAL_TOKEN];
            string subscriptionId = (string)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_SUB_ID];
            string swaggerJson    = (string)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_SWAGGER];
            IEnumerable <ApiManagementProduct> products = (IEnumerable <ApiManagementProduct>)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_PRODUCTS];
            ApiManagementInstance apimInstance          = (ApiManagementInstance)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_APIM_INSTANCE];
            ApiAppResource        apiApp = (ApiAppResource)context.Args[Constants.CONNECTED_SERVICE_METADATA_KEY_FOR_API_APP];

            using (var apiManagementClient = new ApiManagementClient(
                       new TokenCloudCredentials(subscriptionId, token)
                       ))
            {
                await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                                                       Resources.ProgressMessageImportingSwaggerTemplate,
                                                       apiApp.Name,
                                                       apimInstance.Name);

                // import the api
                using (MemoryStream stream = new MemoryStream())
                {
                    var writer = new StreamWriter(stream);
                    writer.Write(swaggerJson);
                    writer.Flush();
                    stream.Position = 0;

                    apiManagementClient.Apis.Import(
                        ResourceUtilities.GetResourceGroupFromResourceId(apimInstance.ResourceId),
                        apimInstance.Name,
                        apiApp.Name,
                        Constants.SWAGGER_CONTENT_TYPE,
                        stream,
                        apiApp.Name);
                }

                // add the api to products
                foreach (var product in products)
                {
                    await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                                                           Resources.ProgressMessageAddingApiToProductTemplate,
                                                           apiApp.Name,
                                                           product.Name);

                    apiManagementClient.ProductApis.Add(
                        ResourceUtilities.GetResourceGroupFromResourceId(apimInstance.ResourceId),
                        apimInstance.Name,
                        product.Id,
                        apiApp.Name);
                }
            }

            AddServiceInstanceResult result = new AddServiceInstanceResult(
                "AzureApiManagement",
                null);

            return(result);
        }
        private void CreateOrUpdateProduct(string productName, string apiId)
        {
            var product = GetProductIdFromName(productName);

            using (var mc = new ApiManagementClient(SubscriptionCloudCredentials))
            {
                mc.ProductApis.Add(ApiManagementResGrpName, ApiManagementName, product.Id, apiId);
            }
            Log.Info($"Successfully Created or Updated Product {product.Name} Id: {product.Id}");
        }
Esempio n. 7
0
        private async void BGetSubscriptions_Click(object sender, EventArgs e)
        {
            ApiManagementConnection ClientFactory = new ApiManagementConnection(TBBearerToken.Text, TBSubscriptionId.Text);

            ApiManagementClient Client = ClientFactory.Instance;

            SubscriptionListResponse Response
                = await Client.Subscriptions.ListAsync(TBResourceGroup.Text, TBServiceName.Text, null);

            DGVSubscriptions.DataSource = new BindingSource(Response.Result, "Values");
        }
        public static void RefreshAccessToken(this ApiManagementClient apiManagementClient)
        {
            if (HttpMockServer.Mode == HttpRecorderMode.Playback)
            {
                // if it's playback then do nothing
                return;
            }

            var testEnvironment = new CSMTestEnvironmentFactory().GetTestEnvironment();
            var context         = new AuthenticationContext(new Uri(testEnvironment.Endpoints.AADAuthUri, testEnvironment.Tenant).AbsoluteUri);

            var result   = context.AcquireToken("https://management.core.windows.net/", testEnvironment.ClientId, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Auto);
            var newToken = context.AcquireTokenByRefreshToken(result.RefreshToken, testEnvironment.ClientId, "https://management.core.windows.net/");

            ((TokenCloudCredentials)apiManagementClient.Credentials).Token = newToken.AccessToken;
        }
        private async Task GetApiManagementProducts()
        {
            if (Wizard.Pages.First(x => x.Legend == Resources.Page2Legend).IsSelected)
            {
                using (Context.StartBusyIndicator(Resources.WaitMessageRetrievingProductList))
                {
                    IAzureRMUserAccountSubscriptionContext sub = _selectedSubscription;
                    if (sub == null)
                    {
                        return;
                    }

                    Token = await sub.GetAuthenticationHeaderAsync(true);

                    Token = Token.Substring("Bearer ".Length);

                    ApiManagementClient = new ApiManagementClient(
                        new TokenCloudCredentials(SelectedSubscription.Subscription.SubscriptionId, Token)
                        );

                    var productResponse = await ApiManagementClient.Products.ListAsync(
                        ResourceUtilities.GetResourceGroupFromResourceId(SelectedApiManagementInstance.ResourceId),
                        SelectedApiManagementInstance.Name,
                        new QueryParameters()
                        );

                    var products = new List <ApiManagementProduct>();

                    foreach (var product in productResponse.Result.Values)
                    {
                        products.Add(new ApiManagementProduct
                        {
                            Name = product.Name,
                            Id   = product.Id
                        });
                    }

                    _dispatcher.Invoke(() =>
                    {
                        Products.Clear();
                        products.ForEach(p => Products.Add(p));
                    });
                }
            }
        }
        public static void RefreshAccessToken(this ApiManagementClient apiManagementClient)
        {
            //if (HttpMockServer.Mode == HttpRecorderMode.Playback)
            //{
            //    // if it's playback then do nothing
            //    return;
            //}

            //var testEnvironment = new CSMTestEnvironmentFactory().GetTestEnvironment();
            ////var context = TokenCloudCredentialsHelper.GetToken(testEnvironment.Endpoints.AADAuthUri.ToString(), testEnvironment.Tenant, testEnvironment.ClientId, (string)null, (string)null);
            //var context = new AuthenticationContext(new Uri(testEnvironment.Endpoints.AADAuthUri, testEnvironment.Tenant).AbsoluteUri);

            //var result = context.AcquireToken("https://management.core.windows.net/", testEnvironment.ClientId, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Auto);
            //var newToken = context.AcquireTokenByRefreshToken(result.RefreshToken, testEnvironment.ClientId, "https://management.core.windows.net/");

            ////context.TokenCache.ReadItems().Where(item => item.)
            //((TokenCloudCredentials) apiManagementClient.Credentials).Token = newToken.AccessToken;
        }
        public static void UseAzureApiMangement(this ITunnelBuilderThatHasAnOpenApiDocumentEndpoint builder,
                                                AzureApiManagementCreateApiOptions options = null)
        {
            options ??= new AzureApiManagementCreateApiOptions();
            var publicSwaggerUrl = $"{builder.RootUrl}/{builder.OpenApiDocumentEndpoint}";
            var subscriptionId   = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
            var clientId         = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
            var clientSecret     = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
            var tenantId         = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");

            var credentials = SdkContext.AzureCredentialsFactory
                              .FromServicePrincipal(clientId,
                                                    clientSecret,
                                                    tenantId,
                                                    AzureEnvironment.AzureGlobalCloud)
                              .WithDefaultSubscription(subscriptionId);

            ApiManagementClient = new ApiManagementClient(credentials);
            ApiManagementClient.SubscriptionId = subscriptionId;

            ApiCreateOrUpdateParameter parms = new ApiCreateOrUpdateParameter
            {
                Path       = $"{options.ApiId}/{CleanVersion(builder.Version)}",
                Format     = ContentFormat.OpenapijsonLink,
                Value      = publicSwaggerUrl,
                ServiceUrl = builder.RootUrl
            };

            // wait for the host to start to try to hit it
            builder.Host.Services.GetService <IHostApplicationLifetime>().ApplicationStarted.Register(() =>
            {
                ApiManagementClient.Api.CreateOrUpdate(
                    options.ResourceGroupName,
                    options.ApiManagementServiceName,
                    $"{options.ApiId}-{CleanVersion(builder.Version)}",
                    parms
                    );
            });
        }
 public static void RefreshAccessToken(this ApiManagementClient apiManagementClient)
 {
 }