Збережіть свій перший credential
Створіть персональний default-credential, прочитайте його маскованим і подивіться, як перемкнеться credential-status.
Основний write-шлях сервісу: зберегти ключ, переконатися, що він скрізь маскований, і побачити, як платформа визнає його тим, на чому працюватимуть ваші переклади.
Мета
Закінчити з активним default персональним credential для одного провайдера — і з credential-status, що називає user ефективним джерелом.
Передумови
- Код провайдера та його обов'язкові секретні поля — зі сценарію 01.
$CREDS_BASE,$TOKEN.
Кроки
1. Перевірте статус «до»
Викличте GET /v1/providers/{code}/credential-status. Очікуване 200 із "user_credentials_configured": false — ще нічого не налаштовано.
2. Створіть credential
Викличте POST /v1/credentials:
curl -s -X POST "$CREDS_BASE/v1/credentials" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"provider_code": "'$CODE'",
"name": "My first key",
"credentials": {"api_key": "sk-live-0123456789abcdef"},
"make_default": true
}'
Очікуване 201: запис з owner_type: "user", status: "active", is_default: true, version: 1 — і masked_credentials замість вашого секрету (у стилі sk-***cdef). Збережіть id.
3. Прочитайте його назад — досі масковано
import httpx
headers = {"Authorization": f"Bearer {TOKEN}"}
record = httpx.get(f"{CREDS_BASE}/v1/credentials/{cred_id}", headers=headers).json()
assert record["masked_credentials"]["api_key"] != "sk-live-0123456789abcdef"
assert "credentials" not in record # the plaintext field simply does not exist here
Очікувано: жодна відповідь користувацької площини ніколи не несе секрет. Списковий вигляд (GET /v1/credentials) показує той самий запис із тією самою маскою.
4. Перевірте статус «після»
Повторіть крок 1. Очікувано: "user_credentials_configured": true і "effective_credential_source": "user" — resolve тепер віддав би ваш ключ.
Перевірено тестом test_s02_store_your_first_credential.