Пример #1
0
        public async override Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Updating Config");

            using (EditableXmlConfigHelper configHelper = context.CreateEditableXmlConfigHelper())
            {
                configHelper.SetAppSetting(
                    string.Format("{0}:ConnectionString", context.ServiceInstance.Name),
                    "SomeServiceConnectionString",
                    context.ServiceInstance.Name
                    );
                configHelper.Save();
            }
            Thread.Sleep(1000);
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Adding NuGets");

            Thread.Sleep(1000);
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Adding References");

            Thread.Sleep(1000);

            AddServiceInstanceResult result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri("https://github.com/Microsoft/ConnectedServices-ProviderAuthorSamples"));

            return(result);
        }
Пример #2
0
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(
            ConnectedServiceHandlerContext context,
            CancellationToken cancellationToken)
        {
            var instance = (Instance)context.ServiceInstance;

            // await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Checking prerequisites...");
            // await CheckingPrerequisitesAsync(context, instance);

            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, $"Generating code for {instance.ServiceUri}");

            var nswagFilePath = await GenerateNswagFileAsync(context, instance);

            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, $"Generated {Path.GetFileName(nswagFilePath)}");

            var csharpFilepath = await GenerateCSharpFileAsync(context, instance);

            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, $"Generated {Path.GetFileName(csharpFilepath)}");

            var folderName        = context.ServiceInstance.Name;
            var gettingStartedUrl = new Uri(Constants.Website);
            var result            = new AddServiceInstanceResult(folderName, gettingStartedUrl);

            return(result);
        }
        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;
        }
Пример #4
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);
        }
Пример #5
0
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            var codeGenDescriptor = await SaveServiceInstanceAsync(context).ConfigureAwait(false);

            var result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri(codeGenDescriptor.ClientDocUri));

            return(result);
        }
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            var instance = (Instance)context.ServiceInstance;
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, $"Generating code for {instance.JSONPath}");

            var csharpFilepath = await GenerateCSharpFileAsync(context, instance);

            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, $"Generated {Path.GetFileName(csharpFilepath)}");

            var folderName = context.ServiceInstance.Name;
            var result     = new AddServiceInstanceResult(folderName, null);

            return(result);
        }
Пример #7
0
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            Project project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            ODataConnectedServiceInstance codeGenInstance = (ODataConnectedServiceInstance)context.ServiceInstance;

            var codeGenDescriptor = await GenerateCode(codeGenInstance.MetadataTempFilePath, codeGenInstance.ServiceConfig.EdmxVersion, context, project);

            context.SetExtendedDesignerData <ServiceConfiguration>(codeGenInstance.ServiceConfig);

            var result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri(codeGenDescriptor.ClientDocUri));

            return(result);
        }
Пример #8
0
        public override async Task<AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            Project project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            ODataConnectedServiceInstance codeGenInstance = (ODataConnectedServiceInstance)context.ServiceInstance;

            var codeGenDescriptor = await GenerateCode(codeGenInstance.MetadataTempFilePath, codeGenInstance.ServiceConfig.EdmxVersion, context, project);

            context.SetExtendedDesignerData<ServiceConfiguration>(codeGenInstance.ServiceConfig);

            var result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri(codeGenDescriptor.ClientDocUri));

            return result;
        }
        public override async Task<AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            Project project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            ODataConnectedServiceInstance codeGenInstance = (ODataConnectedServiceInstance)context.ServiceInstance;

            if (codeGenInstance.GenByDataSvcUtil)
            {
                await this.AddNuGetPackagesAsync(context, project, new Version(3, 0));
                await this.GenerateClientCode(context, project);
            }
            else
            {
                await this.AddNuGetPackagesAsync(context, project, new Version(3, 0));
                await this.GenerateClientCodeWithoutDataSvcUtil(context, project);
            }

            AddServiceInstanceResult result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri("https://github.com/odata/odata.net"));

            return result;
        }
