228 lines
4.5 KiB
Markdown
228 lines
4.5 KiB
Markdown
# LicServer API Spezifikation (v1)
|
|
|
|
Dokumentation der REST-Schnittstellen des CASPOS Lizenzservers.
|
|
|
|
## 1. Endpunkte (Port 9981 - Activation API)
|
|
|
|
### Activation (Aktivierung)
|
|
|
|
#### `POST /v1/activate`
|
|
Aktiviert eine neue Lizenz.
|
|
|
|
**Request Body (`application/json`):**
|
|
```json
|
|
{
|
|
"productId": "string",
|
|
"productVersion": "string",
|
|
"activationCode": "string",
|
|
"hardwareBindingType": "string",
|
|
"hardwareBindingId": "string"
|
|
}
|
|
```
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"licenseData": {
|
|
"id": "string",
|
|
"serialNumber": "string",
|
|
"productId": "string",
|
|
"filename": "string",
|
|
"content": "string" // Base64 Byte-Inhalt
|
|
},
|
|
"apiKey": "string",
|
|
"secret": "string"
|
|
}
|
|
```
|
|
|
|
**Response Headers:**
|
|
- `ETag` (string): Der ETag-Wert der Lizenz.
|
|
|
|
---
|
|
|
|
#### `POST /v1/activate-existing`
|
|
Aktiviert eine bereits vorhandene Lizenz erneut.
|
|
|
|
**Request Body (`application/json`):**
|
|
```json
|
|
{
|
|
"productId": "string",
|
|
"productVersion": "string",
|
|
"serialNumber": "string",
|
|
"proofOfPossessionHash": "string",
|
|
"salt": "string",
|
|
"hardwareBindingType": "string",
|
|
"hardwareBindingId": "string"
|
|
}
|
|
```
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
*Gleiche Struktur wie bei `/v1/activate`.*
|
|
|
|
---
|
|
|
|
### Licenses (Lizenzen)
|
|
|
|
#### `GET /v1/licenses/{id}`
|
|
Holt die Lizenz-Details zu einer bestimmten Lizenz-ID.
|
|
|
|
**Request Parameters:**
|
|
- `id` (path, string, required): Die UUID der Lizenz.
|
|
- `If-None-Match` (header, string, optional): ETag zur Cache-Validierung.
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"id": "string",
|
|
"serialNumber": "string",
|
|
"productId": "string",
|
|
"filename": "string",
|
|
"content": "string" // Base64 Byte-Inhalt
|
|
}
|
|
```
|
|
|
|
**Response `304 Not Modified`:**
|
|
Falls die Lizenz nicht verändert wurde.
|
|
|
|
**Response `404 Not Found` / `403 Forbidden`:**
|
|
Standard Fehlerobjekt `ProblemDetails`.
|
|
|
|
---
|
|
|
|
## 2. Endpunkte (Port 9980 - Management API)
|
|
|
|
Alle Anfragen an die Management-API müssen authentifiziert sein.
|
|
- **Header-Format:** `X-Api-Key: <Schlüssel>`
|
|
|
|
### Partners (Partner)
|
|
|
|
#### `GET /api-v1/partners`
|
|
Gibt eine paginierte Liste aller Partner zurück.
|
|
|
|
**Request Parameters (Query):**
|
|
- `search` (string, optional): Filtert nach Name/E-Mail.
|
|
- `page` (integer, default: 1)
|
|
- `pageSize` (integer, default: 20)
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"page": 1,
|
|
"pageSize": 20,
|
|
"totalCount": 1,
|
|
"totalPages": 1,
|
|
"hasNextPage": false,
|
|
"hasPreviousPage": false,
|
|
"items": [
|
|
{
|
|
"id": "string (UUID)",
|
|
"name": "string",
|
|
"email": "string",
|
|
"erpId": "string"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### `GET /api-v1/partners/{id}`
|
|
Holt Partner-Details zu einer bestimmten ID.
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"id": "string (UUID)",
|
|
"name": "string",
|
|
"email": "string",
|
|
"erpId": "string"
|
|
}
|
|
```
|
|
|
|
### Customers (Kunden von Partnern)
|
|
|
|
#### `GET /api-v1/partners/{partnerId}/customers`
|
|
Gibt eine paginierte Liste aller Kunden eines bestimmten Partners zurück.
|
|
|
|
**Request Parameters (Query):**
|
|
- `search` (string, optional): Filtert nach Name/E-Mail.
|
|
- `page` (integer, default: 1)
|
|
- `pageSize` (integer, default: 20)
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"page": 1,
|
|
"pageSize": 20,
|
|
"totalCount": 1,
|
|
"totalPages": 1,
|
|
"hasNextPage": false,
|
|
"hasPreviousPage": false,
|
|
"items": [
|
|
{
|
|
"id": "string (UUID)",
|
|
"name": "string",
|
|
"street": "string",
|
|
"houseNumber": "string",
|
|
"houseNumberAddon": "string",
|
|
"zipCode": "string",
|
|
"city": "string",
|
|
"countryCode": "string",
|
|
"email": "string",
|
|
"partnerId": "string (UUID)",
|
|
"erpId": "string"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### `GET /api-v1/partners/{partnerId}/customers/{customerId}`
|
|
Holt detaillierte Kundeninformationen.
|
|
|
|
**Response `200 OK` (`application/json`):**
|
|
```json
|
|
{
|
|
"id": "string (UUID)",
|
|
"name": "string",
|
|
"street": "string",
|
|
"houseNumber": "string",
|
|
"houseNumberAddon": "string",
|
|
"zipCode": "string",
|
|
"city": "string",
|
|
"countryCode": "string",
|
|
"email": "string",
|
|
"partnerId": "string (UUID)",
|
|
"erpId": "string",
|
|
"partnerName": "string",
|
|
"taxNumber": "string",
|
|
"vatIdNumber": "string",
|
|
"notes": "string",
|
|
"locations": []
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Typen & Schemas
|
|
|
|
### `LicenseData`
|
|
```json
|
|
{
|
|
"id": "string",
|
|
"serialNumber": "string",
|
|
"productId": "string",
|
|
"filename": "string",
|
|
"content": "string" // Base64 Byte-Inhalt
|
|
}
|
|
```
|
|
|
|
### `ProblemDetails`
|
|
```json
|
|
{
|
|
"type": "string",
|
|
"title": "string",
|
|
"status": 0,
|
|
"detail": "string",
|
|
"instance": "string"
|
|
}
|
|
```
|
|
|