Skip to main content

haste_server/auth_n/certificates/
mod.rs

1use 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    // Base64 URL SAFE
26    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}