im_core/internal/secret_vault/
policy.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
4pub struct SecretAccessPolicy {
5 pub no_prompt: bool,
6 pub user_presence_required: bool,
7 pub exportable: bool,
8 pub cache_ttl_seconds: Option<u64>,
9}
10
11impl SecretAccessPolicy {
12 pub fn no_prompt_local_secret() -> Self {
13 Self {
14 no_prompt: true,
15 user_presence_required: false,
16 exportable: false,
17 cache_ttl_seconds: None,
18 }
19 }
20
21 pub fn validate_no_prompt(&self) -> crate::ImResult<()> {
22 if !self.no_prompt || self.user_presence_required {
23 return Err(crate::ImError::unsupported(
24 "secret vault record requires user presence; awiki vault access must be no-prompt",
25 ));
26 }
27 Ok(())
28 }
29}