OnionClientAuthViewResponse

Struct OnionClientAuthViewResponse 

Source
pub struct OnionClientAuthViewResponse {
    pub requested: Option<String>,
    pub credentials: HashMap<String, HiddenServiceCredential>,
}
Expand description

Parsed response from the ONION_CLIENT_AUTH_VIEW command.

Contains credentials for accessing v3 hidden services that require client authentication.

§Example

use stem_rs::response::{ControlMessage, OnionClientAuthViewResponse};

// View all credentials
let msg = ControlMessage::from_str(
    "250-ONION_CLIENT_AUTH_VIEW\r\n\
     250-CLIENT service1 x25519:key1\r\n\
     250-CLIENT service2 x25519:key2\r\n\
     250 OK\r\n",
    None,
    false
).unwrap();

let response = OnionClientAuthViewResponse::from_message(&msg).unwrap();
assert!(response.requested.is_none()); // Viewing all
assert_eq!(response.credentials.len(), 2);

Fields§

§requested: Option<String>

The specific service ID that was requested, if any.

None if viewing all credentials, Some(service_id) if viewing credentials for a specific hidden service.

§credentials: HashMap<String, HiddenServiceCredential>

Map of service IDs to their credentials.

Keys are hidden service addresses (without .onion suffix).

Implementations§

Source§

impl OnionClientAuthViewResponse

Source

pub fn from_message(message: &ControlMessage) -> Result<Self, Error>

Parses an ONION_CLIENT_AUTH_VIEW response from a control message.

Extracts credentials for one or all hidden services from the response.

§Arguments
  • message - The control message to parse
§Errors

Returns Error::Protocol if:

  • The response status is not OK
  • The response is empty
  • The response doesn’t start with “ONION_CLIENT_AUTH_VIEW”
  • A CLIENT line has fewer than 3 fields
  • A CLIENT line doesn’t start with “CLIENT”
  • The credential format is invalid (missing : separator)
  • An attribute is not a key=value mapping
§Example
use stem_rs::response::{ControlMessage, OnionClientAuthViewResponse};

// View credentials for a specific service
let msg = ControlMessage::from_str(
    "250-ONION_CLIENT_AUTH_VIEW myservice\r\n\
     250-CLIENT myservice x25519:secretkey\r\n\
     250 OK\r\n",
    None,
    false
).unwrap();

let response = OnionClientAuthViewResponse::from_message(&msg).unwrap();
assert_eq!(response.requested, Some("myservice".to_string()));
assert!(response.credentials.contains_key("myservice"));

Trait Implementations§

Source§

impl Clone for OnionClientAuthViewResponse

Source§

fn clone(&self) -> OnionClientAuthViewResponse

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for OnionClientAuthViewResponse

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