Skip to main content

Token

Struct Token 

Source
pub struct Token(/* private fields */);
Expand description

A bearer token for the control API.

Deliberately neither Debug nor Display. A token that can be formatted is a token that ends up in a log line eventually; the only way out is Token::as_str, which reads as the deliberate act it is.

Implementations§

Source§

impl Token

Source

pub fn generate() -> Result<Self>

Source

pub fn from_hex(s: &str) -> Self

Reconstruct a token generated elsewhere, such as one read back from disk.

Source

pub fn as_str(&self) -> &str

Source

pub fn matches(&self, presented: &str) -> bool

Compare in constant time.

A short-circuiting == leaks the token one byte at a time to anything that can time the response, and on loopback that is every process on the machine. The length is allowed to leak because it is a compile-time constant.

Source

pub fn write_to_disk(&self) -> Option<PathBuf>

Write the token where a local tool can find it, returning where it went.

Best effort. A daemon that cannot write the file still works, because the token is printed at startup as well, and refusing to start over this would be worse than the inconvenience it avoids.

Source

pub fn load_or_generate(rotate: bool) -> Result<(Self, Source)>

The token this run will use: last run’s, or a new one written down.

Reused by default, because the alternative is what this did before and it made the extension unusable. A fresh token every restart means pasting sixty-four characters into a popup every time the daemon comes back — and the token was already being written to disk, so regenerating took the risk of keeping it there and discarded the only thing that risk buys.

rotate mints a new one anyway, which is what to reach for if the old one leaked.

Auto Trait Implementations§

§

impl Freeze for Token

§

impl RefUnwindSafe for Token

§

impl Send for Token

§

impl Sync for Token

§

impl Unpin for Token

§

impl UnsafeUnpin for Token

§

impl UnwindSafe for Token

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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