Skip to main content

TuiRegistry

Struct TuiRegistry 

pub struct TuiRegistry { /* private fields */ }
Expand description

Daemon-wide registry of connected TUI clients. Source of truth for live TUI connection state. Not persisted — rebuilt on each daemon start from incoming initialize handshakes.

Implementations§

Source§

impl TuiRegistry

Source

pub fn new(config_dir: &Path) -> Self

Create a registry that signs with a subkey of the install key at <config_dir>/.secret_key, the key the secret store encrypts config secrets with. The key is provisioned if absent, through the secret store’s own creation path, so a fresh install can serve remote RPC (which requires signed identities). If it cannot be read or created (for example a corrupt key file, which is never replaced), signing stays off and remote RPC is refused.

Source

pub fn for_config(config: &Config) -> Self

The registry for a daemon running config. The install key lives next to config.toml (the directory Config::save hands the secret store), not in data_dir.

Source

pub fn signing_is_enabled(&self) -> bool

Whether HMAC signing is enabled (.secret_key was loaded).

Source

pub fn generate_tui_id() -> String

Generate a short TUI ID: tui_ + 8 hex chars (4 random bytes).

Source

pub fn generate_unique_tui_id(&self) -> String

Generate a TUI ID that is not currently in the registry.

Source

pub fn sign(&self, tui_id: &str) -> Option<String>

Sign a TUI ID with HMAC-SHA256. Returns None if signing is disabled.

Source

pub fn verify(&self, tui_id: &str, sig: &str) -> bool

Verify a TUI ID + signature. Returns true if:

  • Signing is disabled (trust all), OR
  • The signature is valid.
Source

pub fn register(&self, entry: TuiEntry) -> TuiEpoch

Register a connected TUI, displacing any earlier registration of the same id. Returns the epoch this registration owns; the caller must quote it back to Self::unregister so a late teardown cannot evict a successor.

Source

pub fn unregister(&self, tui_id: &str, epoch: TuiEpoch)

Unregister a disconnected TUI, but ONLY while epoch is still the live registration for that id.

A reconnect adopts the same id under a new epoch, and the displaced connection’s teardown can run at any point after that — it may still be draining, or parked in a bounded write. Removing by key alone would let that late teardown evict the connection that replaced it.

Source

pub fn list(&self) -> Vec<TuiEntry>

Snapshot of all connected TUIs.

Source

pub fn env_for_registration( &self, tui_id: &str, epoch: TuiEpoch, ) -> Option<HashMap<String, String>>

Return a clone of the environment captured by ONE registration of a TUI: the entry for tui_id, and only while epoch is still the live registration for that id.

The captured environment carries the user’s real shell, credential sockets included, so it is readable only by the connection that captured it. Quoting the epoch is what makes that true across a reconnect: a superseded connection holds the same id as its successor, and without the epoch it would read the successor’s environment. This mirrors Self::unregister, which quotes the epoch for the same reason in the other direction.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more