# Integration Guide — geonet-console API Panduan integrasi untuk AI Agent dan microservice yang menggunakan geonet-console API. --- ## Alur Integrasi untuk AI Agent (JWT) ``` Langkah 1: Login POST /api/v1/auth/login ↓ Langkah 2: Simpan access_token ↓ Langkah 3: Gunakan token pada setiap request Authorization: Bearer ↓ Langkah 4: Jika response 401 → Login ulang ↓ Langkah 5: Jika response 403 → Token tidak punya scope yang cukup ``` --- ## Alur Integrasi untuk Microservice (API Token / Service Token) ``` Langkah 1: Admin buat API Token atau Service Token di /api-clients ↓ Langkah 2: Simpan token di .env atau config microservice ↓ Langkah 3: Gunakan pada setiap request Authorization: Bearer ↓ Langkah 4: Token tidak expire kecuali dihapus/direvoke manual ``` --- ## Dependency Antar Service ``` geonet-console ↓ membaca LDAP (Active Directory) — 10.100.1.40 ↓ membaca/menulis PostgreSQL App DB (databaselist_app) — 10.100.1.24 (Docker) ↓ menulis audit PostgreSQL Audit DB (databaselist_audit) — 10.100.1.24 (Docker) ↓ sinkronisasi service tokens PostgreSQL GeoNetAgent DB (geonetagent_dev) — 10.100.1.25 ↓ query project search PostgreSQL Project Search DB (geonet_project_search) — 10.100.1.25 ↓ inference Ollama (VM aiopr) — 10.100.1.26 ``` --- ## GeoNetAgent Integration GeoNetAgent menggunakan **Service Token** untuk autentikasi ke collector. Token dikelola di geonet-console `/api-clients` → **Service Tokens**. Saat token dibuat/regenerate di UI, token otomatis disinkronkan ke `geonetagent_dev.agent_tokens`. ``` Admin buat Service Token di geonet-console ↓ sinkron otomatis geonetagent_dev.agent_tokens (via AgentTokenSyncService) ↓ GeoNetAgent Agent (PowerShell) baca config.json ↓ POST https://agent.gisportal.id/api/v1/agent/report Authorization: Bearer ↓ Collector (FastAPI) validasi token dari agent_tokens ↓ 200 OK / 401 Unauthorized ``` **File config agent:** `GeoNetAgent/agent/config.json` ```json { "collector_url": "https://agent.gisportal.id/api/v1/agent/report", "agent_token": "" } ``` --- ## Contoh SDK ### cURL (wajib) ```bash # Login curl -s -X POST https://console.gisportal.id/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"john.doe","password":"password123"}' # List databases (dengan JWT) curl -s https://console.gisportal.id/api/v1/databases \ -H "Authorization: Bearer " # List service tokens (dengan API Token) curl -s https://console.gisportal.id/api/v1/service-tokens \ -H "Authorization: Bearer " ``` ### Python ```python import requests BASE_URL = "https://console.gisportal.id/api/v1" # Login resp = requests.post(f"{BASE_URL}/auth/login", json={ "username": "john.doe", "password": "password123" }) token = resp.json()["data"]["access_token"] # Gunakan token headers = {"Authorization": f"Bearer {token}"} databases = requests.get(f"{BASE_URL}/databases", headers=headers).json() ``` ### Laravel (PHP) ```php use Illuminate\Support\Facades\Http; $response = Http::post('https://console.gisportal.id/api/v1/auth/login', [ 'username' => 'john.doe', 'password' => 'password123', ]); $token = $response->json('data.access_token'); $databases = Http::withToken($token) ->get('https://console.gisportal.id/api/v1/databases') ->json(); ```