haste_server/auth_n/certificates/
mod.rs1use serde::{Deserialize, Serialize};
2use std::sync::{Arc, OnceLock};
3
4use crate::config::ServerConfig;
5
6pub mod providers;
7pub mod traits;
8
9#[derive(Serialize, Deserialize, Debug)]
10pub enum JSONWebKeyAlgorithm {
11 RS256,
12}
13
14#[derive(Serialize, Deserialize, Debug)]
15pub enum JSONWebKeyType {
16 RSA,
17}
18
19#[derive(Serialize, Deserialize, Debug)]
20pub struct JSONWebKey {
21 pub kid: String,
22
23 pub alg: JSONWebKeyAlgorithm,
24 pub kty: JSONWebKeyType,
25 pub e: String,
27 pub n: String,
28 pub x5t: Option<String>,
29}
30
31#[derive(Serialize, Deserialize, Debug)]
32pub struct JSONWebKeySet {
33 pub keys: Vec<JSONWebKey>,
34}
35
36static CERTIFICATION_PROVIDER: OnceLock<Arc<dyn traits::CertificationProvider>> = OnceLock::new();
37
38pub fn get_certification_provider(config: &ServerConfig) -> Arc<dyn traits::CertificationProvider> {
39 CERTIFICATION_PROVIDER
40 .get_or_init(|| {
41 Arc::new(
42 providers::local::LocalCertifications::new(config)
43 .expect("Failed to create LocalCertifications"),
44 ) as Arc<dyn traits::CertificationProvider>
45 })
46 .clone()
47}