pub struct ExtendedUserMapping {
admin_secret_handling: AdministrativeSecretHandling,
non_admin_secret_handling: NonAdministrativeSecretHandling,
connections: HashSet<Connection>,
user_mapping: UserMapping,
}
Expand description
A UserMapping
centric view of a SignstarConfig
.
Wraps a single UserMapping
, as well as the system-wide AdministrativeSecretHandling
,
NonAdministrativeSecretHandling
and [Connection
]s.
Fields§
§admin_secret_handling: AdministrativeSecretHandling
§non_admin_secret_handling: NonAdministrativeSecretHandling
§connections: HashSet<Connection>
§user_mapping: UserMapping
Implementations§
Source§impl ExtendedUserMapping
impl ExtendedUserMapping
Sourcepub fn new(
admin_secret_handling: AdministrativeSecretHandling,
non_admin_secret_handling: NonAdministrativeSecretHandling,
connections: HashSet<Connection>,
user_mapping: UserMapping,
) -> Self
pub fn new( admin_secret_handling: AdministrativeSecretHandling, non_admin_secret_handling: NonAdministrativeSecretHandling, connections: HashSet<Connection>, user_mapping: UserMapping, ) -> Self
Creates a new ExtendedUserMapping
.
Sourcepub fn get_admin_secret_handling(&self) -> AdministrativeSecretHandling
pub fn get_admin_secret_handling(&self) -> AdministrativeSecretHandling
Returns the AdministrativeSecretHandling
.
Sourcepub fn get_connections(&self) -> HashSet<Connection>
pub fn get_connections(&self) -> HashSet<Connection>
Returns the [Connection
]s.
Sourcepub fn get_non_admin_secret_handling(&self) -> NonAdministrativeSecretHandling
pub fn get_non_admin_secret_handling(&self) -> NonAdministrativeSecretHandling
Returns the NonAdministrativeSecretHandling
.
Sourcepub fn get_user_mapping(&self) -> &UserMapping
pub fn get_user_mapping(&self) -> &UserMapping
Returns the UserMapping
.
Sourcepub fn load_credentials(&self) -> Result<CredentialsLoading, Error>
pub fn load_credentials(&self) -> Result<CredentialsLoading, Error>
Loads credentials for each [UserId
] associated with a SystemUserId
.
The SystemUserId
of the mapping must be equal to the current system user calling this
function.
Relies on get_plaintext_secret_file
and get_systemd_creds_secret_file
to retrieve
the specific path to a secret file for each [UserId
] mapped to a SystemUserId
.
Returns a CredentialsLoading
, which may contain critical errors related to loading a
passphrase for each available [UserId
].
The caller is expected to handle any errors tracked in the returned object based on context.
§Errors
Returns an error if
- the
ExtendedUserMapping
provides noSystemUserId
, - no system user equal to the
SystemUserId
exists, - the
SystemUserId
is not equal to the currently calling system user, - or the systemd-creds command is not available when trying to decrypt secrets.
Sourcepub fn create_secrets_dir(&self) -> Result<(), Error>
pub fn create_secrets_dir(&self) -> Result<(), Error>
Creates secrets directories for all non-administrative mappings.
Matches the SystemUserId
in a mapping with an actual user on the system.
Creates the passphrase directory for the user and ensures correct ownership of it and all
parent directories up until the user’s home directory.
§Errors
Returns an error if
- no system user is available in the mapping,
- the system user of the mapping is not available on the system,
- the directory could not be created,
- the ownership of any directory between the user’s home and the passphrase directory can not be changed.
Sourcepub fn create_non_administrative_secrets(&self) -> Result<(), Error>
pub fn create_non_administrative_secrets(&self) -> Result<(), Error>
Creates passphrases for all non-administrative mappings.
Creates a random alphanumeric, 30-char long passphrase for each backend user of each non-administrative user mapping.
- If
self
is configured to useNonAdministrativeSecretHandling::Plaintext
, the passphrase is stored in a secrets file, defined byget_plaintext_secret_file
. - If
self
is configured to useNonAdministrativeSecretHandling::SystemdCreds
, the passphrase is encrypted using systemd-creds and stored in a secrets file, defined byget_systemd_creds_secret_file
.
§Errors
Returns an error if
- the targeted system user does not exist in the mapping or on the system,
- the function is called using a non-root user,
- the systemd-creds command is not available when trying to encrypt the passphrase,
- the encryption of the passphrase using systemd-creds fails,
- the secrets file can not be created,
- the secrets file can not be written to,
- or the ownership and permissions of the secrets file can not be changed.
Trait Implementations§
Source§impl Clone for ExtendedUserMapping
impl Clone for ExtendedUserMapping
Source§fn clone(&self) -> ExtendedUserMapping
fn clone(&self) -> ExtendedUserMapping
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ExtendedUserMapping
impl Debug for ExtendedUserMapping
Source§impl<'de> Deserialize<'de> for ExtendedUserMapping
impl<'de> Deserialize<'de> for ExtendedUserMapping
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for ExtendedUserMapping
impl PartialEq for ExtendedUserMapping
Source§impl Serialize for ExtendedUserMapping
impl Serialize for ExtendedUserMapping
impl Eq for ExtendedUserMapping
impl StructuralPartialEq for ExtendedUserMapping
Auto Trait Implementations§
impl Freeze for ExtendedUserMapping
impl RefUnwindSafe for ExtendedUserMapping
impl Send for ExtendedUserMapping
impl Sync for ExtendedUserMapping
impl Unpin for ExtendedUserMapping
impl UnwindSafe for ExtendedUserMapping
Blanket Implementations§
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,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.