public SecretManager(string secretsPath, IKeyValueConverterFactory keyValueConverterFactory, bool createHostSecretsIfMissing = false)
        {
            _secretsPath              = secretsPath;
            _hostSecretsPath          = Path.Combine(_secretsPath, ScriptConstants.HostMetadataFileName);
            _keyValueConverterFactory = keyValueConverterFactory;

            Directory.CreateDirectory(_secretsPath);

            _fileWatcher = new FileSystemWatcher(_secretsPath, "*.json")
            {
                IncludeSubdirectories = true,
                EnableRaisingEvents   = true
            };

            _fileWatcher.Changed += OnChanged;
            _fileWatcher.Created += OnChanged;
            _fileWatcher.Deleted += OnChanged;
            _fileWatcher.Renamed += OnChanged;

            if (createHostSecretsIfMissing)
            {
                // The SecretManager implementation of GetHostSecrets will
                // create a host secret if one is not present.
                GetHostSecrets();
            }
        }
예제 #2
0
        public override ScriptSecrets Refresh(IKeyValueConverterFactory factory)
        {
            var secrets = new HostSecrets
            {
                MasterKey = factory.WriteKey(MasterKey),
                FunctionKeys = FunctionKeys.Select(k => factory.WriteKey(k)).ToList()
            };

            return secrets;
        }
예제 #3
0
        public override ScriptSecrets Refresh(IKeyValueConverterFactory factory)
        {
            var secrets = new HostSecrets
            {
                MasterKey    = factory.WriteKey(MasterKey),
                FunctionKeys = FunctionKeys.Select(k => factory.WriteKey(k)).ToList()
            };

            return(secrets);
        }
예제 #4
0
        public SecretManager(ISecretsRepository repository, IKeyValueConverterFactory keyValueConverterFactory, ILogger logger, bool createHostSecretsIfMissing = false)
        {
            _repository = repository;
            _keyValueConverterFactory   = keyValueConverterFactory;
            _repository.SecretsChanged += OnSecretsChanged;
            _logger = logger;

            if (createHostSecretsIfMissing)
            {
                // The SecretManager implementation of GetHostSecrets will
                // create a host secret if one is not present.
                GetHostSecretsAsync().GetAwaiter().GetResult();
            }
        }
예제 #5
0
        public SecretManager(ISecretsRepository repository, IKeyValueConverterFactory keyValueConverterFactory, ILogger logger, IMetricsLogger metricsLogger, HostNameProvider hostNameProvider, StartupContextProvider startupContextProvider)
        {
            _repository = repository ?? throw new ArgumentNullException(nameof(repository));
            _keyValueConverterFactory = keyValueConverterFactory ?? throw new ArgumentNullException(nameof(keyValueConverterFactory));
            _logger                 = logger ?? throw new ArgumentNullException(nameof(logger));
            _metricsLogger          = metricsLogger ?? throw new ArgumentNullException(nameof(metricsLogger));
            _hostNameProvider       = hostNameProvider ?? throw new ArgumentNullException(nameof(hostNameProvider));
            _startupContextProvider = startupContextProvider ?? throw new ArgumentNullException(nameof(startupContextProvider));

            _repositoryClassName        = _repository.GetType().Name.ToLower();
            _repository.SecretsChanged += OnSecretsChanged;

            InitializeCache();
        }
        public SecretManager(ISecretsRepository repository, IKeyValueConverterFactory keyValueConverterFactory, TraceWriter traceWriter, ILoggerFactory loggerFactory, bool createHostSecretsIfMissing = false)
        {
            _repository = repository;
            _keyValueConverterFactory = keyValueConverterFactory;
            _traceWriter = traceWriter;
            _repository.SecretsChanged += OnSecretsChanged;
            _logger = loggerFactory?.CreateLogger(ScriptConstants.LogCategoryHostGeneral);

            if (createHostSecretsIfMissing)
            {
                // The SecretManager implementation of GetHostSecrets will
                // create a host secret if one is not present.
                GetHostSecretsAsync().GetAwaiter().GetResult();
            }
        }
