Skip to main content

soma_auth/
config_machine_clients.rs

1//! Machine (client-credentials / private_key_jwt) client and enterprise
2//! JWT-bearer issuer configuration. Split out of `config.rs` to stay under
3//! the PATTERNS.md module size hard limit.
4use serde::{Deserialize, Serialize};
5use url::Url;
6
7#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct MachineClientConfig {
9    pub client_id: String,
10    #[serde(default)]
11    pub client_secret: Option<String>,
12    #[serde(default)]
13    pub jwks: Option<serde_json::Value>,
14    #[serde(default)]
15    pub scopes: Vec<String>,
16    #[serde(default)]
17    pub resources: Vec<String>,
18}
19
20impl std::fmt::Debug for MachineClientConfig {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        f.debug_struct("MachineClientConfig")
23            .field("client_id", &self.client_id)
24            .field(
25                "client_secret",
26                &self.client_secret.as_ref().map(|_| "<redacted>"),
27            )
28            .field("jwks", &self.jwks.as_ref().map(|_| "<configured>"))
29            .field("scopes", &self.scopes)
30            .field("resources", &self.resources)
31            .finish()
32    }
33}
34
35#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
36pub struct EnterpriseIssuerConfig {
37    pub issuer: String,
38    #[serde(default)]
39    pub jwks_uri: Option<Url>,
40    #[serde(default)]
41    pub jwks: Option<serde_json::Value>,
42    #[serde(default)]
43    pub allowed_client_ids: Vec<String>,
44}