using System.Collections.Generic; using System.IO; using System.IO.Enumeration; using ln.json; using ln.logging; namespace ln.build.secrets { public class SecretStorage { public string FileName { get; } Dictionary secrets = new Dictionary(); public SecretStorage(string filename) { FileName = filename; LoadSecrets(); } void LoadSecrets() { lock (this) { Logging.Log(LogLevel.INFO, "loading secrets from {0}", FileName); if (File.Exists(FileName)) { JSONObject secretsObject = JSONParser.ParseFile(FileName) as JSONObject; foreach (string key in secretsObject.Keys) { //Logging.Log(LogLevel.INFO, "loading secret {0}", key); secrets.Add(key, secretsObject[key].ToNative().ToString()); } } } } public string GetSecret(string key) { //Logging.Log(LogLevel.INFO, "trying to fetch secret for: [{0}]", key); TryGetSecret(key, out string secret); return secret; } public bool TryGetSecret(string key, out string secret){ //Logging.Log(LogLevel.INFO, "trying to fetch secret for: [{0}]", key); bool success = secrets.TryGetValue(key, out secret); //Logging.Log(LogLevel.INFO, "{1} to fetch secret for: [{0}]", key, success ? "succeded" : "failed"); return success; } } }