nethsm_config/
lib.rs

1//! A library for working with application configuration files for [Nitrokey NetHSM] devices
2//!
3//! Provides configuration file management for custom applications designed around working with
4//! [Nitrokey NetHSM] devices or containers.
5//! Configuration settings allow for individualizing the configuration use and its use-cases
6//! (interactive or non-interactive).
7//!
8//! A module for interactive prompts provides extra convenience around creating applications that
9//! may request further data from their users interactively.
10//!
11//! # Examples
12//!
13//! ```
14//! use nethsm::{ConnectionSecurity, UserRole};
15//! use nethsm_config::{Config, ConfigCredentials, ConfigInteractivity, ConfigSettings};
16//!
17//! # fn main() -> testresult::TestResult {
18//! // a configuration for a non-interactive application called "my_app"
19//! let config_settings = ConfigSettings::new(
20//!     "my_app".to_string(),
21//!     ConfigInteractivity::NonInteractive,
22//!     None,
23//! );
24//!
25//! // let's assume a custom configuration file path
26//! let tmpfile = testdir::testdir!().join("my_app.conf");
27//! let config = Config::new(config_settings, Some(&tmpfile))?;
28//!
29//! // add a first device to commnicate with
30//! config.add_device(
31//!     "nethsm1".to_string(),
32//!     "https://example.org/api/v1".parse()?,
33//!     ConnectionSecurity::Unsafe,
34//! )?;
35//!
36//! // add credentials to communicate with the the device
37//! config.add_credentials(
38//!     "nethsm1".to_string(),
39//!     ConfigCredentials::new(
40//!         UserRole::Administrator,
41//!         "admin1".parse()?,
42//!         Some("my-passphrase".to_string()),
43//!     ),
44//! )?;
45//!
46//! // write configuration to file
47//! config.store(Some(&tmpfile))?;
48//! # Ok(())
49//! # }
50//! ```
51//! [Nitrokey NetHSM]: https://docs.nitrokey.com/nethsm/
52mod config;
53mod credentials;
54mod mapping;
55mod prompt;
56
57pub use config::{
58    AdministrativeSecretHandling,
59    Config,
60    ConfigInteractivity,
61    ConfigName,
62    ConfigSettings,
63    DeviceConfig,
64    Error,
65    HermeticParallelConfig,
66    NonAdministrativeSecretHandling,
67};
68pub use credentials::{
69    AuthorizedKeyEntry,
70    AuthorizedKeyEntryList,
71    ConfigCredentials,
72    SystemUserId,
73    SystemWideUserId,
74};
75pub use mapping::{ExtendedUserMapping, NetHsmMetricsUsers, UserMapping};
76pub use prompt::{PassphrasePrompt, UserPrompt};