Skip to main content

UiServer

Struct UiServer 

Source
pub struct UiServer { /* private fields */ }

Implementations§

Source§

impl UiServer

Source

pub fn new(facade: AreevFacade, db_label: String) -> Self

Source

pub fn with_sso( self, header: impl Into<String>, secret: impl Into<String>, ) -> Self

Enable trusted-header SSO (v0). header names the identity header the authenticating proxy forwards; secret is the proxy’s shared secret, demanded in x-areev-proxy-secret on every SSO request.

Source

pub fn with_sso_rotating( self, header: impl Into<String>, secret: impl Into<String>, next: Option<impl Into<String>>, ) -> Self

with_sso with a second secret accepted during a rotation window (#79).

next is the incoming secret; secret stays the one already deployed. While both are configured either proves the proxy, so the fleet can be moved over one node at a time and the old secret retired afterwards — the way a TLS key is rotated. Order carries no privilege: they are equally valid until one is removed, which is what makes the window safe to run in both directions (roll forward, or roll back).

The window is meant to be short. Nothing here enforces that — a deadline the server could enforce would have to live in the file or a clock it does not own — so retiring the old secret is the operator’s step, and docs/runbooks/sso-secret-rotation.md is the procedure.

Source

pub fn with_credentials(self, map: CredentialMap) -> Self

Multi-principal mode: attach the credential map (areev-auth.json). Tokens resolve to principal names; rights come from the memory file’s own grant grains; unauthenticated requests run as anonymous. See docs/cal-reference.md §9.

Source

pub fn with_loop_policy(self, policy: Policy) -> Self

Attach a host loop policy to the console’s loop routes, so a console-triggered run honors the same auto-apply grants, denies, and severity floors as areev loop run --policy.

Source

pub fn allow_remote(self, yes: bool) -> Self

Accept requests whose Host header is non-loopback. Off by default so the loopback console is protected against DNS-rebinding reads even when unauthenticated; the CLI enables it under --allow-remote.

Source

pub fn allow_origin(self, origin: impl Into<String>) -> Self

Accept a cross-origin POST whose Origin header exactly matches this origin (scheme + host[:port], compared case-insensitively with a single trailing / ignored). Call once per origin to allow — there is no wildcard or subdomain form, by design: naming https://console.example.com must never thereby accept https://evil-console.example.com.

--allow-remote does not imply this. The Origin check exists because the console authenticates browsers with HTTP Basic, which the browser caches and re-attaches to cross-site requests — Origin is the only thing telling the console’s own page apart from an attacker’s page riding a viewer’s cached credential, so it is CSRF protection, not defence in depth, and it stays enforced on every non-loopback origin except the ones named here.

Source

pub fn with_auth(self, token: String) -> Self

Require a shared secret on every request (the console page, reads, and writes). Browsers authenticate through the native Basic prompt (any username; password = token); scripts may send Authorization: Bearer <token>. Use this to serve the console to more than a single trusted local operator. Pair with a TLS-terminating proxy for non-local exposure — the token crosses the wire in the clear otherwise.

Source

pub fn allow_destructive_ops(self, allow: bool) -> Self

Permit or forbid destructive CAL (FORGET <hash>) from the query console. Enabled by default; pass false to serve a read-only console. Since the plain console is unauthenticated, disabling this is the safe choice when the console is exposed beyond a trusted local operator.

Source

pub fn bind(addr: &str) -> Result<TcpListener>

Bind and return the listener (lets callers learn the ephemeral port).

Source

pub fn serve(&self, listener: TcpListener) -> Result<()>

Serve forever on an already-bound listener.

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
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
Source§

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

Source§

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

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Fruit for T
where T: Send + Downcast,

Source§

impl<T> Instrument for T

Source§

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

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

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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 = !

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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

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

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