openapi: 3.0.3 info: title: Certigo Addon API description: API für die Verwaltung von Spaces, FQDNs und Certificate Signing Requests (CSRs) version: 1.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: boolean description: Muss true sein, um die Operation auszuführen responses: '200': description: Alle FQDNs erfolgreich gelöscht content: application/json: schema: $ref: '#/components/schemas/DeleteResponse' '400': description: Bestätigung erforderlich /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 /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 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 Spaces" 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" CreateFQDNRequest: type: object required: - fqdn properties: fqdn: type: string example: "example.com" description: type: string example: "Beschreibung des FQDN" 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" 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