in src/WebJobs.Script.WebHost/Controllers/KeysController.cs [180:222]
private async Task<IActionResult> AddOrUpdateSecretAsync(string keyName, string value, string keyScope, ScriptSecretsType secretsType)
{
if (secretsType == ScriptSecretsType.Function && keyScope != null && !IsFunction(keyScope))
{
return NotFound();
}
KeyOperationResult operationResult;
if (secretsType == ScriptSecretsType.Host && string.Equals(keyName, ScriptConstants.MasterKeyName, StringComparison.OrdinalIgnoreCase))
{
operationResult = await _secretManagerProvider.Current.SetMasterKeyAsync(value);
}
else
{
operationResult = await _secretManagerProvider.Current.AddOrUpdateFunctionSecretAsync(keyName, value, keyScope, secretsType);
}
_logger.LogDebug(string.Format(Resources.TraceKeysApiSecretChange, keyName, keyScope ?? "host", operationResult.Result));
switch (operationResult.Result)
{
case OperationResult.Created:
{
var keyResponse = ApiModelUtility.CreateApiModel(new { name = keyName, value = operationResult.Secret }, Request);
await _functionsSyncManager.TrySyncTriggersAsync();
return Created(ApiModelUtility.GetBaseUri(Request), keyResponse);
}
case OperationResult.Updated:
{
var keyResponse = ApiModelUtility.CreateApiModel(new { name = keyName, value = operationResult.Secret }, Request);
await _functionsSyncManager.TrySyncTriggersAsync();
return Ok(keyResponse);
}
case OperationResult.NotFound:
return NotFound();
case OperationResult.Conflict:
return StatusCode(StatusCodes.Status409Conflict);
case OperationResult.BadRequest:
return StatusCode(StatusCodes.Status400BadRequest);
default:
return StatusCode(StatusCodes.Status500InternalServerError);
}
}