예제 #7
0
        public SecretManager(ISecretsRepository repository, IKeyValueConverterFactory keyValueConverterFactory, ILogger logger, IMetricsLogger metricsLogger, bool createHostSecretsIfMissing = false)
        {
            _repository = repository;
            _keyValueConverterFactory   = keyValueConverterFactory;
            _repository.SecretsChanged += OnSecretsChanged;
            _logger              = logger;
            _metricsLogger       = metricsLogger ?? throw new ArgumentNullException(nameof(metricsLogger));
            _repositoryClassName = _repository.GetType().Name.ToLower();

            if (createHostSecretsIfMissing)
            {
                // The SecretManager implementation of GetHostSecrets will
                // create a host secret if one is not present.
                GetHostSecretsAsync().GetAwaiter().GetResult();
            }
        }
예제 #8
0
        public SecretManager(string secretsPath, IKeyValueConverterFactory keyValueConverterFactory, TraceWriter traceWriter, bool createHostSecretsIfMissing = false)
        {
            _traceWriter              = traceWriter.WithSource(ScriptConstants.TraceSourceSecretManagement);
            _secretsPath              = secretsPath;
            _hostSecretsPath          = Path.Combine(_secretsPath, ScriptConstants.HostMetadataFileName);
            _keyValueConverterFactory = keyValueConverterFactory;

            Directory.CreateDirectory(_secretsPath);

            _fileWatcher = new AutoRecoveringFileSystemWatcher(_secretsPath, "*.json");

            _fileWatcher.Changed += OnChanged;

            if (createHostSecretsIfMissing)
            {
                // The SecretManager implementation of GetHostSecrets will
                // create a host secret if one is not present.
                GetHostSecrets();
            }
        }
 public abstract ScriptSecrets Refresh(IKeyValueConverterFactory factory);
예제 #10
0
        public override ScriptSecrets Refresh(IKeyValueConverterFactory factory)
        {
            var keys = Keys.Select(k => factory.GetValueWriter(k).WriteValue(k)).ToList();

            return(new FunctionSecrets(keys));
        }
        public override ScriptSecrets Refresh(IKeyValueConverterFactory factory)
        {
            var keys = Keys.Select(k => factory.GetValueWriter(k).WriteValue(k)).ToList();

            return new FunctionSecrets(keys);
        }
        public static Key WriteKey(this IKeyValueConverterFactory factory, Key key)
        {
            IKeyValueWriter writer = factory.GetValueWriter(key);

            return(writer.WriteValue(key));
        }
        public static Key ReadKey(this IKeyValueConverterFactory factory, Key key)
        {
            IKeyValueReader reader = factory.GetValueReader(key);

            return(reader.ReadValue(key));
        }
        private SecretManager CreateSecretManager(string secretsPath, ILogger logger = null, IMetricsLogger metricsLogger = null, IKeyValueConverterFactory keyConverterFactory = null, bool createHostSecretsIfMissing = false, bool simulateWriteConversion = true, bool setStaleValue = true)
        {
            logger        = logger ?? _logger;
            metricsLogger = metricsLogger ?? new TestMetricsLogger();

            if (keyConverterFactory == null)
            {
                Mock <IKeyValueConverterFactory> mockValueConverterFactory = GetConverterFactoryMock(simulateWriteConversion, setStaleValue);
                keyConverterFactory = mockValueConverterFactory.Object;
            }

            ISecretsRepository repository = new FileSystemSecretsRepository(secretsPath);
            var secretManager             = new SecretManager(repository, keyConverterFactory, logger, metricsLogger, _hostNameProvider, _startupContextProvider);

            if (createHostSecretsIfMissing)
            {
                secretManager.GetHostSecretsAsync().GetAwaiter().GetResult();
            }

            return(secretManager);
        }
 public abstract ScriptSecrets Refresh(IKeyValueConverterFactory factory);