Skip to main content

ProdVaultFacade

Struct ProdVaultFacade 

Source
pub struct ProdVaultFacade {
    workspace: Weak<Workspace>,
}
Expand description

The production facade: a weak workspace, so it can read the current [vault] session after a reload rather than holding a stale one.

Fields§

§workspace: Weak<Workspace>

Implementations§

Source§

impl ProdVaultFacade

Source

pub fn from_arc(workspace: &Arc<Workspace>) -> Self

Source

pub fn into_arc(self) -> Arc<dyn VaultFacade> ⓘ

Source

fn workspace(&self) -> Result<Arc<Workspace>, VaultToolError>

Source

fn session(&self) -> Result<Arc<VaultSession>, VaultToolError>

Source

fn decrypt_failed( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, error: VaultToolError, ) -> VaultToolError

A decryption failure under a known key means the account rotated its keys: drop them and restamp every other parked card as needing the password again. Other error kinds pass through untouched.

Source

fn fallback_or_lock<T>( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, result: Result<T, VaultToolError>, fallback: T, ) -> Result<T, VaultToolError>

A card may draw (unreadable) for a field it has no key for, but a crypto failure means the keys are stale and must lock the session.

Source

async fn ensure_keys_current( &self, approved: &Approved, item: Option<&str>, ) -> Result<SyncData, VaultToolError>

A write re-checks the account key immediately before it runs: a rotation during the park would store ciphertext the next unlock cannot read. The sync comes back for the write’s encryptedFor stamp.

Source

fn guard_reload( approved: &Approved, session: &Arc<VaultSession>, ) -> Result<(), VaultToolError>

A call that read the account before its gate must not run against a session a [vault] reload swapped in: settle it as changed instead.

Source

async fn gate( &self, caller: &SessionSlot, draft: VaultDraft, tool: VaultTool, field: Option<&str>, ) -> Result<Approved, VaultToolError>

Park the draft, await one answer, settle it, and unlock the shared session when the card asked for the password. Decline and send-back are audited here and returned as the tool’s refusal; an approval returns the session and its keys, and the caller audits the outcome.

Source

async fn item_gate<F>( &self, caller: &SessionSlot, tool: VaultTool, id: &str, summary: F, ) -> Result<(Approved, Value, VaultDraft), VaultToolError>
where F: FnOnce(Option<&str>, &mut VaultDraft) -> String,

Gate one item operation. When the session is unlocked the item is fetched first so the card can name it; when it is locked the card is parked with the id alone, because a token call would fail before the reader ever saw the password field. The item is fetched after the unlock either way, so the returned cipher is always current.

Source§

impl ProdVaultFacade

Source

fn search_items( &self, session: &VaultSession, caller: &SessionSlot, keys: &Unlocked, sync: &SyncData, query: &str, limit: usize, ) -> Result<Vec<Value>, VaultToolError>

The metadata hits for one query: name, username and URIs are decrypted, and nothing else is. Trashed items are skipped, as a vault search does. A field the item’s key cannot decrypt draws (unreadable); a stale key lock the session instead.

Source

fn decrypt_username( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, keys: &Unlocked, cipher: &Value, ) -> Result<Option<String>, VaultToolError>

Source

fn decrypt_uris( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, keys: &Unlocked, cipher: &Value, ) -> Result<Vec<String>, VaultToolError>

Source

fn folder_name( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, keys: &Unlocked, sync: &SyncData, cipher: &Value, ) -> Result<Option<String>, VaultToolError>

Source

fn item_metadata( &self, approved: &Approved, keys: &Unlocked, cipher: &Value, ) -> Result<Value, VaultToolError>

Source

fn attachment_rows( &self, session: &VaultSession, caller: &SessionSlot, item: Option<&str>, keys: &Unlocked, cipher: &Value, ) -> Result<Value, VaultToolError>

Trait Implementations§

Source§

impl VaultFacade for ProdVaultFacade

Source§

fn search<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, query: &'life2 str, limit: Option<usize>, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn get<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, reveal: Option<&'life3 str>, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Source§

fn create<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, input: &'life2 CreateInput, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn update<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, patch: &'life3 PatchInput, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Source§

fn trash<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn restore<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn totp_code<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn attachment_get<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, item_id: &'life2 str, attachment_id: &'life3 str, destination: &'life4 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, 'life4: 'async_trait,

Source§

fn attachment_put<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, item_id: &'life2 str, path: &'life3 str, name: Option<&'life4 str>, replace_attachment_id: Option<&'life5 str>, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, 'life4: 'async_trait, 'life5: 'async_trait,

Source§

fn folder_list<'life0, 'life1, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn folder_create<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, name: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn folder_update<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, name: &'life3 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Source§

fn folder_delete<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, caller: &'life1 SessionSlot, id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Value, VaultToolError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

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<T> Any for T
where T: Any,

§

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

§

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

§

fn type_name(&self) -> &'static str

§

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

§

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

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,

§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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
§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

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

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