arclutevests/
lib.rs

1// Copyright (c) 2022 arclutevests developers
2//
3// Licensed under the Apache License, Version 2.0
4// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT
5// license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. All files in the project carrying such notice may not be copied,
7// modified, or distributed except according to those terms.
8
9//! Arc Lute Vests - Load secrets from vault
10//!
11//! # Example
12#![cfg_attr(
13    not(feature = "wrapped"),
14    doc = r##" 
15```no_run
16# use anyhow::Result;
17# use arclutevests::{secrets, Config};
18# use serde::Deserialize;
19# use uuid::uuid;
20#
21#[derive(Clone, Debug, Deserialize)]
22struct TestData {
23    test_data: String,
24}
25#
26#[tokio::main]
27async fn main() -> Result<()> {
28#    let uuid = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe38");
29#    let config = Config::builder()
30#        .vault_base_url("https://vault.allthetyme.info:8200/v1/")
31#        .app_role("test")
32#        .secrets_path("test/data/config")
33#        .role_id(uuid)
34#        .wrapping_token("")
35#        .build();
36    let test_data: TestData = secrets(&config).await?;
37    assert_eq!(test_data.test_data, "this isn't really secret");
38#    let uuid_bad = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe37");
39#    let config_bad = Config::builder()
40#        .vault_base_url("https://vault.allthetyme.info:8200/v1/")
41#        .app_role("test")
42#        .secrets_path("test/data/config")
43#        .role_id(uuid)
44#        .wrapping_token("")
45#        .build();
46#
47    match secrets::<TestData>(&config_bad).await {
48        Ok(_) => assert!(false, "This shouldn't happen"),
49        Err(e) => assert!(format!("{e}").starts_with("uri: /v1/s/error/authfailed, title: Authentication Failed, status: 500, detail: Vault was unable to authenticate the client")),
50    }
51    Ok(())
52}
53```
54"##
55)]
56#![cfg_attr(
57    feature = "wrapped",
58    doc = r##"
59```
60# use anyhow::Result;
61# use arclutevests::{secrets, Config};
62# use serde::Deserialize;
63# use uuid::uuid;
64#
65#[derive(Clone, Debug, Deserialize)]
66struct TestData {
67    test_data: String,
68}
69#
70#[tokio::main]
71async fn main() -> Result<()> {
72#    let uuid = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe38");
73#    let config = Config::builder()
74#        .vault_base_url("https://vault.allthetyme.info:8200/v1/")
75#        .app_role("test")
76#        .secrets_path("test/data/config")
77#        .role_id(uuid)
78#        .toad_base_url("https://toad.allthetyme.info:8443/")
79#        .build();
80    let test_data: TestData = secrets(&config).await?;
81    assert_eq!(test_data.test_data, "this isn't really secret");
82#    let uuid_bad = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe37");
83#    let config_bad = Config::builder()
84#        .vault_base_url("https://vault.allthetyme.info:8200/v1/")
85#        .app_role("test")
86#        .secrets_path("test/data/config")
87#        .role_id(uuid_bad)
88#        .toad_base_url("https://toad.allthetyme.info:8443/")
89#        .build();
90#
91    match secrets::<TestData>(&config_bad).await {
92        Ok(_) => assert!(false, "This shouldn't happen"),
93        Err(e) => assert!(format!("{e}").starts_with("uri: /v1/s/error/authfailed, title: Authentication Failed, status: 500, detail: Vault was unable to authenticate the client")),
94    }
95    Ok(())
96}
97```
98"##
99)]
100// rustc lints
101#![deny(
102    absolute_paths_not_starting_with_crate,
103    anonymous_parameters,
104    array_into_iter,
105    asm_sub_register,
106    bad_asm_style,
107    bare_trait_objects,
108    bindings_with_variant_name,
109    box_pointers,
110    break_with_label_and_loop,
111    clashing_extern_declarations,
112    coherence_leak_check,
113    confusable_idents,
114    const_evaluatable_unchecked,
115    const_item_mutation,
116    dead_code,
117    deprecated,
118    deprecated_in_future,
119    deprecated_where_clause_location,
120    deref_into_dyn_supertrait,
121    deref_nullptr,
122    drop_bounds,
123    duplicate_macro_attributes,
124    dyn_drop,
125    elided_lifetimes_in_paths,
126    ellipsis_inclusive_range_patterns,
127    explicit_outlives_requirements,
128    exported_private_dependencies,
129    // Unstable
130    // ffi_unwind_calls,
131    forbidden_lint_groups,
132    function_item_references,
133    // Unstable
134    // fuzzy_provenance_casts,
135    illegal_floating_point_literal_pattern,
136    improper_ctypes,
137    improper_ctypes_definitions,
138    incomplete_features,
139    indirect_structural_match,
140    inline_no_sanitize,
141    invalid_doc_attributes,
142    invalid_value,
143    irrefutable_let_patterns,
144    keyword_idents,
145    large_assignments,
146    late_bound_lifetime_arguments,
147    legacy_derive_helpers,
148    let_underscore_drop,
149    // Unstable
150    // lossy_provenance_casts,
151    macro_use_extern_crate,
152    meta_variable_misuse,
153    missing_abi,
154    missing_copy_implementations,
155    missing_debug_implementations,
156    missing_docs,
157    mixed_script_confusables,
158    // Unstable
159    // must_not_suspend,
160    named_arguments_used_positionally,
161    no_mangle_generic_items,
162    non_ascii_idents,
163    non_camel_case_types,
164    // Unstable
165    // non_exhaustive_omitted_patterns,
166    non_fmt_panics,
167    non_shorthand_field_patterns,
168    non_snake_case,
169    non_upper_case_globals,
170    nontrivial_structural_match,
171    noop_method_call,
172    overlapping_range_endpoints,
173    path_statements,
174    pointer_structural_match,
175    private_in_public,
176    redundant_semicolons,
177    renamed_and_removed_lints,
178    repr_transparent_external_private_fields,
179    rust_2021_incompatible_closure_captures,
180    rust_2021_incompatible_or_patterns,
181    rust_2021_prefixes_incompatible_syntax,
182    rust_2021_prelude_collisions,
183    semicolon_in_expressions_from_macros,
184    single_use_lifetimes,
185    special_module_name,
186    stable_features,
187    suspicious_auto_trait_impls,
188    temporary_cstring_as_ptr,
189    trivial_bounds,
190    trivial_casts,
191    trivial_numeric_casts,
192    type_alias_bounds,
193    tyvar_behind_raw_pointer,
194    uncommon_codepoints,
195    unconditional_recursion,
196    unexpected_cfgs,
197    // Unstable
198    // unfulfilled_lint_expectations,
199    uninhabited_static,
200    unknown_lints,
201    unnameable_test_items,
202    unreachable_code,
203    unreachable_patterns,
204    unreachable_pub,
205    unsafe_code,
206    unsafe_op_in_unsafe_fn,
207    unstable_features,
208    unstable_name_collisions,
209    unstable_syntax_pre_expansion,
210    unsupported_calling_conventions,
211    unused_allocation,
212    unused_assignments,
213    unused_attributes,
214    unused_braces,
215    unused_comparisons,
216    unused_crate_dependencies,
217    unused_doc_comments,
218    unused_extern_crates,
219    unused_features,
220    unused_import_braces,
221    unused_imports,
222    unused_labels,
223    unused_lifetimes,
224    unused_macro_rules,
225    unused_macros,
226    unused_must_use,
227    unused_mut,
228    unused_parens,
229    unused_qualifications,
230    unused_results,
231    unused_tuple_struct_fields,
232    unused_unsafe,
233    unused_variables,
234    variant_size_differences,
235    where_clauses_object_safety,
236    while_true
237)]
238// nightly only lints
239// #![cfg_attr(nightly_lints, deny())]
240// nightly or beta only lints
241#![cfg_attr(
242    any(beta_lints, nightly_lints),
243    deny(for_loops_over_fallibles, opaque_hidden_inferred_bound,)
244)]
245// beta only lints
246// #![cfg_attr(beta_lints, deny())]
247// beta or stable only lints
248// #![cfg_attr( any(beta_lints, stable_lints), deny())]
249// stable only lints
250// #![cfg_attr(stable_lints, deny())]
251// clippy lints
252#![deny(clippy::all, clippy::pedantic)]
253// rustdoc lints
254#![deny(
255    rustdoc::bare_urls,
256    rustdoc::broken_intra_doc_links,
257    rustdoc::invalid_codeblock_attributes,
258    rustdoc::invalid_html_tags,
259    rustdoc::missing_crate_level_docs,
260    // Unstable
261    // rustdoc::missing_doc_code_examples,
262    rustdoc::private_doc_tests,
263    rustdoc::private_intra_doc_links
264)]
265
266mod constants;
267mod error;
268mod model;
269mod secrets;
270mod util;
271
272// used in doctests
273use tokio as _;
274
275pub use error::Error;
276pub use model::config::Config;
277pub use secrets::secrets;