pub struct RestrictedDiscoveryConfig {
pub(crate) enabled: bool,
watch_configuration: bool,
key_dirs: DirectoryKeyProviderList,
static_keys: StaticKeyProvider,
}Expand description
Configuration for enabling restricted discovery mode.
§Client nickname uniqueness
The client nicknames specified in key_dirs and static_keys
must be unique. Any nickname occurring in static_keys must not
already have an entry in any of the configured key_dirs,
and any one nickname must not occur in more than one of the key_dirs.
Violating this rule will cause the additional keys to be ignored. If there are multiple entries for the same nickname, the entry with the highest precedence will be used, and all the others will be ignored. The precedence rules are as follows:
- the
static_keystake precedence over the keys fromkey_dirs - the ordering of the directories in
key_dirsrepresents the order of precedence
§Reloading the configuration
Currently, the static_keys and key_dirs directories will not be monitored for updates,
even when automatic config reload is enabled. We hope to change that in the future.
In the meantime, you will need to restart your service every time you update
its restricted discovery settings in order for the changes to be applied.
See the module-level documentation for more details.
Fields§
§enabled: boolWhether to enable restricted discovery mode.
Services running in restricted discovery mode are only discoverable by the configured clients.
Can only be enabled if the restricted-discovery feature is enabled.
If you enable this, you must also specify the authorized clients (via static_keys),
or the directories where the authorized client keys should be read from (via key_dirs).
Restricted discovery mode is disabled by default.
watch_configuration: boolIf true, the provided key_dirs will be watched for changes.
key_dirs: DirectoryKeyProviderListDirectories containing the client keys, each in the
descriptor:x25519:<base32-encoded-x25519-public-key> format.
Each file in this directory must have a file name of the form <nickname>.auth,
where <nickname> is a valid HsClientNickname.
static_keys: StaticKeyProviderA static mapping from client nicknames to keys.
Each client key must be in the descriptor:x25519:<base32-encoded-x25519-public-key>
format.
Implementations§
Source§impl RestrictedDiscoveryConfig
impl RestrictedDiscoveryConfig
Sourcepub fn builder() -> RestrictedDiscoveryConfigBuilder
pub fn builder() -> RestrictedDiscoveryConfigBuilder
Return a new [RestrictedDiscoveryConfig Builder] to construct an instance of this type.
Source§impl RestrictedDiscoveryConfig
impl RestrictedDiscoveryConfig
Sourcepub fn enabled(&self) -> &bool
pub fn enabled(&self) -> &bool
Method borrowing RestrictedDiscoveryConfig::enabled field.
Whether to enable restricted discovery mode.
Sourcepub fn watch_configuration(&self) -> bool
pub fn watch_configuration(&self) -> bool
Method returning copy of RestrictedDiscoveryConfig::watch_configuration field.
If true, the provided key_dirs will be watched for changes.
Sourcepub fn watch_configuration_mut(&mut self) -> &mut bool
pub fn watch_configuration_mut(&mut self) -> &mut bool
Method returning mutable borrow of RestrictedDiscoveryConfig::watch_configuration field.
If true, the provided key_dirs will be watched for changes.
Sourcepub fn key_dirs(&self) -> &DirectoryKeyProviderList
pub fn key_dirs(&self) -> &DirectoryKeyProviderList
Method borrowing RestrictedDiscoveryConfig::key_dirs field.
Directories containing the client keys, each in the
Sourcepub fn static_keys(&self) -> &StaticKeyProvider
pub fn static_keys(&self) -> &StaticKeyProvider
Method borrowing RestrictedDiscoveryConfig::static_keys field.
A static mapping from client nicknames to keys.
Source§impl RestrictedDiscoveryConfig
impl RestrictedDiscoveryConfig
Sourcepub(crate) fn read_keys(
&self,
path_resolver: &CfgPathResolver,
) -> Option<BTreeMap<HsClientNickname, HsClientDescEncKey>>
pub(crate) fn read_keys( &self, path_resolver: &CfgPathResolver, ) -> Option<BTreeMap<HsClientNickname, HsClientDescEncKey>>
Read the client keys from all the configured key providers.
Returns None if restricted mode is disabled.
When reconfiguring a RunningOnionService,
call this function to obtain an up-to-date view of the authorized clients.
Note: if there are multiple entries for the same HsClientNickname,
only one of them will be used (the others are ignored).
The deduplication logic is as follows:
- the
static_keystake precedence over the keys fromkey_dirs - the ordering of the directories in
key_dirsrepresents the order of precedence
Trait Implementations§
Source§impl Buildable for RestrictedDiscoveryConfig
impl Buildable for RestrictedDiscoveryConfig
Source§type Builder = RestrictedDiscoveryConfigBuilder
type Builder = RestrictedDiscoveryConfigBuilder
Source§fn builder() -> RestrictedDiscoveryConfigBuilder
fn builder() -> RestrictedDiscoveryConfigBuilder
Source§impl Clone for RestrictedDiscoveryConfig
impl Clone for RestrictedDiscoveryConfig
Source§fn clone(&self) -> RestrictedDiscoveryConfig
fn clone(&self) -> RestrictedDiscoveryConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RestrictedDiscoveryConfig
impl Debug for RestrictedDiscoveryConfig
Source§impl Default for RestrictedDiscoveryConfig
impl Default for RestrictedDiscoveryConfig
Source§impl PartialEq for RestrictedDiscoveryConfig
impl PartialEq for RestrictedDiscoveryConfig
Source§fn eq(&self, other: &RestrictedDiscoveryConfig) -> bool
fn eq(&self, other: &RestrictedDiscoveryConfig) -> bool
self and other values to be equal, and is used by ==.impl Eq for RestrictedDiscoveryConfig
impl StructuralPartialEq for RestrictedDiscoveryConfig
Auto Trait Implementations§
impl Freeze for RestrictedDiscoveryConfig
impl RefUnwindSafe for RestrictedDiscoveryConfig
impl Send for RestrictedDiscoveryConfig
impl Sync for RestrictedDiscoveryConfig
impl Unpin for RestrictedDiscoveryConfig
impl UnsafeUnpin for RestrictedDiscoveryConfig
impl UnwindSafe for RestrictedDiscoveryConfig
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PossiblyOption<T> for T
impl<T> PossiblyOption<T> for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.