Files
certigo/backend/openapi.yaml

1772 lines
46 KiB
YAML

openapi: 3.0.3
info:
title: Certigo Addon API
description: API für die Verwaltung von Spaces, FQDNs, Certificate Signing Requests (CSRs), Zertifikaten, Benutzern, Berechtigungen und automatischer Zertifikatserneuerung
version: 2.0.0
contact:
name: Certigo Addon
servers:
- url: http://localhost:8080/api
description: Local development server
paths:
/health:
get:
summary: System Health Check
description: Prüft den Systemstatus des Backends
tags:
- System
responses:
'200':
description: System ist erreichbar
content:
application/json:
schema:
$ref: '#/components/schemas/HealthResponse'
/stats:
get:
summary: Statistiken abrufen
description: Ruft Statistiken über die Anzahl der Spaces, FQDNs und CSRs ab
tags:
- System
responses:
'200':
description: Statistiken erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/StatsResponse'
/spaces:
get:
summary: Alle Spaces abrufen
description: Ruft eine Liste aller Spaces ab
tags:
- Spaces
responses:
'200':
description: Liste der Spaces
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Space'
post:
summary: Space erstellen
description: Erstellt einen neuen Space
tags:
- Spaces
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSpaceRequest'
responses:
'201':
description: Space erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/Space'
'400':
description: Ungültige Anfrage
/spaces/{id}:
delete:
summary: Space löschen
description: Löscht einen Space. Wenn der Space FQDNs enthält, muss der Parameter deleteFqdns=true gesetzt werden.
tags:
- Spaces
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
- name: deleteFqdns
in: query
required: false
schema:
type: boolean
default: false
description: Wenn true, werden alle FQDNs des Spaces mitgelöscht
responses:
'200':
description: Space erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: Space nicht gefunden
'409':
description: Space enthält noch FQDNs
/spaces/{id}/fqdns/count:
get:
summary: FQDN-Anzahl abrufen
description: Ruft die Anzahl der FQDNs für einen Space ab
tags:
- FQDNs
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Anzahl der FQDNs
content:
application/json:
schema:
$ref: '#/components/schemas/CountResponse'
/spaces/{id}/fqdns:
get:
summary: Alle FQDNs eines Spaces abrufen
description: Ruft alle FQDNs für einen Space ab
tags:
- FQDNs
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Liste der FQDNs
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/FQDN'
'404':
description: Space nicht gefunden
post:
summary: FQDN erstellen
description: Erstellt einen neuen FQDN innerhalb eines Spaces
tags:
- FQDNs
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateFQDNRequest'
responses:
'201':
description: FQDN erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/FQDN'
'400':
description: Ungültige Anfrage
'404':
description: Space nicht gefunden
'409':
description: FQDN existiert bereits in diesem Space
delete:
summary: Alle FQDNs eines Spaces löschen
description: Löscht alle FQDNs eines Spaces
tags:
- FQDNs
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Alle FQDNs erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteResponse'
/spaces/{id}/fqdns/{fqdnId}:
delete:
summary: FQDN löschen
description: Löscht einen einzelnen FQDN
tags:
- FQDNs
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: FQDN erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: FQDN nicht gefunden
/fqdns:
delete:
summary: Alle FQDNs global löschen
description: Löscht alle FQDNs aus allen Spaces. Erfordert confirm=true Query-Parameter.
tags:
- FQDNs
parameters:
- name: confirm
in: query
required: true
schema:
type: string
description: Muss "true" sein, um die Operation auszuführen
example: "true"
responses:
'200':
description: Alle FQDNs erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteResponse'
'400':
description: Bestätigung erforderlich
/spaces/{spaceId}/fqdns/{fqdnId}/csr:
post:
summary: CSR hochladen
description: Lädt einen CSR (Certificate Signing Request) im PEM-Format hoch
tags:
- CSRs
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- csr
- spaceId
- fqdn
properties:
csr:
type: string
format: binary
description: CSR-Datei im PEM-Format
spaceId:
type: string
description: ID des Spaces
fqdn:
type: string
description: Name des FQDNs
responses:
'201':
description: CSR erfolgreich hochgeladen
content:
application/json:
schema:
$ref: '#/components/schemas/CSR'
'400':
description: Ungültige Anfrage oder ungültiges CSR-Format
'404':
description: Space oder FQDN nicht gefunden
get:
summary: CSR(s) abrufen
description: Ruft CSR(s) für einen FQDN ab. Mit latest=true wird nur der neueste CSR zurückgegeben.
tags:
- CSRs
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
- name: latest
in: query
required: false
schema:
type: boolean
default: false
description: Wenn true, wird nur der neueste CSR zurückgegeben
responses:
'200':
description: CSR(s) erfolgreich abgerufen
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CSR'
- type: array
items:
$ref: '#/components/schemas/CSR'
'404':
description: FQDN nicht gefunden
/spaces/{spaceId}/fqdns/{fqdnId}/csr/sign:
post:
summary: CSR signieren lassen
description: Sendet einen CSR an einen Provider zur Signierung
tags:
- CSRs
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SignCSRRequest'
responses:
'200':
description: CSR erfolgreich signiert
content:
application/json:
schema:
$ref: '#/components/schemas/SignCSRResponse'
'400':
description: Ungültige Anfrage
'404':
description: FQDN, CSR oder Provider nicht gefunden
/spaces/{spaceId}/fqdns/{fqdnId}/certificates:
get:
summary: Zertifikate abrufen
description: Ruft alle Zertifikate für einen FQDN ab
tags:
- Certificates
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Liste der Zertifikate
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Certificate'
'404':
description: FQDN nicht gefunden
/spaces/{spaceId}/fqdns/{fqdnId}/certificates/{certId}/refresh:
post:
summary: Zertifikat aktualisieren
description: Aktualisiert die Informationen eines Zertifikats vom Provider
tags:
- Certificates
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
- name: certId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Zertifikat erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/Certificate'
'404':
description: Zertifikat nicht gefunden
/spaces/{spaceId}/fqdns/{fqdnId}/request-certificate:
post:
summary: Zertifikat beantragen (ACME)
description: Beantragt ein neues Zertifikat über das ACME-Protokoll für einen FQDN
tags:
- Certificates
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/RequestCertificateRequest'
responses:
'200':
description: Zertifikat erfolgreich beantragt
content:
application/json:
schema:
$ref: '#/components/schemas/RequestCertificateResponse'
'400':
description: Ungültige Anfrage
'404':
description: FQDN nicht gefunden
/spaces/{spaceId}/fqdns/{fqdnId}/renewal-enabled:
put:
summary: Auto-Renewal für FQDN aktivieren/deaktivieren
description: Aktiviert oder deaktiviert die automatische Erneuerung für einen FQDN
tags:
- FQDNs
parameters:
- name: spaceId
in: path
required: true
schema:
type: string
format: uuid
- name: fqdnId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateRenewalEnabledRequest'
responses:
'200':
description: Auto-Renewal Status erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: FQDN nicht gefunden
/csrs:
delete:
summary: Alle CSRs global löschen
description: Löscht alle CSRs aus allen Spaces. Erfordert confirm=true Query-Parameter.
tags:
- CSRs
parameters:
- name: confirm
in: query
required: true
schema:
type: string
description: Muss "true" sein, um die Operation auszuführen
example: "true"
responses:
'200':
description: Alle CSRs erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteResponse'
'400':
description: Bestätigung erforderlich
/renewal-queue:
get:
summary: Renewal Queue abrufen
description: Ruft alle Einträge in der Renewal Queue ab
tags:
- Renewal Queue
responses:
'200':
description: Liste der Renewal Queue Einträge
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RenewalQueueEntry'
/renewal-queue/test/create:
post:
summary: Test-Queue-Eintrag erstellen
description: Erstellt einen Test-Eintrag in der Renewal Queue (nur für Administratoren)
tags:
- Renewal Queue
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTestRenewalQueueEntryRequest'
responses:
'201':
description: Test-Queue-Eintrag erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTestRenewalQueueEntryResponse'
'400':
description: Ungültige Anfrage
'403':
description: Nur Administratoren dürfen Test-Einträge erstellen
/renewal-queue/test/trigger:
post:
summary: Renewal Queue manuell auslösen
description: Löst die manuelle Verarbeitung der Renewal Queue aus (nur für Administratoren)
tags:
- Renewal Queue
responses:
'200':
description: Queue-Verarbeitung erfolgreich ausgelöst
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'403':
description: Nur Administratoren dürfen die Queue manuell auslösen
/users:
get:
summary: Alle Benutzer abrufen
description: Ruft eine Liste aller Benutzer ab (nur für Administratoren)
tags:
- Users
responses:
'200':
description: Liste der Benutzer
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
'403':
description: Nur Administratoren dürfen Benutzer abrufen
post:
summary: Benutzer erstellen
description: Erstellt einen neuen Benutzer (nur für Administratoren)
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'201':
description: Benutzer erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
description: Ungültige Anfrage
'403':
description: Nur Administratoren dürfen Benutzer erstellen
/users/{id}:
get:
summary: Benutzer abrufen
description: Ruft einen einzelnen Benutzer ab (nur für Administratoren)
tags:
- Users
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Benutzer erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
description: Benutzer nicht gefunden
'403':
description: Nur Administratoren dürfen Benutzer abrufen
put:
summary: Benutzer aktualisieren
description: Aktualisiert einen Benutzer (nur für Administratoren)
tags:
- Users
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRequest'
responses:
'200':
description: Benutzer erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
description: Ungültige Anfrage
'404':
description: Benutzer nicht gefunden
'403':
description: Nur Administratoren dürfen Benutzer aktualisieren
delete:
summary: Benutzer löschen
description: Löscht einen Benutzer (nur für Administratoren)
tags:
- Users
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Benutzer erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: Benutzer nicht gefunden
'403':
description: Nur Administratoren dürfen Benutzer löschen
/users/{id}/avatar:
get:
summary: Avatar abrufen
description: Ruft das Profilbild eines Benutzers ab
tags:
- Users
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Avatar erfolgreich abgerufen
content:
image/png:
schema:
type: string
format: binary
'404':
description: Avatar nicht gefunden
post:
summary: Avatar hochladen
description: Lädt ein Profilbild für einen Benutzer hoch
tags:
- Users
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- avatar
properties:
avatar:
type: string
format: binary
description: Bilddatei (PNG, JPG, etc.)
responses:
'200':
description: Avatar erfolgreich hochgeladen
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'400':
description: Ungültige Datei
/user/permissions:
get:
summary: Benutzer-Berechtigungen abrufen
description: Ruft die Berechtigungen des aktuell authentifizierten Benutzers ab
tags:
- Users
responses:
'200':
description: Berechtigungen erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/UserPermissions'
/permission-groups:
get:
summary: Alle Berechtigungsgruppen abrufen
description: Ruft eine Liste aller Berechtigungsgruppen ab (nur für Administratoren)
tags:
- Permission Groups
responses:
'200':
description: Liste der Berechtigungsgruppen
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PermissionGroup'
'403':
description: Nur Administratoren dürfen Berechtigungsgruppen abrufen
post:
summary: Berechtigungsgruppe erstellen
description: Erstellt eine neue Berechtigungsgruppe (nur für Administratoren)
tags:
- Permission Groups
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePermissionGroupRequest'
responses:
'201':
description: Berechtigungsgruppe erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionGroup'
'400':
description: Ungültige Anfrage
'403':
description: Nur Administratoren dürfen Berechtigungsgruppen erstellen
/permission-groups/{id}:
get:
summary: Berechtigungsgruppe abrufen
description: Ruft eine einzelne Berechtigungsgruppe ab (nur für Administratoren)
tags:
- Permission Groups
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Berechtigungsgruppe erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionGroup'
'404':
description: Berechtigungsgruppe nicht gefunden
'403':
description: Nur Administratoren dürfen Berechtigungsgruppen abrufen
put:
summary: Berechtigungsgruppe aktualisieren
description: Aktualisiert eine Berechtigungsgruppe (nur für Administratoren)
tags:
- Permission Groups
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdatePermissionGroupRequest'
responses:
'200':
description: Berechtigungsgruppe erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionGroup'
'400':
description: Ungültige Anfrage
'404':
description: Berechtigungsgruppe nicht gefunden
'403':
description: Nur Administratoren dürfen Berechtigungsgruppen aktualisieren
delete:
summary: Berechtigungsgruppe löschen
description: Löscht eine Berechtigungsgruppe (nur für Administratoren)
tags:
- Permission Groups
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Berechtigungsgruppe erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: Berechtigungsgruppe nicht gefunden
'403':
description: Nur Administratoren dürfen Berechtigungsgruppen löschen
/providers:
get:
summary: Alle Provider abrufen
description: Ruft eine Liste aller Provider ab
tags:
- Providers
responses:
'200':
description: Liste der Provider
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Provider'
/providers/{id}:
get:
summary: Provider abrufen
description: Ruft einen einzelnen Provider ab
tags:
- Providers
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Provider erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/Provider'
'404':
description: Provider nicht gefunden
/providers/{id}/enabled:
put:
summary: Provider aktivieren/deaktivieren
description: Aktiviert oder deaktiviert einen Provider
tags:
- Providers
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SetProviderEnabledRequest'
responses:
'200':
description: Provider Status erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'404':
description: Provider nicht gefunden
/providers/{id}/config:
put:
summary: Provider-Konfiguration aktualisieren
description: Aktualisiert die Konfiguration eines Providers
tags:
- Providers
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProviderConfigRequest'
responses:
'200':
description: Provider-Konfiguration erfolgreich aktualisiert
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
'400':
description: Ungültige Konfiguration
'404':
description: Provider nicht gefunden
/providers/{id}/test:
post:
summary: Provider-Verbindung testen
description: Testet die Verbindung zu einem Provider
tags:
- Providers
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: false
content:
application/json:
schema:
type: object
responses:
'200':
description: Verbindungstest erfolgreich
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderTestResponse'
'404':
description: Provider nicht gefunden
/audit-logs:
get:
summary: Audit-Logs abrufen
description: Ruft Audit-Logs ab mit optionalen Filtern
tags:
- Audit Logs
parameters:
- name: limit
in: query
required: false
schema:
type: integer
default: 100
description: Maximale Anzahl der Einträge
- name: offset
in: query
required: false
schema:
type: integer
default: 0
description: Offset für Paginierung
responses:
'200':
description: Audit-Logs erfolgreich abgerufen
content:
application/json:
schema:
$ref: '#/components/schemas/AuditLogsResponse'
delete:
summary: Alle Audit-Logs löschen
description: Löscht alle Audit-Logs
tags:
- Audit Logs
responses:
'200':
description: Alle Audit-Logs erfolgreich gelöscht
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
/audit-logs/test:
post:
summary: Test-Audit-Log erstellen
description: Erstellt einen Test-Audit-Log-Eintrag
tags:
- Audit Logs
requestBody:
required: false
content:
application/json:
schema:
type: object
responses:
'200':
description: Test-Audit-Log erfolgreich erstellt
content:
application/json:
schema:
$ref: '#/components/schemas/MessageResponse'
components:
schemas:
HealthResponse:
type: object
properties:
status:
type: string
example: "ok"
message:
type: string
example: "Backend ist erreichbar"
time:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
StatsResponse:
type: object
properties:
spaces:
type: integer
example: 5
fqdns:
type: integer
example: 12
csrs:
type: integer
example: 7
Space:
type: object
properties:
id:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
name:
type: string
example: "Mein Space"
description:
type: string
example: "Beschreibung des Spaces"
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
CreateSpaceRequest:
type: object
required:
- name
properties:
name:
type: string
example: "Mein Space"
description:
type: string
example: "Beschreibung des Space"
FQDN:
type: object
properties:
id:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
spaceId:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
fqdn:
type: string
example: "example.com"
description:
type: string
example: "Beschreibung des FQDN"
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
renewalEnabled:
type: boolean
example: true
description: Auto-Renewal aktiviert
CreateFQDNRequest:
type: object
required:
- fqdn
properties:
fqdn:
type: string
example: "example.com"
description:
type: string
example: "Beschreibung des FQDN"
providerId:
type: string
format: uuid
example: "770e8400-e29b-41d4-a716-446655440000"
UpdateRenewalEnabledRequest:
type: object
required:
- renewalEnabled
properties:
renewalEnabled:
type: boolean
example: true
description: Auto-Renewal aktivieren/deaktivieren
Extension:
type: object
properties:
id:
type: string
example: "2.5.29.37"
oid:
type: string
example: "2.5.29.37"
name:
type: string
example: "X509v3 Extended Key Usage"
critical:
type: boolean
example: false
value:
type: string
example: "301406082b0601050507030106082b06010505070302"
description:
type: string
example: "TLS Web Server Authentication\n TLS Web Client Authentication"
purposes:
type: array
items:
type: string
example: ["TLS Web Server Authentication", "TLS Web Client Authentication"]
CSR:
type: object
properties:
id:
type: string
format: uuid
example: "770e8400-e29b-41d4-a716-446655440000"
fqdnId:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
spaceId:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
fqdn:
type: string
example: "example.com"
csrPem:
type: string
example: "-----BEGIN CERTIFICATE REQUEST-----\n...\n-----END CERTIFICATE REQUEST-----"
subject:
type: string
example: "CN=example.com"
publicKeyAlgorithm:
type: string
example: "RSA"
signatureAlgorithm:
type: string
example: "SHA256-RSA"
keySize:
type: integer
example: 2048
dnsNames:
type: array
items:
type: string
example: ["example.com", "www.example.com"]
emailAddresses:
type: array
items:
type: string
example: ["admin@example.com"]
ipAddresses:
type: array
items:
type: string
example: ["192.168.1.1"]
uris:
type: array
items:
type: string
example: ["https://example.com"]
extensions:
type: array
items:
$ref: '#/components/schemas/Extension'
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
SignCSRRequest:
type: object
required:
- providerId
properties:
providerId:
type: string
format: uuid
example: "880e8400-e29b-41d4-a716-446655440000"
SignCSRResponse:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: "CSR erfolgreich signiert"
certificate:
type: string
example: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
Certificate:
type: object
properties:
id:
type: string
format: uuid
example: "990e8400-e29b-41d4-a716-446655440000"
fqdnId:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
spaceId:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
pem:
type: string
example: "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
issuer:
type: string
example: "Let's Encrypt"
expiresAt:
type: string
format: date-time
example: "2025-01-15T10:30:00Z"
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
RequestCertificateRequest:
type: object
properties:
confirmed:
type: boolean
example: false
description: Bestätigung für bereits gültiges Zertifikat
RequestCertificateResponse:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: "Zertifikat erfolgreich beantragt"
certificate:
type: object
properties:
id:
type: string
format: uuid
pem:
type: string
stepStatus:
type: object
description: Status der einzelnen Schritte des Zertifikatsanfrage-Prozesses
RenewalQueueEntry:
type: object
properties:
id:
type: string
format: uuid
example: "aa0e8400-e29b-41d4-a716-446655440000"
certificateId:
type: string
format: uuid
example: "990e8400-e29b-41d4-a716-446655440000"
fqdnId:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
spaceId:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
scheduledAt:
type: string
format: date-time
example: "2025-01-24T03:25:13Z"
status:
type: string
enum: [pending, processing, completed, failed]
example: "pending"
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
CreateTestRenewalQueueEntryRequest:
type: object
required:
- certificateId
- fqdnId
- spaceId
- minutesFromNow
properties:
certificateId:
type: string
format: uuid
example: "990e8400-e29b-41d4-a716-446655440000"
fqdnId:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
spaceId:
type: string
format: uuid
example: "550e8400-e29b-41d4-a716-446655440000"
minutesFromNow:
type: integer
example: 5
description: Anzahl der Minuten ab jetzt, wann der Renewal ausgeführt werden soll
CreateTestRenewalQueueEntryResponse:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: "Test-Queue-Eintrag erstellt"
queueId:
type: string
format: uuid
example: "test-aa0e8400-e29b-41d4-a716-446655440000"
scheduledAt:
type: string
format: date-time
example: "2024-01-15T10:35:00Z"
User:
type: object
properties:
id:
type: string
format: uuid
example: "bb0e8400-e29b-41d4-a716-446655440000"
username:
type: string
example: "admin"
email:
type: string
example: "admin@example.com"
isAdmin:
type: boolean
example: true
enabled:
type: boolean
example: true
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
CreateUserRequest:
type: object
required:
- username
- email
- password
properties:
username:
type: string
example: "newuser"
email:
type: string
example: "user@example.com"
password:
type: string
example: "securePassword123"
isAdmin:
type: boolean
example: false
UpdateUserRequest:
type: object
properties:
username:
type: string
example: "updateduser"
email:
type: string
example: "updated@example.com"
password:
type: string
example: "newPassword123"
isAdmin:
type: boolean
example: false
enabled:
type: boolean
example: true
UserPermissions:
type: object
properties:
isAdmin:
type: boolean
example: true
hasFullAccess:
type: boolean
example: false
accessibleSpaces:
type: array
items:
type: string
format: uuid
example: ["550e8400-e29b-41d4-a716-446655440000"]
permissions:
type: object
properties:
canCreateSpace:
type: boolean
canDeleteSpace:
type: boolean
canCreateFqdn:
type: object
canDeleteFqdn:
type: object
canUploadCSR:
type: object
canSignCSR:
type: object
groups:
type: array
items:
$ref: '#/components/schemas/PermissionGroup'
PermissionGroup:
type: object
properties:
id:
type: string
format: uuid
example: "cc0e8400-e29b-41d4-a716-446655440000"
name:
type: string
example: "Developers"
description:
type: string
example: "Entwickler-Gruppe"
permission:
type: string
enum: [READ, READ_WRITE, FULL_ACCESS]
example: "READ_WRITE"
spaceIds:
type: array
items:
type: string
format: uuid
example: ["550e8400-e29b-41d4-a716-446655440000"]
createdAt:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
CreatePermissionGroupRequest:
type: object
required:
- name
- permission
properties:
name:
type: string
example: "Developers"
description:
type: string
example: "Entwickler-Gruppe"
permission:
type: string
enum: [READ, READ_WRITE, FULL_ACCESS]
example: "READ_WRITE"
spaceIds:
type: array
items:
type: string
format: uuid
example: ["550e8400-e29b-41d4-a716-446655440000"]
UpdatePermissionGroupRequest:
type: object
properties:
name:
type: string
example: "Developers"
description:
type: string
example: "Entwickler-Gruppe"
permission:
type: string
enum: [READ, READ_WRITE, FULL_ACCESS]
example: "READ_WRITE"
spaceIds:
type: array
items:
type: string
format: uuid
example: ["550e8400-e29b-41d4-a716-446655440000"]
Provider:
type: object
properties:
id:
type: string
format: uuid
example: "dd0e8400-e29b-41d4-a716-446655440000"
name:
type: string
example: "Let's Encrypt"
displayName:
type: string
example: "Let's Encrypt (Production)"
description:
type: string
example: "Let's Encrypt Production CA"
enabled:
type: boolean
example: true
config:
type: object
description: Provider-spezifische Konfiguration
SetProviderEnabledRequest:
type: object
required:
- enabled
properties:
enabled:
type: boolean
example: true
UpdateProviderConfigRequest:
type: object
properties:
config:
type: object
description: Provider-spezifische Konfiguration
ProviderTestResponse:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: "Verbindung erfolgreich"
AuditLogsResponse:
type: object
properties:
logs:
type: array
items:
$ref: '#/components/schemas/AuditLog'
total:
type: integer
example: 100
limit:
type: integer
example: 100
offset:
type: integer
example: 0
AuditLog:
type: object
properties:
id:
type: string
format: uuid
example: "ee0e8400-e29b-41d4-a716-446655440000"
action:
type: string
example: "CREATE"
resourceType:
type: string
example: "fqdn"
resourceId:
type: string
format: uuid
example: "660e8400-e29b-41d4-a716-446655440000"
userId:
type: string
format: uuid
example: "bb0e8400-e29b-41d4-a716-446655440000"
username:
type: string
example: "admin"
details:
type: object
ipAddress:
type: string
example: "192.168.1.1"
userAgent:
type: string
example: "Mozilla/5.0..."
timestamp:
type: string
format: date-time
example: "2024-01-15T10:30:00Z"
MessageResponse:
type: object
properties:
message:
type: string
example: "Operation erfolgreich"
CountResponse:
type: object
properties:
count:
type: integer
example: 5
DeleteResponse:
type: object
properties:
message:
type: string
example: "Alle FQDNs erfolgreich gelöscht"
deletedCount:
type: integer
example: 5
securitySchemes:
{}:
type: http
scheme: none