#!/bin/bash # Tes API project-search (Ollama + indeks NAS) dari reverse proxy 10.100.1.24 # # Usage (di server .24): # # OAuth2 Client Credentials (disarankan): # export PROJECT_SEARCH_OAUTH_CLIENT_ID='a2072649-3215-4701-af9f-d89d13875105' # export PROJECT_SEARCH_OAUTH_CLIENT_SECRET='...' # ./scripts/test-project-search.sh # # LDAP JWT: # export PROJECT_SEARCH_API_USER='admin' # export PROJECT_SEARCH_API_PASS='password-ldap' # ./scripts/test-project-search.sh "carikan projek Pertamina" # # API token statis: # export PROJECT_SEARCH_API_TOKEN='dbl_...' # ./scripts/test-project-search.sh # # Dari laptop (upload + jalankan): # scp -o MACs=hmac-sha1 scripts/test-project-search.sh root@10.100.1.24:/tmp/ # ssh -m hmac-sha1 root@10.100.1.24 -p 22 "chmod +x /tmp/test-project-search.sh && \ # PROJECT_SEARCH_OAUTH_CLIENT_ID=... PROJECT_SEARCH_OAUTH_CLIENT_SECRET=... /tmp/test-project-search.sh" set -euo pipefail API_BASE="${PROJECT_SEARCH_API_BASE:-http://127.0.0.1:8091}" QUERY="${1:-carikan projek Pertamina}" LIMIT="${PROJECT_SEARCH_LIMIT:-10}" SOURCES_JSON="${PROJECT_SEARCH_SOURCES:-[\"project\"]}" OAUTH_CLIENT_ID="${PROJECT_SEARCH_OAUTH_CLIENT_ID:-a2072649-3215-4701-af9f-d89d13875105}" OAUTH_SCOPE="${PROJECT_SEARCH_OAUTH_SCOPE:-project-search:read}" if ! command -v curl >/dev/null 2>&1; then echo "curl tidak ditemukan." >&2 exit 1 fi json_pretty() { if command -v python3 >/dev/null 2>&1; then python3 -m json.tool elif command -v jq >/dev/null 2>&1; then jq . else cat fi } json_get() { local expr="$1" python3 -c "import sys,json; d=json.load(sys.stdin); print($expr)" } echo "==> API base: ${API_BASE}" echo "==> Query : ${QUERY}" echo if [[ -n "${PROJECT_SEARCH_API_TOKEN:-}" ]]; then TOKEN="$PROJECT_SEARCH_API_TOKEN" echo "==> Auth: API token (prefix ${TOKEN:0:8}...)" elif [[ -n "${PROJECT_SEARCH_OAUTH_CLIENT_SECRET:-}" ]]; then if ! command -v python3 >/dev/null 2>&1; then echo "python3 diperlukan untuk parse OAuth token JSON." >&2 exit 1 fi echo "==> Auth: OAuth2 Client Credentials" echo " client_id: ${OAUTH_CLIENT_ID}" echo " scope : ${OAUTH_SCOPE}" TOKEN_JSON=$(curl -sf -X POST "${API_BASE}/oauth/token" \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d "grant_type=client_credentials" \ -d "client_id=${OAUTH_CLIENT_ID}" \ -d "client_secret=${PROJECT_SEARCH_OAUTH_CLIENT_SECRET}" \ -d "scope=${OAUTH_SCOPE}") \ || { echo "OAuth token request gagal (cek client_id/secret/scope)." >&2; exit 1; } TOKEN=$(printf '%s' "$TOKEN_JSON" | json_get "d['access_token']") if [[ -z "$TOKEN" ]]; then echo "access_token kosong. Respons:" >&2 printf '%s\n' "$TOKEN_JSON" | json_pretty >&2 exit 1 fi echo " Token OK (${#TOKEN} chars)" elif [[ -n "${PROJECT_SEARCH_API_USER:-}" && -n "${PROJECT_SEARCH_API_PASS:-}" ]]; then if ! command -v python3 >/dev/null 2>&1; then echo "python3 diperlukan untuk parse login JSON." >&2 exit 1 fi echo "==> Auth: LDAP JWT — ${PROJECT_SEARCH_API_USER}" LOGIN_JSON=$(curl -sf -X POST "${API_BASE}/api/v1/auth/login" \ -H 'Content-Type: application/json' \ -d "{\"username\":\"${PROJECT_SEARCH_API_USER}\",\"password\":\"${PROJECT_SEARCH_API_PASS}\"}") \ || { echo "Login API gagal (cek kredensial / LDAP)." >&2; exit 1; } TOKEN=$(printf '%s' "$LOGIN_JSON" | json_get "d['data']['access_token']") if [[ -z "$TOKEN" ]]; then echo "Token kosong. Respons login:" >&2 printf '%s\n' "$LOGIN_JSON" | json_pretty >&2 exit 1 fi echo " Token OK (${#TOKEN} chars)" else echo "Set salah satu metode auth:" >&2 echo " PROJECT_SEARCH_OAUTH_CLIENT_SECRET (+ optional PROJECT_SEARCH_OAUTH_CLIENT_ID)" >&2 echo " PROJECT_SEARCH_API_USER + PROJECT_SEARCH_API_PASS" >&2 echo " PROJECT_SEARCH_API_TOKEN" >&2 exit 1 fi AUTH_HEADER="Authorization: Bearer ${TOKEN}" echo echo "==> GET /api/v1/project-search/sources" curl -sf "${API_BASE}/api/v1/project-search/sources" -H "$AUTH_HEADER" | json_pretty echo echo "==> GET /api/v1/project-search/index/status" curl -sf "${API_BASE}/api/v1/project-search/index/status" -H "$AUTH_HEADER" | json_pretty echo echo "==> POST /api/v1/project-search/ask" ASK_BODY=$(cat <&2; exit 1; } printf '%s\n' "$ASK_RESP" | json_pretty echo if command -v python3 >/dev/null 2>&1; then COUNT=$(printf '%s' "$ASK_RESP" | json_get "len(d.get('data',{}).get('results',[]))") ANSWER=$(printf '%s' "$ASK_RESP" | json_get "d.get('data',{}).get('answer','')[:300]") echo "==> Ringkasan: ${COUNT} hasil" echo "==> Jawaban (300 char pertama):" echo "$ANSWER" fi echo echo "OK — project-search API merespons."