Пример #10
0
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            Project project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            ODataConnectedServiceInstance codeGenInstance = (ODataConnectedServiceInstance)context.ServiceInstance;

            if (codeGenInstance.GenByDataSvcUtil)
            {
                await this.AddNuGetPackagesAsync(context, project, new Version(3, 0));

                await this.GenerateClientCode(context, project);
            }
            else
            {
                await this.AddNuGetPackagesAsync(context, project, new Version(3, 0));

                await this.GenerateClientCodeWithoutDataSvcUtil(context, project);
            }

            AddServiceInstanceResult result = new AddServiceInstanceResult(
                context.ServiceInstance.Name,
                new Uri(Common.Constants.V3DocUri));

            return(result);
        }
        public async override Task<AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Updating Config");
            using (EditableXmlConfigHelper configHelper = context.CreateEditableXmlConfigHelper())
            {
                configHelper.SetAppSetting(
                    string.Format("{0}:ConnectionString", context.ServiceInstance.Name),
                    "SomeServiceConnectionString",
                    context.ServiceInstance.Name
                    );
                configHelper.Save();
            }
            Thread.Sleep(1000);
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Adding NuGets");
            Thread.Sleep(1000);
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "Adding References");
            Thread.Sleep(1000);

            AddServiceInstanceResult result = new AddServiceInstanceResult(
                    context.ServiceInstance.Name,
                    new Uri("https://github.com/Microsoft/ConnectedServices-ProviderAuthorSamples"));

            return result;
        }
        public async override Task<AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context,
            CancellationToken ct)
        {
            AddServiceInstanceResult result = new AddServiceInstanceResult(
                Resources.ConnectedServiceProjectFolderName,
                new Uri(Resources.MoreInfoUrl));

            Project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            string projectNamespace = Project.Properties.Item("DefaultNamespace").Value.ToString();

            // get the collection of keys to be added
            var receiverSecrets = context.ServiceInstance.Metadata[Constants.MetadataKeyForStoringReceiverSecrets]
                as IEnumerable<WebHookReceiverSecret>;

            // install all of the base WebHook NuGets
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                Resources.LogMessageGettingCoreNuGets);

            InstallPackage("Microsoft.AspNet.WebApi.WebHost", "5.2.3");
            InstallPackage("Microsoft.AspNet.WebHooks.Common", "1.2.0-beta3");
            InstallPackage("Microsoft.AspNet.WebHooks.Receivers", "1.2.0-beta3");

            // remember the list of providers selected
            List<string> providers = new List<string>();

            using (EditableXmlConfigHelper configHelper = context.CreateEditableXmlConfigHelper())
            {
                // iterate over the selected hook receivers
                foreach (var item in receiverSecrets)
                {
                    // add the keys in the web.config for each provider
                    configHelper.SetAppSetting(item.ReceiverSecretConfigSettingName, item.Secret);

                    // pull in the NuGet for the receiver
                    await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                        string.Format(Resources.LogMessageGettingReceiver, item.Option.Name));

                    InstallPackage(item.Option.NuGetPackage, item.Option.NuGetVersion);

                    // add the handler code to the project
                    await GeneratedCodeHelper
                        .GenerateCodeFromTemplateAndAddToProject(
                            context,
                            "WebHookHandler",
                            string.Format($@"WebHookHandlers\{item.Option.Name}WebHookHandler.cs"),
                            new Dictionary<string, object>
                            {
                                {"ns", projectNamespace},
                                {"receiverName", item.Option.Name}
                            });

                    // remember this provider
                    providers.Add(item.Option.Name);

                    // record the telemetry for the receiver
                    TelemetryWrapper.RecordEvent("Receiver Selected",
                        properties: new Dictionary<string, string>()
                        {
                            {"Name", item.Option.Name}
                        });
                }

                // add the code to the project to configure all of the providers
                await GeneratedCodeHelper
                    .GenerateCodeFromTemplateAndAddToProject(
                        context,
                        "WebHookConfig",
                        string.Format($@"App_Start\WebHookConfig.cs"),
                        new Dictionary<string, object>
                        {
                            {"ns", projectNamespace},
                            {"providers", providers.ToArray() }
                        });

                // persist the configuration changes
                configHelper.Save();
            }

            // record that we finished
            TelemetryWrapper.RecordEvent("WebHook Experience Completed");

            // return
            return result;
        }
        public async override Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context,
                                                                                      CancellationToken ct)
        {
            AddServiceInstanceResult result = new AddServiceInstanceResult(
                Resources.ConnectedServiceProjectFolderName,
                new Uri(Resources.MoreInfoUrl));

            Project = ProjectHelper.GetProjectFromHierarchy(context.ProjectHierarchy);
            string projectNamespace = Project.Properties.Item("DefaultNamespace").Value.ToString();

            // get the collection of keys to be added
            var receiverSecrets = context.ServiceInstance.Metadata[Constants.MetadataKeyForStoringReceiverSecrets]
                                  as IEnumerable <WebHookReceiverSecret>;

            // install all of the base WebHook NuGets
            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                                                   Resources.LogMessageGettingCoreNuGets);

            InstallPackage("Microsoft.AspNet.WebApi.WebHost", "5.2.3");
            InstallPackage("Microsoft.AspNet.WebHooks.Common", "1.2.0-beta3a");
            InstallPackage("Microsoft.AspNet.WebHooks.Receivers", "1.2.0-beta3a");

            // remember the list of providers selected
            List <string> providers = new List <string>();

            using (EditableXmlConfigHelper configHelper = context.CreateEditableXmlConfigHelper())
            {
                // iterate over the selected hook receivers
                foreach (var item in receiverSecrets)
                {
                    // add the keys in the web.config for each provider
                    configHelper.SetAppSetting(item.ReceiverSecretConfigSettingName, item.Secret);

                    // pull in the NuGet for the receiver
                    await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information,
                                                           string.Format(Resources.LogMessageGettingReceiver, item.Option.Name));

                    InstallPackage(item.Option.NuGetPackage, item.Option.NuGetVersionOverride);

                    var classNamePrefix = ((string.IsNullOrEmpty(item.Option.ConfigWireupOverride))
                                    ? item.Option.Name
                                    : item.Option.ConfigWireupOverride);

                    var receiverName = ((string.IsNullOrEmpty(item.Option.ReceiverNameOverride))
                                    ? classNamePrefix
                                    : item.Option.ReceiverNameOverride);

                    var incomingType = ((string.IsNullOrEmpty(item.Option.IncomingTypeOverride))
                                    ? "JObject"
                                    : item.Option.IncomingTypeOverride);

                    // add the handler code to the project
                    await GeneratedCodeHelper
                    .GenerateCodeFromTemplateAndAddToProject(
                        context,
                        "WebHookHandler",
                        string.Format($@"WebHookHandlers\{classNamePrefix}WebHookHandler.cs"),
                        new Dictionary <string, object>
                    {
                        { "ns", projectNamespace },
                        { "classNamePrefix", classNamePrefix },
                        { "receiverName", receiverName },
                        { "incomingType", incomingType }
                    });

                    // remember this provider
                    providers.Add(classNamePrefix);

                    // record the telemetry for the receiver
                    TelemetryWrapper.RecordEvent($"{item.Option.Name}");
                }

                // add the code to the project to configure all of the providers
                await GeneratedCodeHelper
                .GenerateCodeFromTemplateAndAddToProject(
                    context,
                    "WebHookConfig",
                    string.Format($@"App_Start\WebHookConfig.cs"),
                    new Dictionary <string, object>
                {
                    { "ns", projectNamespace },
                    { "providers", providers.ToArray() }
                });

                // persist the configuration changes
                configHelper.Save();
            }

            // record that we finished
            TelemetryWrapper.RecordEvent("WebHook Experience Completed");

            // return
            return(result);
        }
