passless_rs/storage/
mod.rs1pub mod credential;
6pub mod index;
7pub mod local;
8pub mod pass;
9mod pass_refresh;
10pub mod rp_id;
11#[cfg(feature = "tpm")]
12pub mod tpm;
13
14#[allow(unused_imports)]
16pub(crate) use credential::Credential;
17pub use local::LocalStorageAdapter;
18pub use pass_refresh::PassStorageAdapter;
19pub use rp_id::ValidatedRpId;
20#[cfg(feature = "tpm")]
21pub use tpm::TpmStorageAdapter;
22
23use soft_fido2::Result;
24
25#[derive(Debug, Clone)]
27pub enum CredentialFilter {
28 None,
30 #[allow(dead_code)]
32 ById(Vec<u8>),
33 ByRp(String),
35 #[allow(dead_code)]
37 ByHash([u8; 32]),
38}
39
40pub trait CredentialStorage: Send + Sync {
44 fn read_first(&mut self, filter: CredentialFilter) -> Result<soft_fido2::Credential>;
46
47 fn read_next(&mut self) -> Result<soft_fido2::Credential>;
49
50 fn read(&mut self, id: &[u8]) -> Result<soft_fido2::Credential>;
52
53 fn write(&mut self, cred: soft_fido2::CredentialRef) -> Result<()>;
55
56 fn delete(&mut self, id: &[u8]) -> Result<()>;
58
59 fn count_credentials(&self) -> usize;
61
62 fn disable_user_verification(&self) -> bool {
71 false
72 }
73
74 fn cleanup_expired_cache(&mut self) {
85 }
87}
88
89impl CredentialStorage for Box<dyn CredentialStorage> {
90 fn read_first(&mut self, filter: CredentialFilter) -> Result<soft_fido2::Credential> {
91 (**self).read_first(filter)
92 }
93
94 fn read_next(&mut self) -> Result<soft_fido2::Credential> {
95 (**self).read_next()
96 }
97
98 fn read(&mut self, id: &[u8]) -> Result<soft_fido2::Credential> {
99 (**self).read(id)
100 }
101
102 fn write(&mut self, cred: soft_fido2::CredentialRef) -> Result<()> {
103 (**self).write(cred)
104 }
105
106 fn delete(&mut self, id: &[u8]) -> Result<()> {
107 (**self).delete(id)
108 }
109
110 fn count_credentials(&self) -> usize {
111 (**self).count_credentials()
112 }
113
114 fn disable_user_verification(&self) -> bool {
115 (**self).disable_user_verification()
116 }
117
118 fn cleanup_expired_cache(&mut self) {
119 (**self).cleanup_expired_cache()
120 }
121}