architect_api/auth/
mod.rs

1use crate::UserId;
2use chrono::{DateTime, Utc};
3use derive::grpc;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7pub mod grants;
8pub mod jwt;
9pub mod user_id;
10
11pub use grants::Grants;
12
13/// Create a session JWT to use for authentication with upstream gRPC services.
14///
15/// If grants are not specified, the JWT will be created with the same grants as the API key.
16#[grpc(package = "json.architect")]
17#[grpc(service = "Auth", name = "create_jwt", response = "CreateJwtResponse")]
18#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
19pub struct CreateJwtRequest {
20    pub api_key: String,
21    pub api_secret: String,
22    #[serde(default, skip_serializing_if = "Option::is_none")]
23    pub grants: Option<Grants>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
27pub struct CreateJwtResponse {
28    pub jwt: String,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
32pub struct AuthInfoRequest {}
33
34#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
35pub struct AuthInfoResponse {
36    pub user_id: Option<UserId>,
37    pub original_user_id: Option<UserId>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
41pub struct LicenseInfoRequest {}
42
43#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
44pub struct LicenseInfoResponse {
45    pub subject: String,
46    /// PEM-encoded public key
47    pub pubkey: String,
48    pub not_before: DateTime<Utc>,
49    pub not_after: DateTime<Utc>,
50}