Skip to main content

im_core/internal/secret_vault/
policy.rs

1use 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}