Skip to main content

supercode_interchange/orchestration/
access.rs

1//! Allowlists, admins and policy, read from Hermes's own stores (docs/plans/hermes-compat.md row 8):
2//! the home's `.env` allowlists and allow-all flags, the approved pairings under `platforms/pairing/`,
3//! and each platform's `allow_admin_from`. Pairing codes are Hermes's: its pairing store issues and
4//! approves them.
5
6use std::collections::BTreeMap;
7
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10
11/// Per-platform policy.
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
13#[serde(rename_all = "snake_case")]
14pub enum AccessPolicy {
15    /// Only allowlisted (or paired) senders.
16    #[default]
17    Allowlist,
18    /// Anyone.
19    Open,
20}
21
22/// The access record, as Hermes's stores hold it.
23#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
24pub struct Access {
25    /// Allowed senders per platform.
26    #[serde(default)]
27    pub allowlist: BTreeMap<String, Vec<String>>,
28    /// Admins per platform.
29    #[serde(default)]
30    pub admins: BTreeMap<String, Vec<String>>,
31    /// Policy per platform; `allowlist` when absent.
32    #[serde(default)]
33    pub policy: BTreeMap<String, AccessPolicy>,
34}