ln.build/ln.build/secrets/SecretStorage.cs

51 lines
1.6 KiB
C#

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<string,string> secrets = new Dictionary<string, string>();
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;
}
}
}