public async Task <JArray> GetSyncTriggersPayload() { var hostOptions = _applicationHostOptions.CurrentValue.ToHostOptions(); var functionsMetadata = WebFunctionsManager.GetFunctionsMetadata(hostOptions, _workerConfigs, _logger, includeProxies: true); // Add trigger information used by the ScaleController JObject result = new JObject(); var triggers = await GetFunctionTriggers(functionsMetadata, hostOptions); return(new JArray(triggers)); }
public async Task <JToken> GetSyncTriggersPayload() { var hostOptions = _applicationHostOptions.CurrentValue.ToHostOptions(); var functionsMetadata = WebFunctionsManager.GetFunctionsMetadata(hostOptions, _workerConfigs, _logger); // trigger information used by the ScaleController var triggers = await GetFunctionTriggers(functionsMetadata, hostOptions); var triggersArray = new JArray(triggers); if (!ArmCacheEnabled) { // extended format is disabled - just return triggers return(triggersArray); } // Add triggers to the payload JObject result = new JObject(); result.Add("triggers", triggersArray); // Add functions details to the payload JObject functions = new JObject(); string routePrefix = await WebFunctionsManager.GetRoutePrefix(hostOptions.RootScriptPath); var functionDetails = await WebFunctionsManager.GetFunctionMetadataResponse(functionsMetadata, hostOptions, _hostNameProvider); result.Add("functions", new JArray(functionDetails.Select(p => JObject.FromObject(p)))); // Add functions secrets to the payload // Only secret types we own/control can we cache directly // Encryption is handled by Antares before storage var secretsStorageType = _environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsSecretStorageType); if (string.IsNullOrEmpty(secretsStorageType) || string.Compare(secretsStorageType, "files", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(secretsStorageType, "blob", StringComparison.OrdinalIgnoreCase) == 0) { JObject secrets = new JObject(); result.Add("secrets", secrets); // add host secrets var hostSecretsInfo = await _secretManagerProvider.Current.GetHostSecretsAsync(); var hostSecrets = new JObject(); hostSecrets.Add("master", hostSecretsInfo.MasterKey); hostSecrets.Add("function", JObject.FromObject(hostSecretsInfo.FunctionKeys)); hostSecrets.Add("system", JObject.FromObject(hostSecretsInfo.SystemKeys)); secrets.Add("host", hostSecrets); // add function secrets var functionSecrets = new JArray(); var httpFunctions = functionsMetadata.Where(p => !p.IsProxy && p.InputBindings.Any(q => q.IsTrigger && string.Compare(q.Type, "httptrigger", StringComparison.OrdinalIgnoreCase) == 0)).Select(p => p.Name); foreach (var functionName in httpFunctions) { var currSecrets = await _secretManagerProvider.Current.GetFunctionSecretsAsync(functionName); var currElement = new JObject() { { "name", functionName }, { "secrets", JObject.FromObject(currSecrets) } }; functionSecrets.Add(currElement); } secrets.Add("function", functionSecrets); } else { // TODO: handle other external key storage types // like KeyVault when the feature comes online } return(result); }