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