Авторизация через JWT

#!/usr/bin/env python3
"""
Вариант 1: Авторизация через JWT.
  1. Логинимся POST /user/login -> получаем JWT
  2. Кладём JWT в заголовок "token"
  3. Отправляем картинку на POST /v1/kyc/process
"""
import requests
import json
import sys

# ===== НАСТРОЙКИ =====
API_BASE = "https://api.neuro-vision.ru"
LOGIN_URL = f"{API_BASE}/v1/user/login"
PROCESS_URL = f"{API_BASE}/v1/kyc/process"

# Креды для логина
LOGIN = "your_email@example.com"   # <-- подставить email
PASSWORD = "your_password"          # <-- подставить пароль

SCHEMA_ID = "your-schema-id"       # <-- подставить schemaId из ЛК
IMAGE_PATH = "path/to/your/image.jpg"  # <-- путь к изображению

TIMEOUT = (30, 120)


# --- Шаг 1: получаем JWT ---
print("Шаг 1: Логин...")
resp = requests.post(
    LOGIN_URL,
    json={"email": LOGIN, "password": PASSWORD, "valid_days": 5},
    timeout=TIMEOUT,
)
print(f"  Login status: {resp.status_code}")

login_data = resp.json()
print(f"  Response: {json.dumps(login_data, ensure_ascii=False, indent=2)}")

if resp.status_code != 200:
    sys.exit(f"Ошибка логина: {resp.status_code}")

jwt = login_data.get("token") or login_data.get("jwt") or login_data.get("accessToken")
if not jwt:
    sys.exit(f"JWT не найден в ответе. Ключи: {list(login_data.keys())}")

print(f"  JWT получен: {jwt[:20]}...")

# --- Шаг 2: отправляем картинку с JWT в заголовке ---
print(f"nШаг 2: Отправляем {IMAGE_PATH}...")
headers = {
    "Token": jwt,
}

data = {
    "schemaId": SCHEMA_ID,
    "mode": "sync",
}

with open(IMAGE_PATH, "rb") as f:
    files = [("images", (IMAGE_PATH.split("/")[-1], f, "image/jpeg"))]
    resp = requests.post(
        PROCESS_URL,
        headers=headers,
        data=data,
        files=files,
        timeout=TIMEOUT,
    )

print(f"Status: {resp.status_code}")
try:
    print(json.dumps(resp.json(), ensure_ascii=False, indent=2))
except Exception:
    print(resp.text)