Пример #14
0
        public override async Task <AddServiceInstanceResult> AddServiceInstanceAsync(ConnectedServiceHandlerContext context, CancellationToken ct)
        {
            var cancel = context.ServiceInstance.Metadata["Cancel"];

            if (cancel != null)
            {
                if ((bool)cancel)
                {
                    // Cancellation
                    throw new OperationCanceledException();
                }
            }

            // Once C++ is officially supported, we can switch this to context.HandlerHelper, removing AzureIoTHubConnectedServiceHandlerHelper
            var handlerHelper = GetConnectedServiceHandlerHelper(context);

            bool bUseTPM = (bool)context.ServiceInstance.Metadata["TPM"];

            if (bUseTPM)
            {
                handlerHelper.TokenReplacementValues.Add("TPMSlot", "0");
            }
            else
            {
                IAzureIoTHub iotHubAccount = context.ServiceInstance.Metadata["IoTHubAccount"] as IAzureIoTHub;
                var          primaryKeys   = await iotHubAccount.GetPrimaryKeysAsync(ct);

                var ioTHubUri = context.ServiceInstance.Metadata["iotHubUri"] as string;

                handlerHelper.TokenReplacementValues.Add("iotHubUri", ioTHubUri);

                var device = GetSelectedDevice(context, ioTHubUri, primaryKeys.IoTHubOwner);
                if (device == null)
                {
                    throw new OperationCanceledException();
                }
                else
                {
                    handlerHelper.TokenReplacementValues.Add("deviceId", device.Id);
                    handlerHelper.TokenReplacementValues.Add("deviceKey", device.Key);
                    handlerHelper.TokenReplacementValues.Add("iotHubOwnerPrimaryKey", primaryKeys.IoTHubOwner);
                    handlerHelper.TokenReplacementValues.Add("servicePrimaryKey", primaryKeys.Service);
                }
            }

            HandlerManifest configuration = this.BuildHandlerManifest(bUseTPM);

            await this.AddSdkReferenceAsync(context, configuration, ct);

            foreach (var fileToAdd in configuration.Files)
            {
                var    file       = this.CopyResourceToTemporaryPath(fileToAdd.Path, handlerHelper);
                string targetPath = Path.GetFileName(fileToAdd.Path); // Use the same name
                string addedFile  = await handlerHelper.AddFileAsync(file, targetPath);
            }

            AddServiceInstanceResult result = this.CreateAddServiceInstanceResult(context);

            await context.Logger.WriteMessageAsync(LoggerMessageCategory.Information, "New service instance {0} created", context.ServiceInstance.Name);

            return(result);
        }