Перенесены секреты из .env в SM
This commit is contained in:
+30
-59
@@ -5,41 +5,25 @@
|
||||
cd /opt/han-chat/backend
|
||||
umask 077
|
||||
|
||||
read -r -p "Тестовый номер в E.164 (+79...): " TEST_PHONE
|
||||
|
||||
CHALLENGE_ID=$(python3 -c 'import uuid; print(uuid.uuid4())')
|
||||
OTP_CODE=$(python3 -c 'import secrets; print(f"{secrets.randbelow(1000000):06d}")')
|
||||
|
||||
SMS_TOKEN=$(python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
|
||||
for line in Path(".env").read_text().splitlines():
|
||||
if line.startswith("SMS_SERVICE_TOKEN="):
|
||||
print(line.split("=", 1)[1].strip().strip("\"'"))
|
||||
break
|
||||
else:
|
||||
raise SystemExit("SMS_SERVICE_TOKEN отсутствует")
|
||||
PY
|
||||
)
|
||||
|
||||
export TEST_PHONE CHALLENGE_ID OTP_CODE SMS_TOKEN
|
||||
REQUEST_FILE=$(mktemp)
|
||||
|
||||
python3 - "$REQUEST_FILE" <<'PY'
|
||||
read -r -p "Тестовый номер в E.164 (+79...): " TEST_PHONE
|
||||
python3 - "$REQUEST_FILE" "$TEST_PHONE" <<'PY'
|
||||
import json
|
||||
import os
|
||||
import secrets
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
challenge_id = str(uuid.uuid4())
|
||||
payload = {
|
||||
"idempotency_key": f"ops:smoke:{os.environ['CHALLENGE_ID']}",
|
||||
"idempotency_key": f"ops:smoke:{challenge_id}",
|
||||
"template_code": "auth_otp",
|
||||
"locale": "ru",
|
||||
"phone_e164": os.environ["TEST_PHONE"],
|
||||
"phone_e164": sys.argv[2],
|
||||
"substitutions": {
|
||||
"code": os.environ["OTP_CODE"],
|
||||
"code": f"{secrets.randbelow(1000000):06d}",
|
||||
"ttl_min": "1",
|
||||
},
|
||||
"customer_ref": os.environ["CHALLENGE_ID"],
|
||||
"customer_ref": challenge_id,
|
||||
"message_ttl_sec": 60,
|
||||
}
|
||||
|
||||
@@ -51,16 +35,20 @@ PY
|
||||
## Создайте функцию отправки:
|
||||
|
||||
send_sms_smoke() {
|
||||
deployment/secrets/han-secrets run --config .env -- \
|
||||
docker compose --env-file .env --profile ops run --rm --no-deps \
|
||||
--user 0:0 \
|
||||
--entrypoint sh \
|
||||
-e SMS_TOKEN \
|
||||
-v /run/han-chat/secrets/SMS_SERVICE_TOKEN:/run/secrets/sms_service_token:ro \
|
||||
-v "$REQUEST_FILE:/tmp/sms-request.json:ro" \
|
||||
toolbox -ec '
|
||||
umask 077
|
||||
printf "Authorization: Bearer %s\n" \
|
||||
"$(cat /run/secrets/sms_service_token)" > /tmp/auth-header
|
||||
curl -sS \
|
||||
-w "\nHTTP %{http_code}\n" \
|
||||
-X POST \
|
||||
-H "Authorization: Bearer $SMS_TOKEN" \
|
||||
-H @/tmp/auth-header \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-Request-ID: ops-sms-smoke" \
|
||||
--data-binary @/tmp/sms-request.json \
|
||||
@@ -90,7 +78,7 @@ LIMIT 5;
|
||||
|
||||
## После проверки удалите секретные данные:
|
||||
shred -u "$REQUEST_FILE" 2>/dev/null || rm -f "$REQUEST_FILE"
|
||||
unset SMS_TOKEN OTP_CODE TEST_PHONE CHALLENGE_ID REQUEST_FILE
|
||||
unset TEST_PHONE REQUEST_FILE
|
||||
|
||||
# Тесты
|
||||
|
||||
@@ -138,33 +126,12 @@ HTTP 403
|
||||
|
||||
### 3. Проверить Basic auth внутри Docker-сети
|
||||
|
||||
Получите credentials из `.env`:
|
||||
|
||||
```bash
|
||||
CB_USER=$(python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
for line in Path(".env").read_text().splitlines():
|
||||
if line.startswith("IDGTL_SMS_CALLBACK_USERNAME="):
|
||||
print(line.split("=", 1)[1].strip().strip("\"'"))
|
||||
break
|
||||
PY
|
||||
)
|
||||
|
||||
CB_PASS=$(python3 - <<'PY'
|
||||
from pathlib import Path
|
||||
for line in Path(".env").read_text().splitlines():
|
||||
if line.startswith("IDGTL_SMS_CALLBACK_PASSWORD="):
|
||||
print(line.split("=", 1)[1].strip().strip("\"'"))
|
||||
break
|
||||
PY
|
||||
)
|
||||
|
||||
export CB_USER CB_PASS
|
||||
```
|
||||
Credentials получает только дочерний процесс через secret launcher.
|
||||
|
||||
Неверные credentials:
|
||||
|
||||
```bash
|
||||
deployment/secrets/han-secrets run --config .env -- \
|
||||
docker compose --env-file .env --profile ops run --rm --no-deps \
|
||||
--entrypoint sh toolbox -ec '
|
||||
curl -sS -o /dev/null -w "HTTP %{http_code}\n" \
|
||||
@@ -180,10 +147,20 @@ docker compose --env-file .env --profile ops run --rm --no-deps \
|
||||
Правильные credentials:
|
||||
|
||||
```bash
|
||||
deployment/secrets/han-secrets run --config .env -- \
|
||||
docker compose --env-file .env --profile ops run --rm --no-deps \
|
||||
--entrypoint sh -e CB_USER -e CB_PASS toolbox -ec '
|
||||
--entrypoint sh \
|
||||
-v /run/han-chat/secrets/IDGTL_SMS_CALLBACK_USERNAME:/run/secrets/callback_user:ro \
|
||||
-v /run/han-chat/secrets/IDGTL_SMS_CALLBACK_PASSWORD:/run/secrets/callback_password:ro \
|
||||
toolbox -ec '
|
||||
umask 077
|
||||
{
|
||||
printf "user = \"%s:%s\"\n" \
|
||||
"$(cat /run/secrets/callback_user)" \
|
||||
"$(cat /run/secrets/callback_password)"
|
||||
} > /tmp/curl-auth.conf
|
||||
curl -sS -o /dev/null -w "HTTP %{http_code}\n" \
|
||||
-u "$CB_USER:$CB_PASS" \
|
||||
--config /tmp/curl-auth.conf \
|
||||
-H "Content-Type: application/json" \
|
||||
--data "[]" \
|
||||
http://sms-service:8080/callbacks/idgtl/sms
|
||||
@@ -192,12 +169,6 @@ docker compose --env-file .env --profile ops run --rm --no-deps \
|
||||
|
||||
Ожидается `HTTP 422`: авторизация прошла, но пустой callback-массив невалиден.
|
||||
|
||||
После проверки:
|
||||
|
||||
```bash
|
||||
unset CB_USER CB_PASS
|
||||
```
|
||||
|
||||
### 4. Проверить реальный callback Direct
|
||||
|
||||
После тестовой SMS:
|
||||
|
||||
Reference in New Issue
Block a user