Struct Client

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

A combination of persistent data and HTTP client used for communicating with the API.

Implementations§

Source§

impl Client

Source

pub fn new(user_agent: String, api_base: Url) -> Result<Self, Box<dyn Error>>

Create a new Client configured with the given User-Agent and API base.

§Errors

This function will return an error if the reqwest Client could not be created.

Source

pub async fn enroll( &self, code: &str, ) -> Result<(NebulaConfig, DHPrivateKeyPEM, Credentials, EnrollMeta), Box<dyn Error>>

Issues an enrollment request against the REST API using the given enrollment code, passing along a locally generated DH X25519 Nebula key to be signed by the CA, and an Ed25519 key for future API authentication. On success it returns the Nebula config generated by the server, a Nebula private key PEM, credentials to be used for future DN API requests, and an object containing organization information.

§Errors

This function will return an error in any of the following situations:

  • the server_url is invalid
  • the HTTP request fails
  • the HTTP response is missing X-Request-ID
  • X-Request-ID isn’t valid UTF-8
  • the server returns an error
  • the server returns invalid JSON
  • the trusted_keys field is invalid
Source

pub async fn check_for_update( &self, creds: &Credentials, ) -> Result<bool, Box<dyn Error>>

Send a signed message to the DNClient API to learn if there is a new configuration available.

§Errors

This function returns an error if the dnclient request fails, or the server returns invalid data.

Source

pub async fn do_update( &self, creds: &Credentials, ) -> Result<(NebulaConfig, DHPrivateKeyPEM, Credentials), Box<dyn Error>>

Send a signed message to the DNClient API to fetch the new configuration update. During this call a new DH X25519 keypair is generated for the new Nebula certificate as well as a new Ed25519 keypair for DNClient API communication. On success it returns the new config, a Nebula private key PEM to be inserted into the config and new DNClient API credentials

§Errors

This function returns an error in any of the following scenarios:

  • if the message could not be serialized
  • if the request fails
  • if the response could not be deserialized
  • if the signature is invalid
  • if the keys are invalid
Source

pub async fn post_dnclient( &self, req_type: &str, value: &[u8], host_id: &str, counter: u32, ed_privkey: &SigningKey, ) -> Result<Vec<u8>, Box<dyn Error>>

Wraps and signs the given req_type and value, and then makes the API call. On success, returns the response body.

§Errors

This function will return an error if:

  • serialization in any step fails
  • if the server_url is invalid
  • if the request could not be sent

Auto Trait Implementations§

§

impl Freeze for Client

§

impl !RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl !UnwindSafe for Client

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

impl<T> ErasedDestructor for T
where T: 'static,