Skip to main content

vault_client_rs/
lib.rs

1//! Async and blocking Rust client for the [HashiCorp Vault](https://www.vaultproject.io/) HTTP API
2//!
3//! ```rust,no_run
4//! use vault_client_rs::{VaultClient, Kv2Operations};
5//!
6//! # async fn example() -> Result<(), vault_client_rs::VaultError> {
7//! let client = VaultClient::new("https://vault.example.com:8200", "hvs.EXAMPLE")?;
8//!
9//! // KV v2: read secret data directly
10//! let secret: std::collections::HashMap<String, String> =
11//!     client.kv2("secret").read_data("my/path").await?;
12//!
13//! // Sys
14//! let health = client.sys().health().await?;
15//! # Ok(())
16//! # }
17//! ```
18//!
19//! # Feature flags
20//!
21//! | Flag | Effect |
22//! |------|--------|
23//! | `blocking` | Enables [`blocking::BlockingVaultClient`] |
24//! | `auto-renew` | Enables [`RenewalDaemon`] and [`LeaseWatcher`] for background token/lease lifecycle |
25
26pub mod api;
27pub(crate) mod circuit_breaker;
28pub mod client;
29pub mod types;
30
31#[cfg(feature = "blocking")]
32pub mod blocking;
33
34#[cfg(feature = "auto-renew")]
35pub mod renewal;
36
37pub use circuit_breaker::CircuitBreakerConfig;
38pub use client::{ClientBuilder, VaultClient, encode_path};
39pub use types::error::VaultError;
40pub use types::redaction::{RedactionLevel, redact, redaction_level, set_redaction_level};
41
42#[cfg(feature = "auto-renew")]
43pub use renewal::{LeaseEvent, LeaseWatcher, RenewalDaemon};
44
45// Handler types (returned by VaultClient accessor methods)
46pub use api::auth::approle::AppRoleAuthHandler;
47pub use api::auth::aws::AwsAuthHandler;
48pub use api::auth::azure::AzureAuthHandler;
49pub use api::auth::cert::CertAuthHandler;
50pub use api::auth::gcp::GcpAuthHandler;
51pub use api::auth::github::GithubAuthHandler;
52pub use api::auth::kerberos::KerberosAuthHandler;
53pub use api::auth::kubernetes::K8sAuthHandler;
54pub use api::auth::ldap::LdapAuthHandler;
55pub use api::auth::oidc::OidcAuthHandler;
56pub use api::auth::radius::RadiusAuthHandler;
57pub use api::auth::token::TokenAuthHandler;
58pub use api::auth::userpass::UserpassAuthHandler;
59pub use api::auth::{
60    AppRoleLogin, AuthHandler, AuthMethod, AwsLogin, AzureLogin, GcpLogin, GithubLogin, JwtLogin,
61    K8sLogin, LdapLogin, UserpassLogin,
62};
63pub use api::aws::AwsSecretsHandler;
64pub use api::azure::AzureHandler;
65pub use api::consul::ConsulHandler;
66pub use api::cubbyhole::CubbyholeHandler;
67pub use api::database::DatabaseHandler;
68pub use api::gcp::GcpHandler;
69pub use api::identity::IdentityHandler;
70pub use api::kv1::Kv1Handler;
71pub use api::kv2::Kv2Handler;
72pub use api::nomad::NomadHandler;
73pub use api::pki::PkiHandler;
74pub use api::rabbitmq::RabbitmqHandler;
75pub use api::ssh::SshHandler;
76pub use api::sys::SysHandler;
77pub use api::terraform::TerraformCloudHandler;
78pub use api::totp::TotpHandler;
79pub use api::transit::TransitHandler;
80
81// Mockability traits
82pub use api::traits::{
83    AppRoleAuthOperations, AwsAuthOperations, AwsSecretsOperations, AzureAuthOperations,
84    AzureSecretsOperations, CertAuthOperations, ConsulOperations, CubbyholeOperations,
85    DatabaseOperations, GcpAuthOperations, GcpSecretsOperations, GithubAuthOperations,
86    IdentityOperations, K8sAuthOperations, KerberosAuthOperations, Kv1Operations, Kv2Operations,
87    LdapAuthOperations, NomadOperations, OidcAuthOperations, PkiOperations, RabbitmqOperations,
88    RadiusAuthOperations, SshOperations, SysOperations, TerraformCloudOperations,
89    TokenAuthOperations, TotpOperations, TransitOperations, UserpassAuthOperations,
90};
91
92pub use types::kv::{
93    KvConfig, KvFullMetadata, KvMetadata, KvMetadataParams, KvReadResponse, KvVersionMetadata,
94};
95pub use types::response::{AuthInfo, VaultResponse, WrapInfo};
96pub use types::secret::{MountPath, SecretPath, SecretString};
97
98// Transit types
99pub use types::transit::{
100    TransitBatchCiphertext, TransitBatchDecryptItem, TransitBatchPlaintext, TransitBatchSignInput,
101    TransitBatchSignResult, TransitBatchVerifyInput, TransitBatchVerifyResult, TransitCacheConfig,
102    TransitDataKey, TransitExportedKey, TransitKeyConfig, TransitKeyInfo, TransitKeyParams,
103    TransitSignParams,
104};
105
106// PKI types
107pub use types::pki::{
108    PkiAcmeConfig, PkiCertificate, PkiCertificateEntry, PkiCrossSignRequest, PkiCsr,
109    PkiImportResult, PkiIntermediateParams, PkiIssueParams, PkiIssuedCert, PkiIssuerInfo,
110    PkiIssuerUpdateParams, PkiRevocationInfo, PkiRole, PkiRoleParams, PkiRootParams, PkiSignParams,
111    PkiSignedCert, PkiTidyParams, PkiTidyStatus, PkiUrlsConfig,
112};
113
114// Auth types
115pub use types::auth::{
116    AppRoleCreateRequest, AppRoleInfo, AppRoleSecretIdResponse, CertRoleInfo, CertRoleRequest,
117    GithubConfig, GithubConfigRequest, GithubTeamInfo, GithubTeamMapping, K8sAuthConfigRequest,
118    K8sAuthRoleInfo, K8sAuthRoleRequest, KerberosConfig, KerberosConfigRequest, KerberosGroup,
119    KerberosGroupRequest, KerberosLdapConfig, KerberosLdapConfigRequest, LdapConfig,
120    LdapConfigRequest, LdapGroup, LdapGroupRequest, LdapUser, LdapUserRequest, OidcConfig,
121    OidcConfigRequest, OidcRoleInfo, OidcRoleRequest, RadiusConfig, RadiusConfigRequest,
122    RadiusUser, RadiusUserRequest, TokenCreateRequest, TokenLookupResponse, UserpassUserInfo,
123    UserpassUserRequest,
124};
125
126// Sys types
127pub use types::sys::{
128    AuditDevice, AuditParams, AuthMountInfo, AuthMountParams, AutopilotServerState, AutopilotState,
129    GenerateRootInitRequest, GenerateRootStatus, HealthResponse, HostInfo, InFlightRequest,
130    InitParams, InitResponse, KeyStatus, LeaderResponse, LeaseInfo, LeaseRenewal, MountConfig,
131    MountInfo, MountParams, MountTuneParams, NamespaceInfo, PluginInfo, PolicyInfo, RaftConfig,
132    RaftServer, RateLimitQuota, RateLimitQuotaRequest, RegisterPluginRequest, RekeyInitRequest,
133    RekeyStatus, RemountStatus, SealStatus, VersionHistoryEntry,
134};
135
136// AWS types
137pub use types::aws::{
138    AwsAuthConfig, AwsAuthConfigRequest, AwsAuthLoginRequest, AwsAuthRoleInfo, AwsAuthRoleRequest,
139    AwsConfigRoot, AwsConfigRootRequest, AwsCredentials, AwsRole, AwsRoleRequest, AwsStsRequest,
140};
141
142// Azure types
143pub use types::azure::{
144    AzureAuthConfig, AzureAuthConfigRequest, AzureAuthLoginRequest, AzureAuthRoleInfo,
145    AzureAuthRoleRequest, AzureConfig, AzureConfigRequest, AzureCredentials, AzureRole,
146    AzureRoleRequest,
147};
148
149// GCP types
150pub use types::gcp::{
151    GcpAuthConfig, GcpAuthConfigRequest, GcpAuthRoleInfo, GcpAuthRoleRequest, GcpConfig,
152    GcpConfigRequest, GcpOAuthToken, GcpRoleset, GcpRolesetRequest, GcpServiceAccountKey,
153};
154
155// Database types
156pub use types::database::{
157    DatabaseConfig, DatabaseConfigRequest, DatabaseCredentials, DatabaseRole, DatabaseRoleRequest,
158    DatabaseStaticCredentials, DatabaseStaticRole, DatabaseStaticRoleRequest,
159};
160
161// SSH types
162pub use types::ssh::{
163    SshCaConfigRequest, SshCaPublicKey, SshRole, SshRoleRequest, SshSignRequest, SshSignedKey,
164    SshVerifyRequest, SshVerifyResponse,
165};
166
167// Identity types
168pub use types::identity::{
169    Entity, EntityAlias, EntityAliasCreateRequest, EntityAliasResponse, EntityCreateRequest, Group,
170    GroupAlias, GroupAliasCreateRequest, GroupAliasResponse, GroupCreateRequest,
171};
172
173// TOTP types
174pub use types::totp::{
175    TotpCode, TotpGenerateResponse, TotpKeyInfo, TotpKeyRequest, TotpValidation,
176};
177
178// Consul types
179pub use types::consul::{
180    ConsulConfig, ConsulConfigRequest, ConsulCredentials, ConsulRole, ConsulRoleRequest,
181};
182
183// Nomad types
184pub use types::nomad::{
185    NomadConfig, NomadConfigRequest, NomadCredentials, NomadRole, NomadRoleRequest,
186};
187
188// RabbitMQ types
189pub use types::rabbitmq::{
190    RabbitmqConfigRequest, RabbitmqCredentials, RabbitmqRole, RabbitmqRoleRequest,
191};
192
193// Terraform Cloud types
194pub use types::terraform::{
195    TerraformCloudConfig, TerraformCloudConfigRequest, TerraformCloudRole,
196    TerraformCloudRoleRequest, TerraformCloudToken,
197};