2026-02-25 08:05:44 -05:00
|
|
|
namespace OTSSignsOrchestrator.Core.Services;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Abstraction for storing and retrieving secrets via Bitwarden Secrets Manager.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public interface IBitwardenSecretService
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns true if Bitwarden is configured (access token + org ID are set).
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task<bool> IsConfiguredAsync();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates a new secret in the configured Bitwarden project.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>The ID of the created secret.</returns>
|
|
|
|
|
Task<string> CreateSecretAsync(string key, string value, string note = "");
|
|
|
|
|
|
2026-02-25 17:39:17 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Creates a new secret in the instance Bitwarden project (falls back to default project if not configured).
|
|
|
|
|
/// Use this for instance-level secrets such as DB passwords and Newt credentials.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>The ID of the created secret.</returns>
|
|
|
|
|
Task<string> CreateInstanceSecretAsync(string key, string value, string note = "");
|
|
|
|
|
|
2026-02-25 08:05:44 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Retrieves a secret by its Bitwarden ID.
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task<BitwardenSecret> GetSecretAsync(string secretId);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Updates the value of an existing secret in place.
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task UpdateSecretAsync(string secretId, string key, string value, string note = "");
|
|
|
|
|
|
2026-02-25 17:39:17 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Updates the value of an existing instance-level secret in place (uses instance project if configured).
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task UpdateInstanceSecretAsync(string secretId, string key, string value, string note = "");
|
|
|
|
|
|
2026-02-25 08:05:44 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Lists all secrets in the configured project.
|
|
|
|
|
/// </summary>
|
|
|
|
|
Task<List<BitwardenSecretSummary>> ListSecretsAsync();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class BitwardenSecret
|
|
|
|
|
{
|
|
|
|
|
public string Id { get; set; } = string.Empty;
|
|
|
|
|
public string Key { get; set; } = string.Empty;
|
|
|
|
|
public string Value { get; set; } = string.Empty;
|
|
|
|
|
public string Note { get; set; } = string.Empty;
|
|
|
|
|
public DateTime CreationDate { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class BitwardenSecretSummary
|
|
|
|
|
{
|
|
|
|
|
public string Id { get; set; } = string.Empty;
|
|
|
|
|
public string Key { get; set; } = string.Empty;
|
|
|
|
|
public DateTime CreationDate { get; set; }
|
|
|
|
|
}
|