// ----------------------------------------------------------------------------- // SecretSignalContextExtensions.cs // Sprint: SPRINT_20260104_004_POLICY (Secret DSL Integration) // Task: PSD-008 - Register predicates in PolicyDslRegistry (via signal context) // ----------------------------------------------------------------------------- using StellaOps.Policy.Secrets; namespace StellaOps.PolicyDsl; /// /// Extension methods for integrating secret evidence with PolicyDsl SignalContext. /// public static class SecretSignalContextExtensions { /// /// Adds secret evidence signals to the signal context. /// /// The signal context. /// The secret evidence context. /// The signal context for chaining. public static SignalContext WithSecretEvidence( this SignalContext context, SecretEvidenceContext evidenceContext) { ArgumentNullException.ThrowIfNull(context); ArgumentNullException.ThrowIfNull(evidenceContext); // Add flat signals var signals = SecretSignalBinder.BindToSignals(evidenceContext); foreach (var (name, value) in signals) { context.SetSignal(name, value); } // Add nested object for member access (secret.severity.high, etc.) var nested = SecretSignalBinder.BindToNestedObject(evidenceContext); context.SetSignal("secret", nested); return context; } /// /// Adds secret evidence signals to the signal context builder. /// /// The signal context builder. /// The secret evidence context. /// The builder for chaining. public static SignalContextBuilder WithSecretEvidence( this SignalContextBuilder builder, SecretEvidenceContext evidenceContext) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(evidenceContext); // Add flat signals var signals = SecretSignalBinder.BindToSignals(evidenceContext); foreach (var (name, value) in signals) { builder.WithSignal(name, value); } // Add nested object for member access var nested = SecretSignalBinder.BindToNestedObject(evidenceContext); builder.WithSignal("secret", nested); return builder; } /// /// Adds secret evidence signals from a provider. /// /// The signal context builder. /// The secret evidence provider. /// The builder for chaining. public static SignalContextBuilder WithSecretEvidence( this SignalContextBuilder builder, ISecretEvidenceProvider provider) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(provider); var context = new SecretEvidenceContext(provider); return builder.WithSecretEvidence(context); } /// /// Creates a signal context builder with secret evidence. /// /// The secret evidence context. /// A new builder with secret signals. public static SignalContextBuilder CreateBuilderWithSecrets(SecretEvidenceContext evidenceContext) { return SignalContext.Builder().WithSecretEvidence(evidenceContext); } /// /// Creates a signal context with secret evidence. /// /// The secret evidence context. /// A new signal context with secret signals. public static SignalContext CreateContextWithSecrets(SecretEvidenceContext evidenceContext) { return CreateBuilderWithSecrets(evidenceContext).Build(); } }