# Regenerate Service Token ## Tujuan Membuat token baru untuk service token yang sudah ada. Token lama langsung direvoke. Digunakan saat token hilang, bocor, atau perlu dirotasi. ## Business Rule - Token lama direvoke terlebih dahulu (is_active = false) - Token baru dibuat dengan name dan service yang sama - Token baru disinkronkan ke `geonetagent_dev.agent_tokens` - Token lama di-revoke di `geonetagent_dev.agent_tokens` - **Downtime window:** antara revoke token lama dan distribusi token baru ke microservice - Token plain text ditampilkan **sekali** — harus disimpan saat itu juga ## URL `POST https://console.gisportal.id/api/v1/service-tokens/{id}/regenerate` ## HTTP Method `POST` ## Authentication ``` Authorization: Bearer ``` ## Request Parameter | Parameter | Tipe | Keterangan | |-----------|------|------------| | `id` | UUID | ID service token yang akan di-regenerate | ## Request Body (opsional) ```json { "expires_in_days": 90 } ``` Jika tidak disertakan, token baru tidak expire (null). ## Response Success **HTTP 200** ```json { "data": { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "GeoNetAgent-Production", "service": "GeoNetAgent", "token_prefix": "Xk9mPqR2nLvWsJhY", "token": "Xk9mPqR2nLvWsJhYaB7cDeFgHiJkLmNoPqRsTuVwXyZ", "is_active": true, "expires_at": null, "created_by": "admin", "created_at": "2026-06-23T10:00:00+07:00" }, "message": "Service token regenerated successfully. Save the new token securely as it will not be shown again." } ``` ## Response Error **HTTP 404:** ```json { "error": { "code": "NOT_FOUND", "message": "Service token not found" } } ``` ## Status Code | Code | Kondisi | |------|---------| | 200 | Token berhasil di-regenerate | | 401 | Tidak terautentikasi | | 404 | Token ID tidak ditemukan | ## Contoh Request ```bash curl -s -X POST \ https://console.gisportal.id/api/v1/service-tokens/065eb796-ecb5-4d95-b4cd-9ca6244cf13f/regenerate \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" ``` ## Sequence Flow ```mermaid sequenceDiagram Client->>API: POST /service-tokens/{id}/regenerate API->>DB(databaselist_app): Ambil token lama API->>DB(databaselist_app): Revoke token lama (is_active=false) API->>DB(geonetagent_dev): Revoke di agent_tokens (sync) API->>API: Generate token baru API->>DB(databaselist_app): INSERT service_tokens baru API->>DB(geonetagent_dev): INSERT agent_tokens baru (sync) API->>AuditLog: log service_token_regenerated API-->>Client: 200 {token_baru (sekali tampil)} ``` ## Dampak ke Microservice GeoNetAgent Setelah regenerate, agent yang masih menggunakan token lama akan mendapat **401** dari collector. **Langkah yang diperlukan:** 1. Copy token baru dari response 2. Update `config.json` di semua PC client agent: ```json { "agent_token": "" } ``` 3. Distribusikan via GPO atau manual 4. Agent akan menggunakan token baru pada posting berikutnya ## Audit Log Event: `service_token_regenerated` ## Idempotent Tidak — setiap regenerate menghasilkan token baru. ## Changelog | Tanggal | Perubahan | |---------|-----------| | 2026-06-23 | Endpoint dibuat |