Skip to main content

trellis_auth/
protocol.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7/// Registry bucket metadata for a jobs binding.
8pub struct JobsRegistry {
9    pub bucket: String,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
13/// Jobs resource bindings attached to an installed service contract.
14pub struct JobsBindings {
15    pub namespace: String,
16    pub queues: BTreeMap<String, Value>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub registry: Option<JobsRegistry>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
22/// Resource bindings granted to an installed service contract.
23pub struct ResourceBindings {
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub jobs: Option<JobsBindings>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub kv: Option<BTreeMap<String, Value>>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
31/// Canonical approval scope recorded for one contract digest.
32pub struct ApprovalScopeRecord {
33    pub capabilities: Vec<String>,
34    #[serde(rename = "contractDigest")]
35    pub contract_digest: String,
36    #[serde(rename = "contractId")]
37    pub contract_id: String,
38    pub description: String,
39    #[serde(rename = "displayName")]
40    pub display_name: String,
41    pub kind: String,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
45/// Stored approval decision for one user and contract digest.
46pub struct ApprovalEntryRecord {
47    pub answer: Value,
48    #[serde(rename = "answeredAt")]
49    pub answered_at: String,
50    pub approval: ApprovalScopeRecord,
51    #[serde(rename = "updatedAt")]
52    pub updated_at: String,
53    pub user: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57/// Service record returned by `Auth.ListServices`.
58pub struct ServiceListEntry {
59    pub active: bool,
60    pub capabilities: Vec<String>,
61    #[serde(rename = "contractDigest")]
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub contract_digest: Option<String>,
64    #[serde(rename = "contractId")]
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub contract_id: Option<String>,
67    #[serde(rename = "createdAt")]
68    pub created_at: String,
69    pub description: String,
70    #[serde(rename = "displayName")]
71    pub display_name: String,
72    pub namespaces: Vec<String>,
73    #[serde(rename = "resourceBindings")]
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub resource_bindings: Option<ResourceBindings>,
76    #[serde(rename = "sessionKey")]
77    pub session_key: String,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
81/// User record returned by `Auth.Me`.
82pub struct AuthenticatedUser {
83    pub active: bool,
84    pub capabilities: Vec<String>,
85    pub email: String,
86    pub id: String,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub image: Option<String>,
89    #[serde(rename = "lastLogin")]
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub last_login: Option<String>,
92    pub name: String,
93    pub origin: String,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
97/// Sentinel credentials returned alongside a successful bind.
98pub struct SentinelCredsRecord {
99    pub jwt: String,
100    pub seed: String,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
104/// Response payload returned by `Auth.RenewBindingToken`.
105pub struct RenewBindingTokenResponse {
106    #[serde(rename = "bindingToken")]
107    pub binding_token: String,
108    pub expires: String,
109    #[serde(rename = "inboxPrefix")]
110    pub inbox_prefix: String,
111    #[serde(rename = "natsServers")]
112    pub nats_servers: Vec<String>,
113    pub sentinel: SentinelCredsRecord,
114    pub status: String,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
118/// Filter parameters for `Auth.ListApprovals`.
119pub struct ListApprovalsRequest {
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub digest: Option<String>,
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub user: Option<String>,
124}
125
126#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
127/// Request payload for `Auth.RevokeApproval`.
128pub struct RevokeApprovalRequest {
129    #[serde(rename = "contractDigest")]
130    pub contract_digest: String,
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub user: Option<String>,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
136/// Request payload for `Auth.InstallService`.
137pub struct AuthInstallServiceRequest {
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub active: Option<bool>,
140    pub contract: BTreeMap<String, Value>,
141    pub description: String,
142    #[serde(rename = "displayName")]
143    pub display_name: String,
144    pub namespaces: Vec<String>,
145    #[serde(rename = "sessionKey")]
146    pub session_key: String,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
150/// Response payload for `Auth.InstallService`.
151pub struct AuthInstallServiceResponse {
152    #[serde(rename = "contractDigest")]
153    pub contract_digest: String,
154    #[serde(rename = "contractId")]
155    pub contract_id: String,
156    #[serde(rename = "resourceBindings")]
157    pub resource_bindings: ResourceBindings,
158    #[serde(rename = "sessionKey")]
159    pub session_key: String,
160    pub success: bool,
161}
162
163#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
164/// Request payload for `Auth.UpgradeServiceContract`.
165pub struct AuthUpgradeServiceContractRequest {
166    pub contract: BTreeMap<String, Value>,
167    #[serde(rename = "sessionKey")]
168    pub session_key: String,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
172/// Response payload for `Auth.UpgradeServiceContract`.
173pub struct AuthUpgradeServiceContractResponse {
174    #[serde(rename = "contractDigest")]
175    pub contract_digest: String,
176    #[serde(rename = "contractId")]
177    pub contract_id: String,
178    #[serde(rename = "resourceBindings")]
179    pub resource_bindings: ResourceBindings,
180    #[serde(rename = "sessionKey")]
181    pub session_key: String,
182    pub success: bool,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
186/// Request payload for `Auth.GetInstalledContract`.
187pub struct AuthGetInstalledContractRequest {
188    pub digest: String,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
192/// Contract summary returned by `Auth.GetInstalledContract`.
193pub struct AuthGetInstalledContractResponseContract {
194    pub digest: String,
195    pub id: String,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
199/// Response payload for `Auth.GetInstalledContract`.
200pub struct AuthGetInstalledContractResponse {
201    pub contract: AuthGetInstalledContractResponseContract,
202}
203
204#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
205/// Request payload for `Auth.ValidateRequest`.
206pub struct AuthValidateRequestRequest {
207    pub capabilities: Option<Vec<String>>,
208    #[serde(rename = "payloadHash")]
209    pub payload_hash: String,
210    pub proof: String,
211    #[serde(rename = "sessionKey")]
212    pub session_key: String,
213    pub subject: String,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
217/// Response payload returned by `Auth.ValidateRequest`.
218pub struct AuthValidateRequestResponse {
219    pub allowed: bool,
220    pub caller: Value,
221    #[serde(rename = "inboxPrefix")]
222    pub inbox_prefix: String,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
226pub(crate) struct ListApprovalsResponse {
227    pub approvals: Vec<ApprovalEntryRecord>,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
231pub(crate) struct ListServicesResponse {
232    pub services: Vec<ServiceListEntry>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
236pub(crate) struct LogoutResponse {
237    pub success: bool,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
241pub(crate) struct MeResponse {
242    pub user: AuthenticatedUser,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
246pub(crate) struct RevokeApprovalResponse {
247    pub success: bool,
248}