Lewati ke konten utama

Authentication

API listen di 0.0.0.0:8090, jadi siapa aja di network yang sama bisa nyampe. File PIN di %APPDATA%\Seraph\pin.txt ngegate aksesnya. PIN sendiri diprint pas startup (PIN=<6 digit> at <path>) dan rotate per process.

Flow

# 1. Tukar PIN dengan token long-lived.
curl -s -X POST http://localhost:8090/auth/pin \
-H 'content-type: application/json' \
-d '{"pin":"798465"}'
{ "token": "DLqXoY3WJmWqf3rL...0+9pjSjuBKP" }
# 2. Pasang token di setiap call selanjutnya.
curl -s http://localhost:8090/api/bots \
-H 'authorization: Bearer DLqXoY3WJmWqf3rL...0+9pjSjuBKP'

Token juga bisa dikirim sebagai ?token=<token> di query string — berguna buat <img> / EventSource yang gak bisa set header.

Endpoints

GET /health

Tanpa auth. Dipake monitor / load balancer external buat cek apakah process-nya hidup.

Response (200, text/plain):

ok

POST /auth/pin

Tukar PIN lokal dengan bearer token long-lived.

Body:

{ "pin": "798465" }

Response (200):

{ "token": "<base64-48-byte-token>" }

Errors:

StatusBody
401{"error":"wrong pin"}
429{"error":"locked, retry in 38s"}

GET /api-info

Helper bearer-protected yang dipake webview embedded buat discover port + token-nya sendiri. Berguna sebagai ping "token-ku masih hidup gak setelah restart?" dari tooling external.

Response (200):

{
"port": 8090,
"token": "<token-yang-sama-yang-baru-dikirim>"
}

Rate limiting

Satu token-bucket di /auth/pin ngelambatin attempt brute-force. Setelah salah PIN beberapa kali, bucket-nya kunci dan return:

429 Too Many Requests
{"error":"locked, retry in 38s"}

Bucket per-process; restart Seraph reset semuanya. PIN-nya 6 digit = 1.000.000 candidate, tapi bucket cap di ~12 percobaan/menit, jadi brute-force beneran butuh >50 hari rata-rata.