pub struct AdminCredentials { /* private fields */ }Expand description
Administrative credentials.
Tracks the following credentials and passphrases:
- the backup passphrase of the backend,
- the unlock passphrase of the backend,
- the top-level administrator credentials of the backend,
- the namespace administrator credentials of the backend.
§Note
The unlock and backup passphrase must be at least 10 characters long. The passphrases of top-level and namespace administrator accounts must be at least 10 characters long. The list of top-level administrator credentials must include an account with the username “admin”.
Implementations§
Source§impl AdminCredentials
impl AdminCredentials
Sourcepub fn new(
iteration: u32,
backup_passphrase: Passphrase,
unlock_passphrase: Passphrase,
administrators: Vec<FullCredentials>,
namespace_administrators: Vec<FullCredentials>,
) -> Result<Self, Error>
pub fn new( iteration: u32, backup_passphrase: Passphrase, unlock_passphrase: Passphrase, administrators: Vec<FullCredentials>, namespace_administrators: Vec<FullCredentials>, ) -> Result<Self, Error>
Creates a new AdminCredentials instance.
§Examples
use nethsm::FullCredentials;
use signstar_config::admin_credentials::AdminCredentials;
let creds = AdminCredentials::new(
1,
"backup-passphrase".parse()?,
"unlock-passphrase".parse()?,
vec![FullCredentials::new(
"admin".parse()?,
"admin-passphrase".parse()?,
)],
vec![FullCredentials::new(
"ns1~admin".parse()?,
"ns1-admin-passphrase".parse()?,
)],
)?;Sourcepub fn load(
secrets_handling: AdministrativeSecretHandling,
) -> Result<Self, Error>
pub fn load( secrets_handling: AdministrativeSecretHandling, ) -> Result<Self, Error>
Loads an AdminCredentials from the default file location.
Depending on secrets_handling, the file path and contents differ:
AdministrativeSecretHandling::Plaintext: the file path is defined byget_plaintext_credentials_fileand the contents are plaintext,AdministrativeSecretHandling::SystemdCreds: the file path is defined byget_systemd_creds_credentials_fileand the contents are systemd-creds encrypted.
Delegates to AdminCredentials::load_from_file, providing the specific file path and the
selected secrets_handling.
§Examples
use signstar_config::{AdminCredentials, AdministrativeSecretHandling};
// load plaintext credentials from default location
let plaintext_admin_creds = AdminCredentials::load(AdministrativeSecretHandling::Plaintext)?;
// load systemd-creds encrypted credentials from default location
let systemd_creds_admin_creds =
AdminCredentials::load(AdministrativeSecretHandling::SystemdCreds)?;
§Errors
Returns an error if AdminCredentials::load_from_file fails.
§Panics
This function panics when providing AdministrativeSecretHandling::ShamirsSecretSharing
as secrets_handling.
Sourcepub fn load_from_file(
path: impl AsRef<Path>,
secrets_handling: AdministrativeSecretHandling,
) -> Result<Self, Error>
pub fn load_from_file( path: impl AsRef<Path>, secrets_handling: AdministrativeSecretHandling, ) -> Result<Self, Error>
Loads an AdminCredentials instance from file.
Depending on path and secrets_handling, the behavior of this function differs:
- If
secrets_handlingis set toAdministrativeSecretHandling::Plaintextthe contents atpathare considered to be plaintext. - If
secrets_handlingis set toAdministrativeSecretHandling::SystemdCredsthe contents atpathare considered to be systemd-creds encrypted.
§Examples
use std::io::Write;
use signstar_config::{AdminCredentials, AdministrativeSecretHandling};
let admin_creds = r#"iteration = 1
backup_passphrase = "backup-passphrase"
unlock_passphrase = "unlock-passphrase"
[[administrators]]
name = "admin"
passphrase = "admin-passphrase"
[[namespace_administrators]]
name = "ns1~admin"
passphrase = "ns1-admin-passphrase"
"#;
let mut tempfile = tempfile::NamedTempFile::new()?;
write!(tempfile.as_file_mut(), "{admin_creds}");
assert!(
AdminCredentials::load_from_file(tempfile.path(), AdministrativeSecretHandling::Plaintext)
.is_ok()
);§Errors
Returns an error if
- the function is called by a system user that is not root,
- the file at
pathdoes not exist, - the file at
pathis not a file, - the file at
pathis considered as plaintext but can not be loaded, - the file at
pathis considered as systemd-creds encrypted but can not be decrypted, - or the file at
pathis considered as systemd-creds encrypted but can not be loaded after decryption.
§Panics
This function panics when providing AdministrativeSecretHandling::ShamirsSecretSharing
as secrets_handling.
Sourcepub fn store(
&self,
secrets_handling: AdministrativeSecretHandling,
) -> Result<(), Error>
pub fn store( &self, secrets_handling: AdministrativeSecretHandling, ) -> Result<(), Error>
Stores the AdminCredentials as a file in the default location.
Depending on secrets_handling, the file path and contents differ:
AdministrativeSecretHandling::Plaintext: the file path is defined byget_plaintext_credentials_fileand the contents are plaintext,AdministrativeSecretHandling::SystemdCreds: the file path is defined byget_systemd_creds_credentials_fileand the contents are systemd-creds encrypted.
Automatically creates the directory in which the administrative credentials are created.
After storing the AdminCredentials as file, its file permissions and ownership are
adjusted so that it is only accessible by root.
§Examples
use nethsm::FullCredentials;
use signstar_config::{AdminCredentials, AdministrativeSecretHandling};
let creds = AdminCredentials::new(
1,
"backup-passphrase".parse()?,
"unlock-passphrase".parse()?,
vec![FullCredentials::new(
"admin".parse()?,
"admin-passphrase".parse()?,
)],
vec![FullCredentials::new(
"ns1~admin".parse()?,
"ns1-admin-passphrase".parse()?,
)],
)?;
// store as plaintext file
creds.store(AdministrativeSecretHandling::Plaintext)?;
// store as systemd-creds encrypted file
creds.store(AdministrativeSecretHandling::SystemdCreds)?;§Errors
Returns an error if
- the function is called by a system user that is not root,
- the directory for administrative credentials cannot be created,
selfcannot be turned into its TOML representation,- the systemd-creds command is not found,
- systemd-creds fails to encrypt the TOML representation of
self, - the target file can not be created,
- the plaintext or systemd-creds encrypted data can not be written to file,
- or the ownership or permissions of the target file can not be adjusted.
§Panics
This function panics when providing AdministrativeSecretHandling::ShamirsSecretSharing
as secrets_handling.
Sourcepub fn get_iteration(&self) -> u32
pub fn get_iteration(&self) -> u32
Returns the iteration.
Sourcepub fn get_backup_passphrase(&self) -> &str
pub fn get_backup_passphrase(&self) -> &str
Returns the backup passphrase.
Sourcepub fn get_unlock_passphrase(&self) -> &str
pub fn get_unlock_passphrase(&self) -> &str
Returns the unlock passphrase.
Sourcepub fn get_administrators(&self) -> &[FullCredentials]
pub fn get_administrators(&self) -> &[FullCredentials]
Returns the list of administrators.
Sourcepub fn get_default_administrator(&self) -> Result<&FullCredentials, Error>
pub fn get_default_administrator(&self) -> Result<&FullCredentials, Error>
Sourcepub fn get_namespace_administrators(&self) -> &[FullCredentials]
pub fn get_namespace_administrators(&self) -> &[FullCredentials]
Returns the list of namespace administrators.
Trait Implementations§
Source§impl Clone for AdminCredentials
impl Clone for AdminCredentials
Source§fn clone(&self) -> AdminCredentials
fn clone(&self) -> AdminCredentials
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AdminCredentials
impl Debug for AdminCredentials
Source§impl Default for AdminCredentials
impl Default for AdminCredentials
Source§fn default() -> AdminCredentials
fn default() -> AdminCredentials
Source§impl<'de> Deserialize<'de> for AdminCredentials
impl<'de> Deserialize<'de> for AdminCredentials
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>,
Auto Trait Implementations§
impl Freeze for AdminCredentials
impl RefUnwindSafe for AdminCredentials
impl Send for AdminCredentials
impl Sync for AdminCredentials
impl Unpin for AdminCredentials
impl UnwindSafe for AdminCredentials
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,
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> 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> 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.