Skip to main content

Request

Enum Request 

Source
pub enum Request {
    Hello {
        nonce: String,
    },
    Put {
        token: String,
        repo: String,
        passphrase: String,
    },
    Get {
        token: String,
        repo: String,
    },
    Drop {
        token: String,
        repo: Option<String>,
    },
    Status {
        token: String,
    },
    Shutdown {
        token: String,
    },
}
Expand description

What a client sends. Every variant that reads or changes what the agent holds carries the token: there is no unauthenticated operation on the store, not even Status, because whether an agent holds a passphrase for a given repository is itself worth not answering.

Hello is the one exception and carries no token, because it is how the client checks the server before trusting it with anything — a check that cannot itself require the check to have happened.

That does make Hello answerable by anyone who can reach the port, which on loopback is every account on the machine. What it gives them is an HMAC over a nonce of their choosing under a 256-bit key, and the knowledge that an agent is running. Neither is a route to the token or to a passphrase, but “the port answers nothing without the token” is not true and should not be relied on as though it were.

Variants§

§

Hello

Ask the peer to prove it holds the token, by returning a MAC over a nonce the client chose.

Fields

§nonce: String
§

Put

Store a passphrase for repo.

Fields

§token: String
§repo: String
§passphrase: String
§

Get

Retrieve the passphrase for repo, if one is held and unexpired.

Fields

§token: String
§repo: String
§

Drop

Forget one repository’s passphrase, or all of them when repo is None.

Fields

§token: String
§

Status

How many entries are held, and with what idle timeout.

Fields

§token: String
§

Shutdown

Stop the agent, clearing everything it holds.

Fields

§token: String

Trait Implementations§

Source§

impl<'de> Deserialize<'de> for Request

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Request

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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