@andrewheberle/serverless-ssh-ca 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/openapi.json +1391 -0
  2. package/package.json +6 -4
package/openapi.json ADDED
@@ -0,0 +1,1391 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Serverless SSH CA API",
5
+ "version": "3.0.0"
6
+ },
7
+ "components": {
8
+ "securitySchemes": {
9
+ "oidcAuth": {
10
+ "type": "http",
11
+ "scheme": "bearer",
12
+ "bearerFormat": "JWT"
13
+ }
14
+ },
15
+ "schemas": {
16
+ "Certificate Response": {
17
+ "type": "object",
18
+ "properties": {
19
+ "certificate": {
20
+ "type": "string",
21
+ "format": "byte",
22
+ "description": "Issued Certificate"
23
+ }
24
+ },
25
+ "required": [
26
+ "certificate"
27
+ ]
28
+ },
29
+ "User Certificate Request": {
30
+ "type": "object",
31
+ "properties": {
32
+ "public_key": {
33
+ "type": "string",
34
+ "format": "byte",
35
+ "description": "SSH public key to sign",
36
+ "example": "ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkdNcFNKdHRmMEl0dE5DVmMyOFR6WEZSMUQweHZPM25wNjdWemVBUXNiZFpza3JEY1lqU2x3SjZIUERtVHBYYVUwbEVhWDlMNFloYy9jQ2YxTWU5RlRrPQo="
37
+ },
38
+ "proof": {
39
+ "type": "string",
40
+ "description": "Proof of possession comprising of ${timestamp}.${fingerprint}.${signature}",
41
+ "example": "1765696780805.SHA256:79mq0wtpQMTvS4+Of8VzLN0qmYWNUyTXYmqKwhEgSLs.LS0tLS1CRUdJTiBTU0ggU0lHTkFUVVJFLS0tLS0KVTFOSVUwbEhBQUFBQVFBQUFHZ0FBQUFUWldOa2MyRXRjMmhoTWkxdWFYTjBjREkxTmdBQUFBaHVhWE4wY0RJMQpOZ0FBQUVFRUR6Ymk4OE10alBYSDFCb1JURU9HaS96aEc4QnhQNVZUUW5OQkFNMGZtMExtekErUUZkUlNVYVRFCkdNN2l0QjhINmZNZFAydlAxcElQcGUyOWVLQkJZd0FBQUFSbWFXeGxBQUFBQUFBQUFBWnphR0UxTVRJQUFBQmsKQUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUJKQUFBQUlHdmZVZGNDQkRXa3ZwL0ZHS3NkakgrRQpKZzZXN0EvWUJVZng2Z0srQ01raEFBQUFJUUQxOFd5cDNZejZ0eXNvdllXbEJHTXprRnlYbFRrSHM5blVVRXJqCkczNWVPQT09Ci0tLS0tRU5EIFNTSCBTSUdOQVRVUkUtLS0tLQo="
42
+ },
43
+ "identity": {
44
+ "type": "string",
45
+ "description": "Identity Token JWT from OIDC IdP",
46
+ "example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzc1NzAzMDk1fQ.ri_neAWnhMNK3LzlsrBcQYymSM4yRjmNSZZSeZiXhrEqtEz6c3cXk0Esq765umGjpUsWcosL-OFrDJlyAjTDnhrd9oV08uc_CW0rQRsJIGEuRo3ryxkLdVu9mGoZWEUb9KwjGJrwxvr-0cPWx5jaDyKwJcqMvtV_bEITUD51sDB1Vm89QfYRO_pGJo2vrRzSvMjpUenRpwPay4lYIBxl41_4YpR9Rc6VrIZuYsjV2iqEZ4eBrygMA7zPR_hN7l7s95FddLOzj5NsK57VT4uLHwYohx2oqMzw3M-B9HsZIQin_9q61pZFQXepzJth0woXiZheU27llnfHX967PhNQyg"
47
+ },
48
+ "extensions": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string"
52
+ },
53
+ "default": [
54
+ "permit-X11-forwarding",
55
+ "permit-agent-forwarding",
56
+ "permit-port-forwarding",
57
+ "permit-pty",
58
+ "permit-user-rc"
59
+ ],
60
+ "description": "Extensions to include in the issued SSH certificate"
61
+ },
62
+ "lifetime": {
63
+ "type": "integer",
64
+ "minimum": 300,
65
+ "maximum": 86400,
66
+ "default": 86400,
67
+ "description": "Lifetime of issued SSH certificate"
68
+ }
69
+ },
70
+ "required": [
71
+ "public_key",
72
+ "proof",
73
+ "identity"
74
+ ]
75
+ },
76
+ "Key Revocation List Response": {
77
+ "type": "object",
78
+ "properties": {
79
+ "krl": {
80
+ "type": "string",
81
+ "format": "byte",
82
+ "description": "Key Revocation List"
83
+ },
84
+ "signature": {
85
+ "type": "string"
86
+ }
87
+ },
88
+ "required": [
89
+ "krl",
90
+ "signature"
91
+ ]
92
+ },
93
+ "Host Certificate Request": {
94
+ "type": "object",
95
+ "properties": {
96
+ "public_key": {
97
+ "type": "string",
98
+ "format": "byte",
99
+ "description": "SSH public key to sign",
100
+ "example": "ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkdNcFNKdHRmMEl0dE5DVmMyOFR6WEZSMUQweHZPM25wNjdWemVBUXNiZFpza3JEY1lqU2x3SjZIUERtVHBYYVUwbEVhWDlMNFloYy9jQ2YxTWU5RlRrPQo="
101
+ },
102
+ "proof": {
103
+ "type": "string",
104
+ "description": "Proof of possession comprising of ${timestamp}.${fingerprint}.${signature}",
105
+ "example": "1765696780805.SHA256:79mq0wtpQMTvS4+Of8VzLN0qmYWNUyTXYmqKwhEgSLs.LS0tLS1CRUdJTiBTU0ggU0lHTkFUVVJFLS0tLS0KVTFOSVUwbEhBQUFBQVFBQUFHZ0FBQUFUWldOa2MyRXRjMmhoTWkxdWFYTjBjREkxTmdBQUFBaHVhWE4wY0RJMQpOZ0FBQUVFRUR6Ymk4OE10alBYSDFCb1JURU9HaS96aEc4QnhQNVZUUW5OQkFNMGZtMExtekErUUZkUlNVYVRFCkdNN2l0QjhINmZNZFAydlAxcElQcGUyOWVLQkJZd0FBQUFSbWFXeGxBQUFBQUFBQUFBWnphR0UxTVRJQUFBQmsKQUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUJKQUFBQUlHdmZVZGNDQkRXa3ZwL0ZHS3NkakgrRQpKZzZXN0EvWUJVZng2Z0srQ01raEFBQUFJUUQxOFd5cDNZejZ0eXNvdllXbEJHTXprRnlYbFRrSHM5blVVRXJqCkczNWVPQT09Ci0tLS0tRU5EIFNTSCBTSUdOQVRVUkUtLS0tLQo="
106
+ },
107
+ "identity": {
108
+ "type": "string",
109
+ "description": "Identity Token JWT from OIDC IdP",
110
+ "example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzc1NzAzMDk1fQ.ri_neAWnhMNK3LzlsrBcQYymSM4yRjmNSZZSeZiXhrEqtEz6c3cXk0Esq765umGjpUsWcosL-OFrDJlyAjTDnhrd9oV08uc_CW0rQRsJIGEuRo3ryxkLdVu9mGoZWEUb9KwjGJrwxvr-0cPWx5jaDyKwJcqMvtV_bEITUD51sDB1Vm89QfYRO_pGJo2vrRzSvMjpUenRpwPay4lYIBxl41_4YpR9Rc6VrIZuYsjV2iqEZ4eBrygMA7zPR_hN7l7s95FddLOzj5NsK57VT4uLHwYohx2oqMzw3M-B9HsZIQin_9q61pZFQXepzJth0woXiZheU27llnfHX967PhNQyg"
111
+ },
112
+ "principals": {
113
+ "type": "array",
114
+ "items": {
115
+ "type": "string"
116
+ },
117
+ "minItems": 1,
118
+ "description": "List of principals to include on the issued certificate"
119
+ },
120
+ "lifetime": {
121
+ "type": "integer",
122
+ "minimum": 86400,
123
+ "maximum": 2592000,
124
+ "default": 2592000,
125
+ "description": "Lifetime of issued Host SSH certificate"
126
+ }
127
+ },
128
+ "required": [
129
+ "public_key",
130
+ "proof",
131
+ "identity",
132
+ "principals"
133
+ ]
134
+ },
135
+ "Host Certificate Renew": {
136
+ "type": "object",
137
+ "properties": {
138
+ "certificate": {
139
+ "type": "string",
140
+ "format": "byte",
141
+ "description": "SSH certificate to renew"
142
+ },
143
+ "public_key": {
144
+ "type": "string",
145
+ "format": "byte",
146
+ "description": "SSH public key to sign",
147
+ "example": "ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkdNcFNKdHRmMEl0dE5DVmMyOFR6WEZSMUQweHZPM25wNjdWemVBUXNiZFpza3JEY1lqU2x3SjZIUERtVHBYYVUwbEVhWDlMNFloYy9jQ2YxTWU5RlRrPQo="
148
+ },
149
+ "proof": {
150
+ "type": "string",
151
+ "description": "Proof of possession comprising of ${timestamp}.${fingerprint}.${signature}",
152
+ "example": "1765696780805.SHA256:79mq0wtpQMTvS4+Of8VzLN0qmYWNUyTXYmqKwhEgSLs.LS0tLS1CRUdJTiBTU0ggU0lHTkFUVVJFLS0tLS0KVTFOSVUwbEhBQUFBQVFBQUFHZ0FBQUFUWldOa2MyRXRjMmhoTWkxdWFYTjBjREkxTmdBQUFBaHVhWE4wY0RJMQpOZ0FBQUVFRUR6Ymk4OE10alBYSDFCb1JURU9HaS96aEc4QnhQNVZUUW5OQkFNMGZtMExtekErUUZkUlNVYVRFCkdNN2l0QjhINmZNZFAydlAxcElQcGUyOWVLQkJZd0FBQUFSbWFXeGxBQUFBQUFBQUFBWnphR0UxTVRJQUFBQmsKQUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUJKQUFBQUlHdmZVZGNDQkRXa3ZwL0ZHS3NkakgrRQpKZzZXN0EvWUJVZng2Z0srQ01raEFBQUFJUUQxOFd5cDNZejZ0eXNvdllXbEJHTXprRnlYbFRrSHM5blVVRXJqCkczNWVPQT09Ci0tLS0tRU5EIFNTSCBTSUdOQVRVUkUtLS0tLQo="
153
+ },
154
+ "lifetime": {
155
+ "type": "integer",
156
+ "minimum": 86400,
157
+ "maximum": 2592000,
158
+ "default": 2592000,
159
+ "description": "Lifetime of renewed Host SSH certificate"
160
+ }
161
+ },
162
+ "required": [
163
+ "certificate",
164
+ "public_key",
165
+ "proof"
166
+ ]
167
+ },
168
+ "Revocation Response": {
169
+ "type": "object",
170
+ "properties": {
171
+ "revoked_at": {
172
+ "type": "string",
173
+ "format": "date-time"
174
+ }
175
+ },
176
+ "required": [
177
+ "revoked_at"
178
+ ]
179
+ },
180
+ "Certificate Revocation": {
181
+ "type": "object",
182
+ "properties": {
183
+ "serial": {
184
+ "type": "string",
185
+ "pattern": "^\\d+$",
186
+ "description": "Serial number of certificate to revoke",
187
+ "example": "12345678901234567890"
188
+ },
189
+ "public_key": {
190
+ "type": "string",
191
+ "format": "byte",
192
+ "description": "SSH public key to sign",
193
+ "example": "ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkdNcFNKdHRmMEl0dE5DVmMyOFR6WEZSMUQweHZPM25wNjdWemVBUXNiZFpza3JEY1lqU2x3SjZIUERtVHBYYVUwbEVhWDlMNFloYy9jQ2YxTWU5RlRrPQo="
194
+ },
195
+ "proof": {
196
+ "type": "string",
197
+ "description": "Proof of possession comprising of ${timestamp}.${fingerprint}.${signature}",
198
+ "example": "1765696780805.SHA256:79mq0wtpQMTvS4+Of8VzLN0qmYWNUyTXYmqKwhEgSLs.LS0tLS1CRUdJTiBTU0ggU0lHTkFUVVJFLS0tLS0KVTFOSVUwbEhBQUFBQVFBQUFHZ0FBQUFUWldOa2MyRXRjMmhoTWkxdWFYTjBjREkxTmdBQUFBaHVhWE4wY0RJMQpOZ0FBQUVFRUR6Ymk4OE10alBYSDFCb1JURU9HaS96aEc4QnhQNVZUUW5OQkFNMGZtMExtekErUUZkUlNVYVRFCkdNN2l0QjhINmZNZFAydlAxcElQcGUyOWVLQkJZd0FBQUFSbWFXeGxBQUFBQUFBQUFBWnphR0UxTVRJQUFBQmsKQUFBQUUyVmpaSE5oTFhOb1lUSXRibWx6ZEhBeU5UWUFBQUJKQUFBQUlHdmZVZGNDQkRXa3ZwL0ZHS3NkakgrRQpKZzZXN0EvWUJVZng2Z0srQ01raEFBQUFJUUQxOFd5cDNZejZ0eXNvdllXbEJHTXprRnlYbFRrSHM5blVVRXJqCkczNWVPQT09Ci0tLS0tRU5EIFNTSCBTSUdOQVRVUkUtLS0tLQo="
199
+ }
200
+ },
201
+ "required": [
202
+ "serial",
203
+ "public_key",
204
+ "proof"
205
+ ]
206
+ }
207
+ },
208
+ "parameters": {}
209
+ },
210
+ "paths": {
211
+ "/api/v3/ca": {
212
+ "get": {
213
+ "operationId": "get_ca",
214
+ "responses": {
215
+ "200": {
216
+ "description": "Returns SSH Certificate Authority Public Key",
217
+ "content": {
218
+ "text/plain": {
219
+ "schema": {
220
+ "type": "string"
221
+ }
222
+ }
223
+ }
224
+ },
225
+ "500": {
226
+ "description": "Internal Server Error",
227
+ "content": {
228
+ "application/json": {
229
+ "schema": {
230
+ "type": "object",
231
+ "properties": {
232
+ "success": {
233
+ "type": "boolean",
234
+ "enum": [
235
+ false
236
+ ]
237
+ },
238
+ "errors": {
239
+ "type": "array",
240
+ "items": {
241
+ "type": "object",
242
+ "properties": {
243
+ "code": {
244
+ "type": "number"
245
+ },
246
+ "message": {
247
+ "type": "string"
248
+ }
249
+ },
250
+ "required": [
251
+ "code",
252
+ "message"
253
+ ]
254
+ }
255
+ }
256
+ },
257
+ "required": [
258
+ "success",
259
+ "errors"
260
+ ]
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+ }
267
+ },
268
+ "/api/v3/user/certificate": {
269
+ "post": {
270
+ "security": [
271
+ {
272
+ "oidcAuth": []
273
+ }
274
+ ],
275
+ "operationId": "post_user_certificate",
276
+ "parameters": [
277
+ {
278
+ "schema": {
279
+ "type": "string",
280
+ "description": "Access Token JWT from OIDC IdP",
281
+ "example": "Bearer eyJ..."
282
+ },
283
+ "required": true,
284
+ "description": "Access Token JWT from OIDC IdP",
285
+ "name": "Authorization",
286
+ "in": "header"
287
+ }
288
+ ],
289
+ "requestBody": {
290
+ "content": {
291
+ "application/json": {
292
+ "schema": {
293
+ "$ref": "#/components/schemas/User Certificate Request"
294
+ }
295
+ }
296
+ }
297
+ },
298
+ "responses": {
299
+ "200": {
300
+ "description": "SSH User Certificate issued successfully",
301
+ "content": {
302
+ "application/json": {
303
+ "schema": {
304
+ "$ref": "#/components/schemas/Certificate Response"
305
+ }
306
+ }
307
+ }
308
+ },
309
+ "400": {
310
+ "description": "Input Validation Error",
311
+ "content": {
312
+ "application/json": {
313
+ "schema": {
314
+ "type": "object",
315
+ "properties": {
316
+ "success": {
317
+ "type": "boolean",
318
+ "enum": [
319
+ false
320
+ ]
321
+ },
322
+ "errors": {
323
+ "type": "array",
324
+ "items": {
325
+ "type": "object",
326
+ "properties": {
327
+ "code": {
328
+ "type": "number"
329
+ },
330
+ "message": {
331
+ "type": "string"
332
+ },
333
+ "path": {
334
+ "type": "array",
335
+ "items": {
336
+ "type": "string"
337
+ }
338
+ }
339
+ },
340
+ "required": [
341
+ "code",
342
+ "message",
343
+ "path"
344
+ ]
345
+ }
346
+ }
347
+ },
348
+ "required": [
349
+ "success",
350
+ "errors"
351
+ ]
352
+ }
353
+ }
354
+ }
355
+ },
356
+ "401": {
357
+ "description": "Unauthorized",
358
+ "content": {
359
+ "application/json": {
360
+ "schema": {
361
+ "type": "object",
362
+ "properties": {
363
+ "success": {
364
+ "type": "boolean",
365
+ "enum": [
366
+ false
367
+ ]
368
+ },
369
+ "errors": {
370
+ "type": "array",
371
+ "items": {
372
+ "type": "object",
373
+ "properties": {
374
+ "code": {
375
+ "type": "number"
376
+ },
377
+ "message": {
378
+ "type": "string"
379
+ }
380
+ },
381
+ "required": [
382
+ "code",
383
+ "message"
384
+ ]
385
+ }
386
+ }
387
+ },
388
+ "required": [
389
+ "success",
390
+ "errors"
391
+ ]
392
+ }
393
+ }
394
+ }
395
+ },
396
+ "403": {
397
+ "description": "Forbidden",
398
+ "content": {
399
+ "application/json": {
400
+ "schema": {
401
+ "type": "object",
402
+ "properties": {
403
+ "success": {
404
+ "type": "boolean",
405
+ "enum": [
406
+ false
407
+ ]
408
+ },
409
+ "errors": {
410
+ "type": "array",
411
+ "items": {
412
+ "type": "object",
413
+ "properties": {
414
+ "code": {
415
+ "type": "number"
416
+ },
417
+ "message": {
418
+ "type": "string"
419
+ }
420
+ },
421
+ "required": [
422
+ "code",
423
+ "message"
424
+ ]
425
+ }
426
+ }
427
+ },
428
+ "required": [
429
+ "success",
430
+ "errors"
431
+ ]
432
+ }
433
+ }
434
+ }
435
+ },
436
+ "422": {
437
+ "description": "Unprocessable Entity",
438
+ "content": {
439
+ "application/json": {
440
+ "schema": {
441
+ "type": "object",
442
+ "properties": {
443
+ "success": {
444
+ "type": "boolean",
445
+ "enum": [
446
+ false
447
+ ]
448
+ },
449
+ "errors": {
450
+ "type": "array",
451
+ "items": {
452
+ "type": "object",
453
+ "properties": {
454
+ "code": {
455
+ "type": "number"
456
+ },
457
+ "message": {
458
+ "type": "string"
459
+ },
460
+ "path": {
461
+ "type": "array",
462
+ "items": {
463
+ "type": "string"
464
+ }
465
+ }
466
+ },
467
+ "required": [
468
+ "code",
469
+ "message",
470
+ "path"
471
+ ]
472
+ }
473
+ }
474
+ },
475
+ "required": [
476
+ "success",
477
+ "errors"
478
+ ]
479
+ }
480
+ }
481
+ }
482
+ },
483
+ "500": {
484
+ "description": "Internal Server Error",
485
+ "content": {
486
+ "application/json": {
487
+ "schema": {
488
+ "type": "object",
489
+ "properties": {
490
+ "success": {
491
+ "type": "boolean",
492
+ "enum": [
493
+ false
494
+ ]
495
+ },
496
+ "errors": {
497
+ "type": "array",
498
+ "items": {
499
+ "type": "object",
500
+ "properties": {
501
+ "code": {
502
+ "type": "number"
503
+ },
504
+ "message": {
505
+ "type": "string"
506
+ }
507
+ },
508
+ "required": [
509
+ "code",
510
+ "message"
511
+ ]
512
+ }
513
+ }
514
+ },
515
+ "required": [
516
+ "success",
517
+ "errors"
518
+ ]
519
+ }
520
+ }
521
+ }
522
+ }
523
+ }
524
+ }
525
+ },
526
+ "/api/v3/{certificateType}/krl": {
527
+ "get": {
528
+ "operationId": "get_certificateType_krl",
529
+ "parameters": [
530
+ {
531
+ "schema": {
532
+ "type": "string",
533
+ "enum": [
534
+ "user",
535
+ "host"
536
+ ]
537
+ },
538
+ "required": true,
539
+ "name": "certificateType",
540
+ "in": "path"
541
+ }
542
+ ],
543
+ "responses": {
544
+ "200": {
545
+ "description": "Returns an Open SSH Key Revocation List as BASE64 and an SSHSIG signature for verification",
546
+ "content": {
547
+ "application/json": {
548
+ "schema": {
549
+ "$ref": "#/components/schemas/Key Revocation List Response"
550
+ }
551
+ }
552
+ }
553
+ },
554
+ "500": {
555
+ "description": "Internal Server Error",
556
+ "content": {
557
+ "application/json": {
558
+ "schema": {
559
+ "type": "object",
560
+ "properties": {
561
+ "success": {
562
+ "type": "boolean",
563
+ "enum": [
564
+ false
565
+ ]
566
+ },
567
+ "errors": {
568
+ "type": "array",
569
+ "items": {
570
+ "type": "object",
571
+ "properties": {
572
+ "code": {
573
+ "type": "number"
574
+ },
575
+ "message": {
576
+ "type": "string"
577
+ }
578
+ },
579
+ "required": [
580
+ "code",
581
+ "message"
582
+ ]
583
+ }
584
+ }
585
+ },
586
+ "required": [
587
+ "success",
588
+ "errors"
589
+ ]
590
+ }
591
+ }
592
+ }
593
+ }
594
+ }
595
+ }
596
+ },
597
+ "/api/v3/host/certificate": {
598
+ "post": {
599
+ "security": [
600
+ {
601
+ "oidcAuth": []
602
+ }
603
+ ],
604
+ "operationId": "post_host_certificate",
605
+ "parameters": [
606
+ {
607
+ "schema": {
608
+ "type": "string",
609
+ "description": "Access Token JWT from OIDC IdP",
610
+ "example": "Bearer eyJ..."
611
+ },
612
+ "required": true,
613
+ "description": "Access Token JWT from OIDC IdP",
614
+ "name": "Authorization",
615
+ "in": "header"
616
+ }
617
+ ],
618
+ "requestBody": {
619
+ "content": {
620
+ "application/json": {
621
+ "schema": {
622
+ "$ref": "#/components/schemas/Host Certificate Request"
623
+ }
624
+ }
625
+ }
626
+ },
627
+ "responses": {
628
+ "200": {
629
+ "description": "SSH Host Certificate issued successfully",
630
+ "content": {
631
+ "application/json": {
632
+ "schema": {
633
+ "$ref": "#/components/schemas/Certificate Response"
634
+ }
635
+ }
636
+ }
637
+ },
638
+ "400": {
639
+ "description": "Input Validation Error",
640
+ "content": {
641
+ "application/json": {
642
+ "schema": {
643
+ "type": "object",
644
+ "properties": {
645
+ "success": {
646
+ "type": "boolean",
647
+ "enum": [
648
+ false
649
+ ]
650
+ },
651
+ "errors": {
652
+ "type": "array",
653
+ "items": {
654
+ "type": "object",
655
+ "properties": {
656
+ "code": {
657
+ "type": "number"
658
+ },
659
+ "message": {
660
+ "type": "string"
661
+ },
662
+ "path": {
663
+ "type": "array",
664
+ "items": {
665
+ "type": "string"
666
+ }
667
+ }
668
+ },
669
+ "required": [
670
+ "code",
671
+ "message",
672
+ "path"
673
+ ]
674
+ }
675
+ }
676
+ },
677
+ "required": [
678
+ "success",
679
+ "errors"
680
+ ]
681
+ }
682
+ }
683
+ }
684
+ },
685
+ "401": {
686
+ "description": "Unauthorized",
687
+ "content": {
688
+ "application/json": {
689
+ "schema": {
690
+ "type": "object",
691
+ "properties": {
692
+ "success": {
693
+ "type": "boolean",
694
+ "enum": [
695
+ false
696
+ ]
697
+ },
698
+ "errors": {
699
+ "type": "array",
700
+ "items": {
701
+ "type": "object",
702
+ "properties": {
703
+ "code": {
704
+ "type": "number"
705
+ },
706
+ "message": {
707
+ "type": "string"
708
+ }
709
+ },
710
+ "required": [
711
+ "code",
712
+ "message"
713
+ ]
714
+ }
715
+ }
716
+ },
717
+ "required": [
718
+ "success",
719
+ "errors"
720
+ ]
721
+ }
722
+ }
723
+ }
724
+ },
725
+ "403": {
726
+ "description": "Forbidden",
727
+ "content": {
728
+ "application/json": {
729
+ "schema": {
730
+ "type": "object",
731
+ "properties": {
732
+ "success": {
733
+ "type": "boolean",
734
+ "enum": [
735
+ false
736
+ ]
737
+ },
738
+ "errors": {
739
+ "type": "array",
740
+ "items": {
741
+ "type": "object",
742
+ "properties": {
743
+ "code": {
744
+ "type": "number"
745
+ },
746
+ "message": {
747
+ "type": "string"
748
+ }
749
+ },
750
+ "required": [
751
+ "code",
752
+ "message"
753
+ ]
754
+ }
755
+ }
756
+ },
757
+ "required": [
758
+ "success",
759
+ "errors"
760
+ ]
761
+ }
762
+ }
763
+ }
764
+ },
765
+ "422": {
766
+ "description": "Unprocessable Entity",
767
+ "content": {
768
+ "application/json": {
769
+ "schema": {
770
+ "type": "object",
771
+ "properties": {
772
+ "success": {
773
+ "type": "boolean",
774
+ "enum": [
775
+ false
776
+ ]
777
+ },
778
+ "errors": {
779
+ "type": "array",
780
+ "items": {
781
+ "type": "object",
782
+ "properties": {
783
+ "code": {
784
+ "type": "number"
785
+ },
786
+ "message": {
787
+ "type": "string"
788
+ },
789
+ "path": {
790
+ "type": "array",
791
+ "items": {
792
+ "type": "string"
793
+ }
794
+ }
795
+ },
796
+ "required": [
797
+ "code",
798
+ "message",
799
+ "path"
800
+ ]
801
+ }
802
+ }
803
+ },
804
+ "required": [
805
+ "success",
806
+ "errors"
807
+ ]
808
+ }
809
+ }
810
+ }
811
+ },
812
+ "500": {
813
+ "description": "Internal Server Error",
814
+ "content": {
815
+ "application/json": {
816
+ "schema": {
817
+ "type": "object",
818
+ "properties": {
819
+ "success": {
820
+ "type": "boolean",
821
+ "enum": [
822
+ false
823
+ ]
824
+ },
825
+ "errors": {
826
+ "type": "array",
827
+ "items": {
828
+ "type": "object",
829
+ "properties": {
830
+ "code": {
831
+ "type": "number"
832
+ },
833
+ "message": {
834
+ "type": "string"
835
+ }
836
+ },
837
+ "required": [
838
+ "code",
839
+ "message"
840
+ ]
841
+ }
842
+ }
843
+ },
844
+ "required": [
845
+ "success",
846
+ "errors"
847
+ ]
848
+ }
849
+ }
850
+ }
851
+ }
852
+ }
853
+ }
854
+ },
855
+ "/api/v3/host/renew": {
856
+ "post": {
857
+ "operationId": "post_host_renew",
858
+ "requestBody": {
859
+ "content": {
860
+ "application/json": {
861
+ "schema": {
862
+ "$ref": "#/components/schemas/Host Certificate Renew"
863
+ }
864
+ }
865
+ }
866
+ },
867
+ "responses": {
868
+ "200": {
869
+ "description": "SSH Host Certificate renewed successfully",
870
+ "content": {
871
+ "application/json": {
872
+ "schema": {
873
+ "$ref": "#/components/schemas/Certificate Response"
874
+ }
875
+ }
876
+ }
877
+ },
878
+ "400": {
879
+ "description": "Input Validation Error",
880
+ "content": {
881
+ "application/json": {
882
+ "schema": {
883
+ "type": "object",
884
+ "properties": {
885
+ "success": {
886
+ "type": "boolean",
887
+ "enum": [
888
+ false
889
+ ]
890
+ },
891
+ "errors": {
892
+ "type": "array",
893
+ "items": {
894
+ "type": "object",
895
+ "properties": {
896
+ "code": {
897
+ "type": "number"
898
+ },
899
+ "message": {
900
+ "type": "string"
901
+ },
902
+ "path": {
903
+ "type": "array",
904
+ "items": {
905
+ "type": "string"
906
+ }
907
+ }
908
+ },
909
+ "required": [
910
+ "code",
911
+ "message",
912
+ "path"
913
+ ]
914
+ }
915
+ }
916
+ },
917
+ "required": [
918
+ "success",
919
+ "errors"
920
+ ]
921
+ }
922
+ }
923
+ }
924
+ },
925
+ "401": {
926
+ "description": "Unauthorized",
927
+ "content": {
928
+ "application/json": {
929
+ "schema": {
930
+ "type": "object",
931
+ "properties": {
932
+ "success": {
933
+ "type": "boolean",
934
+ "enum": [
935
+ false
936
+ ]
937
+ },
938
+ "errors": {
939
+ "type": "array",
940
+ "items": {
941
+ "type": "object",
942
+ "properties": {
943
+ "code": {
944
+ "type": "number"
945
+ },
946
+ "message": {
947
+ "type": "string"
948
+ }
949
+ },
950
+ "required": [
951
+ "code",
952
+ "message"
953
+ ]
954
+ }
955
+ }
956
+ },
957
+ "required": [
958
+ "success",
959
+ "errors"
960
+ ]
961
+ }
962
+ }
963
+ }
964
+ },
965
+ "403": {
966
+ "description": "Forbidden",
967
+ "content": {
968
+ "application/json": {
969
+ "schema": {
970
+ "type": "object",
971
+ "properties": {
972
+ "success": {
973
+ "type": "boolean",
974
+ "enum": [
975
+ false
976
+ ]
977
+ },
978
+ "errors": {
979
+ "type": "array",
980
+ "items": {
981
+ "type": "object",
982
+ "properties": {
983
+ "code": {
984
+ "type": "number"
985
+ },
986
+ "message": {
987
+ "type": "string"
988
+ }
989
+ },
990
+ "required": [
991
+ "code",
992
+ "message"
993
+ ]
994
+ }
995
+ }
996
+ },
997
+ "required": [
998
+ "success",
999
+ "errors"
1000
+ ]
1001
+ }
1002
+ }
1003
+ }
1004
+ },
1005
+ "422": {
1006
+ "description": "Unprocessable Entity",
1007
+ "content": {
1008
+ "application/json": {
1009
+ "schema": {
1010
+ "type": "object",
1011
+ "properties": {
1012
+ "success": {
1013
+ "type": "boolean",
1014
+ "enum": [
1015
+ false
1016
+ ]
1017
+ },
1018
+ "errors": {
1019
+ "type": "array",
1020
+ "items": {
1021
+ "type": "object",
1022
+ "properties": {
1023
+ "code": {
1024
+ "type": "number"
1025
+ },
1026
+ "message": {
1027
+ "type": "string"
1028
+ },
1029
+ "path": {
1030
+ "type": "array",
1031
+ "items": {
1032
+ "type": "string"
1033
+ }
1034
+ }
1035
+ },
1036
+ "required": [
1037
+ "code",
1038
+ "message",
1039
+ "path"
1040
+ ]
1041
+ }
1042
+ }
1043
+ },
1044
+ "required": [
1045
+ "success",
1046
+ "errors"
1047
+ ]
1048
+ }
1049
+ }
1050
+ }
1051
+ },
1052
+ "500": {
1053
+ "description": "Internal Server Error",
1054
+ "content": {
1055
+ "application/json": {
1056
+ "schema": {
1057
+ "type": "object",
1058
+ "properties": {
1059
+ "success": {
1060
+ "type": "boolean",
1061
+ "enum": [
1062
+ false
1063
+ ]
1064
+ },
1065
+ "errors": {
1066
+ "type": "array",
1067
+ "items": {
1068
+ "type": "object",
1069
+ "properties": {
1070
+ "code": {
1071
+ "type": "number"
1072
+ },
1073
+ "message": {
1074
+ "type": "string"
1075
+ }
1076
+ },
1077
+ "required": [
1078
+ "code",
1079
+ "message"
1080
+ ]
1081
+ }
1082
+ }
1083
+ },
1084
+ "required": [
1085
+ "success",
1086
+ "errors"
1087
+ ]
1088
+ }
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+ }
1094
+ },
1095
+ "/api/v3/{certificateType}/revoke": {
1096
+ "post": {
1097
+ "operationId": "post_certificateType_revoke",
1098
+ "parameters": [
1099
+ {
1100
+ "schema": {
1101
+ "type": "string",
1102
+ "enum": [
1103
+ "user",
1104
+ "host"
1105
+ ]
1106
+ },
1107
+ "required": true,
1108
+ "name": "certificateType",
1109
+ "in": "path"
1110
+ }
1111
+ ],
1112
+ "requestBody": {
1113
+ "content": {
1114
+ "application/json": {
1115
+ "schema": {
1116
+ "$ref": "#/components/schemas/Certificate Revocation"
1117
+ }
1118
+ }
1119
+ }
1120
+ },
1121
+ "responses": {
1122
+ "200": {
1123
+ "description": "SSH certificate revoked successfully",
1124
+ "content": {
1125
+ "application/json": {
1126
+ "schema": {
1127
+ "$ref": "#/components/schemas/Revocation Response"
1128
+ }
1129
+ }
1130
+ }
1131
+ },
1132
+ "400": {
1133
+ "description": "Input Validation Error",
1134
+ "content": {
1135
+ "application/json": {
1136
+ "schema": {
1137
+ "type": "object",
1138
+ "properties": {
1139
+ "success": {
1140
+ "type": "boolean",
1141
+ "enum": [
1142
+ false
1143
+ ]
1144
+ },
1145
+ "errors": {
1146
+ "type": "array",
1147
+ "items": {
1148
+ "type": "object",
1149
+ "properties": {
1150
+ "code": {
1151
+ "type": "number"
1152
+ },
1153
+ "message": {
1154
+ "type": "string"
1155
+ },
1156
+ "path": {
1157
+ "type": "array",
1158
+ "items": {
1159
+ "type": "string"
1160
+ }
1161
+ }
1162
+ },
1163
+ "required": [
1164
+ "code",
1165
+ "message",
1166
+ "path"
1167
+ ]
1168
+ }
1169
+ }
1170
+ },
1171
+ "required": [
1172
+ "success",
1173
+ "errors"
1174
+ ]
1175
+ }
1176
+ }
1177
+ }
1178
+ },
1179
+ "401": {
1180
+ "description": "Unauthorized",
1181
+ "content": {
1182
+ "application/json": {
1183
+ "schema": {
1184
+ "type": "object",
1185
+ "properties": {
1186
+ "success": {
1187
+ "type": "boolean",
1188
+ "enum": [
1189
+ false
1190
+ ]
1191
+ },
1192
+ "errors": {
1193
+ "type": "array",
1194
+ "items": {
1195
+ "type": "object",
1196
+ "properties": {
1197
+ "code": {
1198
+ "type": "number"
1199
+ },
1200
+ "message": {
1201
+ "type": "string"
1202
+ }
1203
+ },
1204
+ "required": [
1205
+ "code",
1206
+ "message"
1207
+ ]
1208
+ }
1209
+ }
1210
+ },
1211
+ "required": [
1212
+ "success",
1213
+ "errors"
1214
+ ]
1215
+ }
1216
+ }
1217
+ }
1218
+ },
1219
+ "403": {
1220
+ "description": "Forbidden",
1221
+ "content": {
1222
+ "application/json": {
1223
+ "schema": {
1224
+ "type": "object",
1225
+ "properties": {
1226
+ "success": {
1227
+ "type": "boolean",
1228
+ "enum": [
1229
+ false
1230
+ ]
1231
+ },
1232
+ "errors": {
1233
+ "type": "array",
1234
+ "items": {
1235
+ "type": "object",
1236
+ "properties": {
1237
+ "code": {
1238
+ "type": "number"
1239
+ },
1240
+ "message": {
1241
+ "type": "string"
1242
+ }
1243
+ },
1244
+ "required": [
1245
+ "code",
1246
+ "message"
1247
+ ]
1248
+ }
1249
+ }
1250
+ },
1251
+ "required": [
1252
+ "success",
1253
+ "errors"
1254
+ ]
1255
+ }
1256
+ }
1257
+ }
1258
+ },
1259
+ "409": {
1260
+ "description": "Conflict",
1261
+ "content": {
1262
+ "application/json": {
1263
+ "schema": {
1264
+ "type": "object",
1265
+ "properties": {
1266
+ "success": {
1267
+ "type": "boolean",
1268
+ "enum": [
1269
+ false
1270
+ ]
1271
+ },
1272
+ "errors": {
1273
+ "type": "array",
1274
+ "items": {
1275
+ "type": "object",
1276
+ "properties": {
1277
+ "code": {
1278
+ "type": "number"
1279
+ },
1280
+ "message": {
1281
+ "type": "string"
1282
+ }
1283
+ },
1284
+ "required": [
1285
+ "code",
1286
+ "message"
1287
+ ]
1288
+ }
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "success",
1293
+ "errors"
1294
+ ]
1295
+ }
1296
+ }
1297
+ }
1298
+ },
1299
+ "422": {
1300
+ "description": "Unprocessable Entity",
1301
+ "content": {
1302
+ "application/json": {
1303
+ "schema": {
1304
+ "type": "object",
1305
+ "properties": {
1306
+ "success": {
1307
+ "type": "boolean",
1308
+ "enum": [
1309
+ false
1310
+ ]
1311
+ },
1312
+ "errors": {
1313
+ "type": "array",
1314
+ "items": {
1315
+ "type": "object",
1316
+ "properties": {
1317
+ "code": {
1318
+ "type": "number"
1319
+ },
1320
+ "message": {
1321
+ "type": "string"
1322
+ },
1323
+ "path": {
1324
+ "type": "array",
1325
+ "items": {
1326
+ "type": "string"
1327
+ }
1328
+ }
1329
+ },
1330
+ "required": [
1331
+ "code",
1332
+ "message",
1333
+ "path"
1334
+ ]
1335
+ }
1336
+ }
1337
+ },
1338
+ "required": [
1339
+ "success",
1340
+ "errors"
1341
+ ]
1342
+ }
1343
+ }
1344
+ }
1345
+ },
1346
+ "500": {
1347
+ "description": "Internal Server Error",
1348
+ "content": {
1349
+ "application/json": {
1350
+ "schema": {
1351
+ "type": "object",
1352
+ "properties": {
1353
+ "success": {
1354
+ "type": "boolean",
1355
+ "enum": [
1356
+ false
1357
+ ]
1358
+ },
1359
+ "errors": {
1360
+ "type": "array",
1361
+ "items": {
1362
+ "type": "object",
1363
+ "properties": {
1364
+ "code": {
1365
+ "type": "number"
1366
+ },
1367
+ "message": {
1368
+ "type": "string"
1369
+ }
1370
+ },
1371
+ "required": [
1372
+ "code",
1373
+ "message"
1374
+ ]
1375
+ }
1376
+ }
1377
+ },
1378
+ "required": [
1379
+ "success",
1380
+ "errors"
1381
+ ]
1382
+ }
1383
+ }
1384
+ }
1385
+ }
1386
+ }
1387
+ }
1388
+ }
1389
+ },
1390
+ "webhooks": {}
1391
+ }