using System;
using System.Collections.Generic;
namespace StellaOps.Auth.Abstractions;
///
/// Canonical scope names supported by StellaOps services.
///
public static class StellaOpsScopes
{
///
/// Scope required to trigger Concelier jobs.
///
public const string ConcelierJobsTrigger = "concelier.jobs.trigger";
///
/// Scope required to manage Concelier merge operations.
///
public const string ConcelierMerge = "concelier.merge";
///
/// Scope granting administrative access to Authority user management.
///
public const string AuthorityUsersManage = "authority.users.manage";
///
/// Scope granting administrative access to Authority client registrations.
///
public const string AuthorityClientsManage = "authority.clients.manage";
///
/// Scope granting read-only access to Authority audit logs.
///
public const string AuthorityAuditRead = "authority.audit.read";
///
/// Synthetic scope representing trusted network bypass.
///
public const string Bypass = "stellaops.bypass";
///
/// Scope granting read-only access to console UX features.
///
public const string UiRead = "ui.read";
///
/// Scope granting permission to approve exceptions.
///
public const string ExceptionsApprove = "exceptions:approve";
///
/// Scope granting read-only access to raw advisory ingestion data.
///
public const string AdvisoryRead = "advisory:read";
///
/// Scope granting write access for raw advisory ingestion.
///
public const string AdvisoryIngest = "advisory:ingest";
///
/// Scope granting read-only access to raw VEX ingestion data.
///
public const string VexRead = "vex:read";
///
/// Scope granting write access for raw VEX ingestion.
///
public const string VexIngest = "vex:ingest";
///
/// Scope granting permission to execute aggregation-only contract verification.
///
public const string AocVerify = "aoc:verify";
///
/// Scope granting read-only access to reachability signals.
///
public const string SignalsRead = "signals:read";
///
/// Scope granting permission to write reachability signals.
///
public const string SignalsWrite = "signals:write";
///
/// Scope granting administrative access to reachability signal ingestion.
///
public const string SignalsAdmin = "signals:admin";
///
/// Scope granting permission to create or edit policy drafts.
///
public const string PolicyWrite = "policy:write";
///
/// Scope granting permission to author Policy Studio workspaces.
///
public const string PolicyAuthor = "policy:author";
///
/// Scope granting permission to edit policy configurations.
///
public const string PolicyEdit = "policy:edit";
///
/// Scope granting read-only access to policy metadata.
///
public const string PolicyRead = "policy:read";
///
/// Scope granting permission to review Policy Studio drafts.
///
public const string PolicyReview = "policy:review";
///
/// Scope granting permission to submit drafts for review.
///
public const string PolicySubmit = "policy:submit";
///
/// Scope granting permission to approve or reject policies.
///
public const string PolicyApprove = "policy:approve";
///
/// Scope granting permission to operate Policy Studio promotions and runs.
///
public const string PolicyOperate = "policy:operate";
///
/// Scope granting permission to audit Policy Studio activity.
///
public const string PolicyAudit = "policy:audit";
///
/// Scope granting permission to trigger policy runs and activation workflows.
///
public const string PolicyRun = "policy:run";
///
/// Scope granting permission to activate policies.
///
public const string PolicyActivate = "policy:activate";
///
/// Scope granting read-only access to effective findings materialised by Policy Engine.
///
public const string FindingsRead = "findings:read";
///
/// Scope granting permission to run Policy Studio simulations.
///
public const string PolicySimulate = "policy:simulate";
///
/// Scope granted to Policy Engine service identity for writing effective findings.
///
public const string EffectiveWrite = "effective:write";
///
/// Scope granting read-only access to graph queries and overlays.
///
public const string GraphRead = "graph:read";
///
/// Scope granting read-only access to Vuln Explorer resources and permalinks.
///
public const string VulnRead = "vuln:read";
///
/// Scope granting read-only access to export center runs and bundles.
///
public const string ExportViewer = "export.viewer";
///
/// Scope granting permission to operate export center scheduling and run execution.
///
public const string ExportOperator = "export.operator";
///
/// Scope granting administrative control over export center retention, encryption keys, and scheduling policies.
///
public const string ExportAdmin = "export.admin";
///
/// Scope granting permission to enqueue or mutate graph build jobs.
///
public const string GraphWrite = "graph:write";
///
/// Scope granting permission to export graph artefacts (GraphML/JSONL/etc.).
///
public const string GraphExport = "graph:export";
///
/// Scope granting permission to trigger what-if simulations on graphs.
///
public const string GraphSimulate = "graph:simulate";
///
/// Scope granting read-only access to Orchestrator job state and telemetry.
///
public const string OrchRead = "orch:read";
///
/// Scope granting permission to execute Orchestrator control actions.
///
public const string OrchOperate = "orch:operate";
///
/// Scope granting read-only access to Authority tenant catalog APIs.
///
public const string AuthorityTenantsRead = "authority:tenants.read";
private static readonly HashSet KnownScopes = new(StringComparer.OrdinalIgnoreCase)
{
ConcelierJobsTrigger,
ConcelierMerge,
AuthorityUsersManage,
AuthorityClientsManage,
AuthorityAuditRead,
Bypass,
UiRead,
ExceptionsApprove,
AdvisoryRead,
AdvisoryIngest,
VexRead,
VexIngest,
AocVerify,
SignalsRead,
SignalsWrite,
SignalsAdmin,
PolicyWrite,
PolicyAuthor,
PolicyEdit,
PolicyRead,
PolicyReview,
PolicySubmit,
PolicyApprove,
PolicyOperate,
PolicyAudit,
PolicyRun,
PolicyActivate,
PolicySimulate,
FindingsRead,
EffectiveWrite,
GraphRead,
VulnRead,
ExportViewer,
ExportOperator,
ExportAdmin,
GraphWrite,
GraphExport,
GraphSimulate,
OrchRead,
OrchOperate,
AuthorityTenantsRead
};
///
/// Normalises a scope string (trim/convert to lower case).
///
/// Scope raw value.
/// Normalised scope or null when the input is blank.
public static string? Normalize(string? scope)
{
if (string.IsNullOrWhiteSpace(scope))
{
return null;
}
return scope.Trim().ToLowerInvariant();
}
///
/// Checks whether the provided scope is registered as a built-in StellaOps scope.
///
public static bool IsKnown(string scope)
{
ArgumentNullException.ThrowIfNull(scope);
return KnownScopes.Contains(scope);
}
///
/// Returns the full set of built-in scopes.
///
public static IReadOnlyCollection All => KnownScopes;
}