30 lines
910 B
Rust
30 lines
910 B
Rust
use rustls::server::ClientCertVerifier;
|
|
|
|
use crate::{prelude::CertificateStore, mailuser::Mailuser};
|
|
use std::sync::Mutex;
|
|
|
|
#[derive(Debug)]
|
|
pub struct Verifier<S: FingerPrintStore> {
|
|
pub store: Mutex<S>,
|
|
}
|
|
|
|
pub trait FingerPrintStore: Send + Sync {
|
|
fn get_mailuser(&self, fingerprint: &str) -> Option<Mailuser>;
|
|
fn insert_mailuser(&mut self, fingerprint: &str, user: &str) -> Option<Mailuser>;
|
|
fn contains_mailuser(&self, fingerprint: &str) -> bool;
|
|
}
|
|
|
|
impl<S: FingerPrintStore> ClientCertVerifier for Verifier<S> {
|
|
fn client_auth_root_subjects(&self) -> &[rustls::DistinguishedName] {
|
|
todo!()
|
|
}
|
|
|
|
fn verify_client_cert(
|
|
&self,
|
|
end_entity: &rustls::Certificate,
|
|
intermediates: &[rustls::Certificate],
|
|
now: std::time::SystemTime,
|
|
) -> Result<rustls::server::ClientCertVerified, rustls::Error> {
|
|
todo!()
|
|
}
|
|
}
|