private AzureResourceId apiIdTemplate(string apiId, string connectionNameParameter) { var rid = new AzureResourceId(apiId); rid.SubscriptionId = "',subscription().subscriptionId,'"; if (apiId.Contains("/managedApis/")) { rid.ReplaceValueAfter("locations", "',parameters('logicAppLocation'),'"); } else { if (apiId.Contains("customApis")) { rid.ReplaceValueAfter("customApis", "',parameters('" + connectionNameParameter + "'),'"); } string resourcegroupValue = LogicAppResourceGroup == rid.ResourceGroupName ? "[resourceGroup().name]" : rid.ResourceGroupName; string resourcegroupParameterName = AddTemplateParameter(apiId.Split('/').Last() + "-ResourceGroup", "string", resourcegroupValue); rid.ResourceGroupName = $"',parameters('{resourcegroupParameterName}'),'"; } return(rid); }
private JToken handleActions(JObject definition, JObject parameters) { foreach (JProperty action in definition["actions"]) { var type = action.Value.SelectToken("type").Value <string>().ToLower(); //if workflow fix so links are dynamic. if (type == "workflow") { var curr = ((JObject)definition["actions"][action.Name]["inputs"]["host"]["workflow"]).Value <string>("id"); ///subscriptions/fakeecb73-15f5-4c85-bb3e-fakeecb73/resourceGroups/myresourcegrp/providers/Microsoft.Logic/workflows/INT0020-All-Users-Batch2 var wid = new AzureResourceId(curr); string resourcegroupValue = LogicAppResourceGroup == wid.ResourceGroupName ? "[resourceGroup().name]" : wid.ResourceGroupName; string resourcegroupParameterName = AddTemplateParameter(action.Name + "-ResourceGroup", "string", resourcegroupValue); string wokflowParameterName = AddTemplateParameter(action.Name + "-LogicAppName", "string", wid.ResourceName); string workflowid = $"[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',parameters('{resourcegroupParameterName}'),'/providers/Microsoft.Logic/workflows/',parameters('{wokflowParameterName}'))]"; definition["actions"][action.Name]["inputs"]["host"]["workflow"]["id"] = workflowid; //string result = "[concat('" + rgx.Replace(matches.Groups[1].Value, "',subscription().subscriptionId,'") + + "']"; } else if (type == "apimanagement") { var apiId = ((JObject)definition["actions"][action.Name]["inputs"]["api"]).Value <string>("id"); var aaid = new AzureResourceId(apiId); aaid.SubscriptionId = "',subscription().subscriptionId,'"; aaid.ResourceGroupName = "', parameters('" + AddTemplateParameter("apimResourceGroup", "string", aaid.ResourceGroupName) + "'),'"; aaid.ReplaceValueAfter("service", "', parameters('" + AddTemplateParameter("apimInstanceName", "string", aaid.ValueAfter("service")) + "'),'"); aaid.ReplaceValueAfter("apis", "', parameters('" + AddTemplateParameter("apimApiId", "string", aaid.ValueAfter("apis")) + "'),'"); apiId = "[concat('" + aaid.ToString() + "')]"; definition["actions"][action.Name]["inputs"]["api"]["id"] = apiId; //handle subscriptionkey var subkey = ((JObject)definition["actions"][action.Name]["inputs"]).Value <string>("subscriptionKey"); definition["actions"][action.Name]["inputs"]["subscriptionKey"] = "[parameters('" + AddTemplateParameter("apimSubscriptionKey", "string", subkey) + "')]"; } else if (type == "if") { definition["actions"][action.Name] = handleActions(definition["actions"][action.Name].ToObject <JObject>(), parameters); //else if (definition["actions"][action.Name]["else"] != null && definition["actions"][action.Name]["else"]["actions"] != null) { definition["actions"][action.Name]["else"] = handleActions(definition["actions"][action.Name]["else"].ToObject <JObject>(), parameters); } } else if (type == "scope" || type == "foreach" || type == "until") { definition["actions"][action.Name] = handleActions(definition["actions"][action.Name].ToObject <JObject>(), parameters); } else if (type == "switch") { //handle default if exists if (definition["actions"][action.Name]["default"] != null && definition["actions"][action.Name]["default"]["actions"] != null) { definition["actions"][action.Name]["default"] = handleActions(definition["actions"][action.Name]["default"].ToObject <JObject>(), parameters); } foreach (var switchcase in definition["actions"][action.Name]["cases"].Children <JProperty>()) { definition["actions"][action.Name]["cases"][switchcase.Name] = handleActions(definition["actions"][action.Name]["cases"][switchcase.Name].ToObject <JObject>(), parameters); } } else if (type == "flatfiledecoding" || type == "flatfileencoding") { definition["actions"][action.Name]["inputs"]["integrationAccount"]["schema"]["name"] = "[parameters('" + AddTemplateParameter(action.Name + "-SchemaName", "string", ((JObject)definition["actions"][action.Name]["inputs"]["integrationAccount"]["schema"]).Value <string>("name")) + "')]"; } else if (type == "xslt") { definition["actions"][action.Name]["inputs"]["integrationAccount"]["map"]["name"] = "[parameters('" + AddTemplateParameter(action.Name + "-MapName", "string", ((JObject)definition["actions"][action.Name]["inputs"]["integrationAccount"]["map"]).Value <string>("name")) + "')]"; } else if (type == "http") { definition["actions"][action.Name]["inputs"]["uri"] = "[parameters('" + AddTemplateParameter(action.Name + "-URI", "string", ((JObject)definition["actions"][action.Name]["inputs"]).Value <string>("uri")) + "')]"; var authenticationObj = (JObject)definition["actions"][action.Name]["inputs"]["authentication"]; if (authenticationObj != null) { var authType = authenticationObj.Value <string>("type"); if ("Basic".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["password"] = "******" + AddTemplateParameter(action.Name + "-Password", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("password")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["username"] = "******" + AddTemplateParameter(action.Name + "-Username", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("username")) + "')]"; } else if ("ClientCertificate".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["password"] = "******" + AddTemplateParameter(action.Name + "-Password", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("password")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["pfx"] = "[parameters('" + AddTemplateParameter(action.Name + "-Pfx", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("pfx")) + "')]"; } else if ("ActiveDirectoryOAuth".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["audience"] = "[parameters('" + AddTemplateParameter(action.Name + "-Audience", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("audience")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["authority"] = "[parameters('" + AddTemplateParameter(action.Name + "-Authority", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("authority")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["clientId"] = "[parameters('" + AddTemplateParameter(action.Name + "-ClientId", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("clientId")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["secret"] = "[parameters('" + AddTemplateParameter(action.Name + "-Secret", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("secret")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["tenant"] = "[parameters('" + AddTemplateParameter(action.Name + "-Tenant", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("tenant")) + "')]"; } else if ("Raw".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["value"] = "[parameters('" + AddTemplateParameter(action.Name + "-Raw", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("value")) + "')]"; } } } else if (type == "function") { var curr = ((JObject)definition["actions"][action.Name]["inputs"]["function"]).Value <string>("id"); var faid = new AzureResourceId(curr); faid.SubscriptionId = "',subscription().subscriptionId,'"; faid.ResourceGroupName = "',parameters('" + AddTemplateParameter(action.Name + "-ResourceGroup", "string", faid.ResourceGroupName) + "'),'"; faid.ReplaceValueAfter("sites", "',parameters('" + AddTemplateParameter(action.Name + "-FunctionApp", "string", faid.ValueAfter("sites")) + "'),'"); faid.ReplaceValueAfter("functions", "',parameters('" + AddTemplateParameter(action.Name + "-FunctionName", "string", faid.ValueAfter("functions")) + "')"); definition["actions"][action.Name]["inputs"]["function"]["id"] = "[concat('" + faid.ToString() + ")]"; } else { var api = action.Value.SelectToken("inputs.host.api"); if (api != null) { ((JObject)definition["actions"][action.Name]["inputs"]["host"]).Remove("api"); } //get the type: //handle connection var connection = action.Value.SelectToken("inputs.host.connection"); if (connection != null) { var getConnectionNameType = this.GetConnectionTypeName(connection, parameters); switch (getConnectionNameType) { case "filesystem": { //var metadata = action.Value.SelectToken("metadata"); var meta = ((JObject)definition["actions"][action.Name]["metadata"]); if (meta != null) { var base64string = ((JProperty)meta.First).Name; var param = AddParameterForMetadataBase64(meta, action.Name + "-folderPath"); meta.Parent.Parent["inputs"]["path"] = "[concat('" + action.Value.SelectToken("inputs.path").ToString().Replace($"'{base64string}'", "',base64(parameters('" + param + "')),'") + "')]"; } break; } case "azureblob": { var meta = ((JObject)definition["actions"][action.Name]["metadata"]); if (meta != null) { var base64string = ((JProperty)meta.First).Name; var param = AddParameterForMetadataBase64(meta, action.Name + "-path"); var token = action.Value.SelectToken("inputs.path"); var replaced = token.Value <string>().Replace($"'{base64string}'", $"', parameters('__apostrophe'), base64(parameters('{param}')), parameters('__apostrophe'), '"); var newValue = $"[concat('{replaced}')]"; meta.Parent.Parent["inputs"]["path"] = newValue; AddTemplateParameter("__apostrophe", "string", "'"); } break; } } } } } //when in if statements triggers is not there if (definition["triggers"] != null) { foreach (JProperty trigger in definition["triggers"]) { //handle api var api = trigger.Value.SelectToken("inputs.host.api"); if (api != null) { ((JObject)definition["triggers"][trigger.Name]["inputs"]["host"]).Remove("api"); } //handle connection var connection = trigger.Value.SelectToken("inputs.host.connection"); if (connection != null) { var getConnectionNameType = this.GetConnectionTypeName(connection, parameters); switch (getConnectionNameType) { case "filesystem": { var meta = ((JObject)trigger.Value["metadata"]); if (meta != null) { try { var base64string = ((JProperty)meta.First).Name; var param = AddParameterForMetadataBase64(meta, trigger.Name + "-folderPath"); meta.Parent.Parent["inputs"]["queries"]["folderId"] = "[base64(parameters('" + param + "'))]"; } catch (FormatException ex) { //folderid is not a valid base64 so we are skipping it for now /*var path = ((JProperty)meta.First).Value.ToString(); * var param = AddTemplateParameter(trigger.Name + "-folderPath","string",path); * meta[((JProperty)meta.First).Name] = $"[parameters('{param}')]";*/ } } break; } } } //promote parameters for reccurence settings var recurrence = trigger.Value.SelectToken("recurrence"); if (recurrence != null) { definition["triggers"][trigger.Name]["recurrence"]["frequency"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Frequency", "string", recurrence.Value <string>("frequency")) + "')]"; definition["triggers"][trigger.Name]["recurrence"]["interval"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Interval", "int", new JProperty("defaultValue", recurrence.Value <int>("interval"))) + "')]"; if (recurrence["startTime"] != null) { string value = recurrence.Value <string>("startTime"); DateTime date; if (DateTime.TryParse(value, out date)) { value = date.ToString("O"); } definition["triggers"][trigger.Name]["recurrence"]["startTime"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "StartTime", "string", value) + "')]"; } if (recurrence["timeZone"] != null) { definition["triggers"][trigger.Name]["recurrence"]["timeZone"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "TimeZone", "string", recurrence.Value <string>("timeZone")) + "')]"; } if (recurrence["schedule"] != null) { definition["triggers"][trigger.Name]["recurrence"]["schedule"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Schedule", "Object", new JProperty("defaultValue", recurrence["schedule"])) + "')]"; } } } } return(definition); }
private JToken handleActions(JObject definition, JObject parameters) { foreach (JProperty action in definition["actions"]) { var type = action.Value.SelectToken("type").Value <string>().ToLower(); //if workflow fix so links are dynamic. if (type == "workflow") { var curr = ((JObject)definition["actions"][action.Name]["inputs"]["host"]["workflow"]).Value <string>("id"); var wid = new AzureResourceId(curr); string resourcegroupValue = LogicAppResourceGroup == wid.ResourceGroupName ? "[resourceGroup().name]" : wid.ResourceGroupName; string resourcegroupParameterName = AddTemplateParameter(action.Name + "-ResourceGroup", "string", resourcegroupValue); string wokflowParameterName = AddTemplateParameter(action.Name + "-LogicAppName", "string", wid.ResourceName); string workflowid = $"[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',parameters('{resourcegroupParameterName}'),'/providers/Microsoft.Logic/workflows/',parameters('{wokflowParameterName}'))]"; definition["actions"][action.Name]["inputs"]["host"]["workflow"]["id"] = workflowid; } else if (type == "initializevariable" && IncludeInitializeVariable && definition["actions"][action.Name]["inputs"]["variables"][0]["value"] != null) { var variableType = definition["actions"][action.Name]["inputs"]["variables"][0]["type"]; string paramType = string.Empty; //missing securestring & secureObject switch (variableType.Value <string>()) { case "Array": case "Object": case "String": paramType = variableType.Value <string>().ToLower(); break; case "Boolean": paramType = "bool"; break; case "Float": paramType = "string"; break; case "Integer": paramType = "int"; break; default: paramType = "string"; break; } //Arrays and Objects can't be expressions if (definition["actions"][action.Name]["inputs"]["variables"][0]["value"].Type != JTokenType.Array && definition["actions"][action.Name]["inputs"]["variables"][0]["value"].Type != JTokenType.Object) { //If variable is an expression OR float, we need to change the type of the parameter to string if (definition["actions"][action.Name]["inputs"]["variables"][0].Value <string>("value").StartsWith("@") || variableType.Value <string>() == "Float") { definition["actions"][action.Name]["inputs"]["variables"][0]["value"] = "[parameters('" + AddTemplateParameter(action.Name + "-Value", "string", ((JObject)definition["actions"][action.Name]["inputs"]["variables"][0]).Value <string>("value")) + "')]"; } else { //Same as the one from in the outer if sentence definition["actions"][action.Name]["inputs"]["variables"][0]["value"] = "[parameters('" + AddTemplateParameter(action.Name + "-Value", paramType, definition["actions"][action.Name]["inputs"]["variables"][0]["value"]) + "')]"; } } else { definition["actions"][action.Name]["inputs"]["variables"][0]["value"] = "[parameters('" + AddTemplateParameter(action.Name + "-Value", paramType, definition["actions"][action.Name]["inputs"]["variables"][0]["value"]) + "')]"; } } else if (type == "apimanagement") { var apiId = ((JObject)definition["actions"][action.Name]["inputs"]["api"]).Value <string>("id"); var aaid = new AzureResourceId(apiId); aaid.SubscriptionId = "',subscription().subscriptionId,'"; aaid.ResourceGroupName = "', parameters('" + AddTemplateParameter("apimResourceGroup", "string", aaid.ResourceGroupName) + "'),'"; aaid.ReplaceValueAfter("service", "', parameters('" + AddTemplateParameter("apimInstanceName", "string", aaid.ValueAfter("service")) + "'),'"); aaid.ReplaceValueAfter("apis", "', parameters('" + AddTemplateParameter("apimApiId", "string", aaid.ValueAfter("apis")) + "'),'"); apiId = "[concat('" + aaid.ToString() + "')]"; definition["actions"][action.Name]["inputs"]["api"]["id"] = apiId; //handle subscriptionkey if not parematrized var subkey = ((JObject)definition["actions"][action.Name]["inputs"]).Value <string>("subscriptionKey"); if (!Regex.Match(subkey, @"parameters\('(.*)'\)").Success) { definition["actions"][action.Name]["inputs"]["subscriptionKey"] = "[parameters('" + AddTemplateParameter("apimSubscriptionKey", "string", subkey) + "')]"; } } else if (type == "if") { definition["actions"][action.Name] = handleActions(definition["actions"][action.Name].ToObject <JObject>(), parameters); //else if (definition["actions"][action.Name]["else"] != null && definition["actions"][action.Name]["else"]["actions"] != null) { definition["actions"][action.Name]["else"] = handleActions(definition["actions"][action.Name]["else"].ToObject <JObject>(), parameters); } } else if (type == "scope" || type == "foreach" || type == "until") { definition["actions"][action.Name] = handleActions(definition["actions"][action.Name].ToObject <JObject>(), parameters); } else if (type == "switch") { //handle default if exists if (definition["actions"][action.Name]["default"] != null && definition["actions"][action.Name]["default"]["actions"] != null) { definition["actions"][action.Name]["default"] = handleActions(definition["actions"][action.Name]["default"].ToObject <JObject>(), parameters); } foreach (var switchcase in definition["actions"][action.Name]["cases"].Children <JProperty>()) { definition["actions"][action.Name]["cases"][switchcase.Name] = handleActions(definition["actions"][action.Name]["cases"][switchcase.Name].ToObject <JObject>(), parameters); } } else if (type == "flatfiledecoding" || type == "flatfileencoding") { definition["actions"][action.Name]["inputs"]["integrationAccount"]["schema"]["name"] = "[parameters('" + AddTemplateParameter(action.Name + "-SchemaName", "string", ((JObject)definition["actions"][action.Name]["inputs"]["integrationAccount"]["schema"]).Value <string>("name")) + "')]"; } else if (type == "xslt" || type == "liquid") { var mapname = ((JObject)definition["actions"][action.Name]["inputs"]["integrationAccount"]["map"]).Value <string>("name"); var mapParameterName = AddTemplateParameter(action.Name + "-MapName", "string", mapname); definition["actions"][action.Name]["inputs"]["integrationAccount"]["map"]["name"] = "[parameters('" + mapParameterName + "')]"; } else if (type == "http") { definition["actions"][action.Name]["inputs"]["uri"] = "[parameters('" + AddTemplateParameter(action.Name + "-URI", "string", ((JObject)definition["actions"][action.Name]["inputs"]).Value <string>("uri")) + "')]"; var authenticationObj = (JObject)definition["actions"][action.Name]["inputs"]["authentication"]; if (authenticationObj != null) { var authType = authenticationObj.Value <string>("type"); if ("Basic".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["password"] = "******" + AddTemplateParameter(action.Name + "-Password", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("password")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["username"] = "******" + AddTemplateParameter(action.Name + "-Username", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("username")) + "')]"; } else if ("ClientCertificate".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["password"] = "******" + AddTemplateParameter(action.Name + "-Password", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("password")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["pfx"] = "[parameters('" + AddTemplateParameter(action.Name + "-Pfx", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("pfx")) + "')]"; } else if ("ActiveDirectoryOAuth".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["audience"] = "[parameters('" + AddTemplateParameter(action.Name + "-Audience", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("audience")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["authority"] = "[parameters('" + AddTemplateParameter(action.Name + "-Authority", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("authority")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["clientId"] = "[parameters('" + AddTemplateParameter(action.Name + "-ClientId", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("clientId")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["secret"] = "[parameters('" + AddTemplateParameter(action.Name + "-Secret", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("secret")) + "')]"; definition["actions"][action.Name]["inputs"]["authentication"]["tenant"] = "[parameters('" + AddTemplateParameter(action.Name + "-Tenant", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("tenant")) + "')]"; } else if ("Raw".Equals(authType, StringComparison.CurrentCultureIgnoreCase)) { definition["actions"][action.Name]["inputs"]["authentication"]["value"] = "[parameters('" + AddTemplateParameter(action.Name + "-Raw", "string", ((JObject)definition["actions"][action.Name]["inputs"]["authentication"]).Value <string>("value")) + "')]"; } } } else if (type == "function") { var curr = ((JObject)definition["actions"][action.Name]["inputs"]["function"]).Value <string>("id"); var faid = new AzureResourceId(curr); var resourcegroupValue = LogicAppResourceGroup == faid.ResourceGroupName ? "[resourceGroup().name]" : faid.ResourceGroupName; faid.SubscriptionId = "',subscription().subscriptionId,'"; faid.ResourceGroupName = "',parameters('" + AddTemplateParameter((FixedFunctionAppName ? "FunctionApp-" : action.Name + "-") + "ResourceGroup", "string", resourcegroupValue) + "'),'"; faid.ReplaceValueAfter("sites", "',parameters('" + AddTemplateParameter((FixedFunctionAppName ? "" : action.Name + "-") + "FunctionApp", "string", faid.ValueAfter("sites")) + "'),'"); faid.ReplaceValueAfter("functions", "',parameters('" + AddTemplateParameter((FixedFunctionAppName ? "" : action.Name + "-") + "FunctionName", "string", faid.ValueAfter("functions")) + "')"); definition["actions"][action.Name]["inputs"]["function"]["id"] = "[concat('" + faid.ToString() + ")]"; } else { var api = action.Value.SelectToken("inputs.host.api"); if (api != null) { ((JObject)definition["actions"][action.Name]["inputs"]["host"]).Remove("api"); } //get the type: //handle connection var connection = action.Value.SelectToken("inputs.host.connection"); if (connection != null) { var connectioname = definition["actions"][action.Name]["inputs"]["host"]["connection"].Value <string>("name"); var getConnectionNameType = this.GetConnectionTypeName(connection, parameters); switch (getConnectionNameType) { case "filesystem": { var newValue = AddParameterForMetadataBase64((JObject)action.Value, action.Name + "-folderPath", action.Value["inputs"].Value <string>("path")); action.Value["inputs"]["path"] = newValue; break; } case "azuretables": { var inputs = action.Value.Value <JObject>("inputs"); var path = inputs.Value <string>("path"); var m = Regex.Match(path, @"/Tables/@{encodeURIComponent\('(.*)'\)"); if (m.Groups.Count > 1) { var tablename = m.Groups[1].Value; var param = AddTemplateParameter(action.Name + "-tablename", "string", tablename); inputs["path"] = "[concat('" + path.Replace($"'{tablename}'", $"', parameters('__apostrophe'), parameters('{param}'), parameters('__apostrophe'), '") + "')]"; AddTemplateParameter("__apostrophe", "string", "'"); } break; } case "azureblob": { var newValue = AddParameterForMetadataBase64((JObject)action.Value, action.Name + "-path", action.Value["inputs"].Value <string>("path")); action.Value["inputs"]["path"] = newValue; break; } case "azurequeues": { var inputs = action.Value.Value <JObject>("inputs"); var path = inputs.Value <string>("path"); var m = Regex.Match(path, @"/@{encodeURIComponent\('(.*)'\)"); if (m.Groups.Count > 1) { var queuename = m.Groups[1].Value; var param = AddTemplateParameter(action.Name + "-queuename", "string", queuename); inputs["path"] = "[concat('" + path.Replace("'", "''").Replace($"'{queuename}'", $"'', parameters('{param}'), ''") + "')]"; } break; } } } } } //when in if statements triggers is not there if (definition["triggers"] != null) { foreach (JProperty trigger in definition["triggers"]) { //handle api var api = trigger.Value.SelectToken("inputs.host.api"); if (api != null) { ((JObject)definition["triggers"][trigger.Name]["inputs"]["host"]).Remove("api"); } //handle connection var connection = trigger.Value.SelectToken("inputs.host.connection"); if (connection != null) { var getConnectionNameType = this.GetConnectionTypeName(connection, parameters); switch (getConnectionNameType) { case "filesystem": { try { var newValue = AddParameterForMetadataBase64((JObject)trigger.Value, trigger.Name + "-folderPath", trigger.Value["inputs"]["queries"].Value <string>("folderId")); trigger.Value["inputs"]["queries"]["folderId"] = newValue; } catch (FormatException ex) { //folderid is not a valid base64 so we are skipping it for now /*var path = ((JProperty)meta.First).Value.ToString(); * var param = AddTemplateParameter(trigger.Name + "-folderPath","string",path); * meta[((JProperty)meta.First).Name] = $"[parameters('{param}')]";*/ } break; } } } //promote parameters for reccurence settings var recurrence = trigger.Value.SelectToken("recurrence"); if (recurrence != null) { definition["triggers"][trigger.Name]["recurrence"]["frequency"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Frequency", "string", recurrence.Value <string>("frequency")) + "')]"; definition["triggers"][trigger.Name]["recurrence"]["interval"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Interval", "int", new JProperty("defaultValue", recurrence.Value <int>("interval"))) + "')]"; if (recurrence["startTime"] != null) { string value = recurrence.Value <string>("startTime"); DateTime date; if (DateTime.TryParse(value, out date)) { value = date.ToString("O"); } definition["triggers"][trigger.Name]["recurrence"]["startTime"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "StartTime", "string", value) + "')]"; } if (recurrence["timeZone"] != null) { definition["triggers"][trigger.Name]["recurrence"]["timeZone"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "TimeZone", "string", recurrence.Value <string>("timeZone")) + "')]"; } if (recurrence["schedule"] != null) { definition["triggers"][trigger.Name]["recurrence"]["schedule"] = "[parameters('" + this.AddTemplateParameter(trigger.Name + "Schedule", "Object", new JProperty("defaultValue", recurrence["schedule"])) + "')]"; } } // http trigger if (trigger.Value.Value <string>("type") == "Request" && trigger.Value.Value <string>("kind") == "Http") { if (this.GenerateHttpTriggerUrlOutput) { JObject outputValue = JObject.FromObject(new { type = "string", value = "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2016-06-01').value]" }); this.template.outputs.Add("httpTriggerUrl", outputValue); } } } } return(definition); }