Skip to main content

Secret

Struct Secret 

Source
pub struct Secret { /* private fields */ }
Expand description

Credential manager backed by the OS keyring.

Each instance addresses one credential, identified by the account name derived from the legacy file name (.jira_secret becomes jira), and knows how to ask the user for it when the store has nothing.

Implementations§

Source§

impl Secret

Source

pub fn new(secret_name: &str, prompt: &str) -> Self

Creates a credential handle for the given secret.

§Arguments
  • secret_name - Legacy file name for the credential (e.g. .jira_secret), which also determines the keyring account name
  • prompt - User-facing text shown when asking for the password
§Examples
use kasl::libs::secret::Secret;

let jira_secret = Secret::new(".jira_secret", "Enter your Jira password");
Source

pub fn get_or_prompt(&self) -> Result<String>

Retrieves the password from the keyring, prompting when absent.

Order of resolution: keyring, then a legacy AES file (migrated on the spot), then the user. A value obtained from either of the last two is written to the keyring, so this is the only time it is asked for.

§Returns

The stored or freshly entered password.

§Errors

Returns an error when the keyring is unavailable, or when there is no terminal to prompt at and nothing stored to fall back on.

Source

pub fn try_get_cached(&self) -> Option<String>

Returns a stored password without prompting the user.

Used by the background daemon, which has no terminal and must never block. Migrates a legacy file if one is found, so an unattended run benefits from the migration too.

§Returns

Some(password) when the credential is known, None otherwise.

Source

pub fn prompt(&self) -> Result<String>

Prompts for the password and stores it in the keyring.

§Errors

Fails when stdin is not a terminal, rather than blocking on input that cannot arrive - this path is reachable from a scheduled report --send.

Source

pub fn store(&self, password: &str) -> Result<()>

Writes the password into the OS keyring.

Source

pub fn delete(&self) -> Result<()>

Removes the credential from the keyring, if present.

Absence is not an error: the goal is that nothing remains afterwards.

Trait Implementations§

Source§

impl Clone for Secret

Source§

fn clone(&self) -> Secret

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Secret

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> PolicyExt for T
where T: ?Sized,

Source§

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

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
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