chore(tests): подтвердить маскирование заполненных секретов интеграций

This commit is contained in:
Denozordec committed 2026-10-13 16:32:58 +07:00
1 parent 3c30c5c7cb
commit 7a58f472b3
8 files changed
+149 -12

No files matched your search

@@ -0,0 +1,22 @@
import assert from 'node:assert/strict'
import fs from 'node:fs'
import {randomBytes} from 'node:crypto'
const database=process.env.MMAPP_OWN_SQL_DB,url=new URL(process.env.DATABASE_URL)
assert(/^mm_accept_166_\d+$/.test(database??''));assert.equal(url.pathname,'/'+database);assert.equal(url.username,database)
process.env.AUTH_REQUIRED='true';process.env.AUTH_JWT_SECRET=randomBytes(32).toString('hex');process.env.AUTH_ISSUER='https://own203.invalid';process.env.AUTH_PORTAL_URL='https://own203.invalid'
const {pool,closePool}=await import('/app/backend/dist/db/index.js'),{initDatabase}=await import('/app/backend/dist/db/bootstrap.js'),{buildApp}=await import('/app/backend/dist/index.js')
assert.equal((await pool.query('SELECT current_database() AS name')).rows[0].name,database);assert(Object.values((await pool.query('SELECT rolsuper,rolcreatedb,rolcreaterole,rolbypassrls FROM pg_roles WHERE rolname=current_user')).rows[0]).every(v=>v===false))
const secrets={s3:'own203-'+randomBytes(16).toString('hex'),evo:'own203-'+randomBytes(16).toString('hex'),telegram:'12345:'+randomBytes(24).toString('base64url')},cases=[];let app,requests=0;const originalFetch=globalThis.fetch;globalThis.fetch=async()=>{requests++;throw Error('External fetch forbidden in owned secret DTO test')}
const report={date:'2026-10-13',block:'12.5.203',database,scope:'Actual compiled buildApp/auth/GET handlers and own restricted PostgreSQL with nonempty synthetic credentials; isolated signed test JWT, not real Portal login',cases,passed:false}
try{
await initDatabase()
await pool.query("INSERT INTO backup_storage_settings(id,provider,s3_endpoint,s3_access_key_id,s3_secret_access_key) VALUES(1,'local','https://s3.own.invalid','OWN203_PUBLIC_ACCESS_ID',$1) ON CONFLICT(id) DO UPDATE SET s3_secret_access_key=$1",[secrets.s3])
await pool.query("INSERT INTO evobgp_settings(id,base_url,api_key,enabled) VALUES(1,'https://evo.own.invalid',$1,false) ON CONFLICT(id) DO UPDATE SET api_key=$1",[secrets.evo])
await pool.query("INSERT INTO alert_telegram_settings(id,bot_token,chat_id) VALUES(1,$1,'0') ON CONFLICT(id) DO UPDATE SET bot_token=$1",[secrets.telegram])
app=await buildApp({logger:false,startScheduler:false});await app.ready()
for(const role of ['reader','admin']){const permissions=['mm:backups:read','mm:alerts:read',...(role==='admin'?['mm:settings:admin']:[])];const jwt=app.jwt.sign({sub:'own203-'+role,apps:['mm'],permissions,iss:process.env.AUTH_ISSUER},{expiresIn:'5m'});for(const path of ['/api/backups/storage','/api/evobgp/settings','/api/alerts']){const r=await app.inject({method:'GET',url:path,headers:{authorization:'Bearer '+jwt}});assert.equal(r.statusCode,role==='reader'&&path.includes('evobgp')?403:200);for(const secret of Object.values(secrets))assert(!r.body.includes(secret));if(r.statusCode===200){const dto=r.json();if(path.includes('storage')||path.includes('evobgp'))assert.equal(dto.secretConfigured,true);else assert.equal(dto.telegram.tokenConfigured,true)}cases.push({role,path,status:r.statusCode,syntheticSecretExposed:false,configuredFlag:r.statusCode===200});}}
for(const path of ['/api/backups/storage','/api/evobgp/settings','/api/alerts']){assert.equal((await app.inject({method:'GET',url:path})).statusCode,401);cases.push({role:'unauthenticated',path,status:401})}
assert.equal((await pool.query('SELECT s3_secret_access_key FROM backup_storage_settings WHERE id=1')).rows[0].s3_secret_access_key,secrets.s3);assert.equal((await pool.query('SELECT api_key FROM evobgp_settings WHERE id=1')).rows[0].api_key,secrets.evo);assert.equal((await pool.query('SELECT bot_token FROM alert_telegram_settings WHERE id=1')).rows[0].bot_token,secrets.telegram);assert.equal(requests,0);report.externalRequests=0;report.storedSyntheticSecretsUnchanged=true;report.passed=true
}catch(e){report.errorName=e.name;fs.writeFileSync('/app/backend/acceptance/secret203-private.log',String(e.stack??e),{mode:0o600})}
finally{globalThis.fetch=originalFetch;if(app)await app.close();await closePool();fs.writeFileSync('/app/backend/acceptance/secret203-result.json',JSON.stringify(report,null,2));console.log(JSON.stringify(report))}
if(!report.passed)process.exitCode=1
+10 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -696,7 +696,7 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
@@ -2464,3 +2464,11 @@ Own DB/role/container и Portal reader user удалены, отдельный p
Telegram в рабочем приложении действительно настроен и доставлял сообщения201: reader alerts DTO не содержит raw bot token. S3/EvoBGP secrets в текущем стенде не заполнены; их маскирование populated credentials не объявляется доказанным данным read-only прогоном. Source audit подтвердил DTO secretConfigured уbackup/EvoBGP, GeoIP только metadata, speedProbeRead безpassword. App config/credentials не менялись, native commands не запрашивались. Собственный reader удалён204. Вспомогательный драйвер сначала ошибся на JSON parsing пустого204cleanup; исправлен на nullable response body, actual removal уже произошёл; финальный прогон successful/cleaned.
Протокол: [actual reader API](ux-ui/acceptance/reader202-live-api-2026-10-13.json). Это scoped DTO audit10 endpoints, не аудит binary backup/cert export или произвольных embedded credentials в errors. Следующий203: собственная ограниченная PostgreSQL DB с синтетическими заполненными S3/EvoBGP/Telegram secrets, actual compiled handlers/JWT, без send/network probe.12.5 открыта.
## 12.5.203 — маскирование заполненных секретов интеграций (2026-10-13)
Actual compiled buildApp/auth/GET handlers ux-lock200 проверены на собственной ограниченной PostgreSQL роли/БД с непустыми синтетическими S3 secret access key, EvoBGP API key и Telegram bot token. JWT подписаны штатным Fastify тестовым RAM-secret/issuer: это изолированные test JWT, не real Portal login (реальный reader был проверен202). startScheduler=false, global fetch запрещён и считает обращения.
9 проверок reader/admin/noJWT ×backup storage/EvoBGP settings/alerts: разрешённые DTO200 содержат secretConfigured/tokenConfigured=true, но не сохранённые секреты. Reader EvoBGP403, безJWT401. Хранимые значения всех3 секретов неизменны, externalRequests0. S3 provider local/EvoBGP disabled, реальных probe/send/job не выполнялось. Own DB/role/container удалены. Первый драйвер попытался импортировать dev-only jose из production image и не запустил cases; исправлен на штатный app.jwt.sign, никакой зависимости/продуктового кода не добавлялось. Оба временных окружения очищены. PostgreSQL выдал warning о concurrent query наclient в существующем repeatable-read alerts overview; это совместимо с текущим pg8, не объявлено pg9 acceptance.
Протокол: [owned SQL masks9](ux-ui/acceptance/secret203-sql-2026-10-13.json). Это scoped DTO proof, не S3 connectivity, EvoBGP execution, Telegram transport (принят201) или аудит всехexport/error text. Runtime не менялся. Следующий204: actual Portal reader/admin navigation основных разделов ПК/телефон после auth199, GET/overflow/page errors и отсутствие mutation requests.12.5 открыта.
+3 -3
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-13. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-13
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты.
@@ -371,6 +371,6 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
+9 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -38,6 +38,14 @@
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–196 и ограничения ниже. Runtime backend/frontend ux-peak196. |
## 12.5.203 — маскирование заполненных секретов интеграций (2026-10-13)
Actual compiled buildApp/auth/GET handlers ux-lock200 проверены на собственной ограниченной PostgreSQL роли/БД с непустыми синтетическими S3 secret access key, EvoBGP API key и Telegram bot token. JWT подписаны штатным Fastify тестовым RAM-secret/issuer: это изолированные test JWT, не real Portal login (реальный reader был проверен202). startScheduler=false, global fetch запрещён и считает обращения.
9 проверок reader/admin/noJWT ×backup storage/EvoBGP settings/alerts: разрешённые DTO200 содержат secretConfigured/tokenConfigured=true, но не сохранённые секреты. Reader EvoBGP403, безJWT401. Хранимые значения всех3 секретов неизменны, externalRequests0. S3 provider local/EvoBGP disabled, реальных probe/send/job не выполнялось. Own DB/role/container удалены. Первый драйвер попытался импортировать dev-only jose из production image и не запустил cases; исправлен на штатный app.jwt.sign, никакой зависимости/продуктового кода не добавлялось. Оба временных окружения очищены. PostgreSQL выдал warning о concurrent query наclient в существующем repeatable-read alerts overview; это совместимо с текущим pg8, не объявлено pg9 acceptance.
Протокол: [owned SQL masks9](ux-ui/acceptance/secret203-sql-2026-10-13.json). Это scoped DTO proof, не S3 connectivity, EvoBGP execution, Telegram transport (принят201) или аудит всехexport/error text. Runtime не менялся. Следующий204: actual Portal reader/admin navigation основных разделов ПК/телефон после auth199, GET/overflow/page errors и отсутствие mutation requests.12.5 открыта.
## 12.5.202 — чтение административных интеграций без раскрытия секретов (2026-10-13)
На actual deployed ux-lock200 создан собственный Portal reader с mm:servers/alerts/backups/uptime/traffic:read, без writer/admin.10 real GET endpoints: servers, alerts, outbox, backup storage, uptime settings/speed probes, traffic flow settings, GeoIP200; EvoBGP settings/scheduler403. Для тех же10 endpoints безJWT401. Дополнительно server details200 с password пустым. Recursive response check не нашёл непустых password/botToken/token/apiKey/secretAccessKey/privateKey/licenseKey и известных CHR/bot test secrets. Значения credentials в evidence не сохранены.
+11 -3
View File
@@ -1,8 +1,8 @@
# Оставшаяся внешняя приёмка — 2026-10-13
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Это актуальная матрица после 12.5.202. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это актуальная матрица после 12.5.203. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-lock200`, frontend `ux-portal199`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
@@ -26,7 +26,7 @@
## Следующая последовательность — 2026-10-13
1. **203 — populated secret DTOs:** собственная DB, синтетические S3/EvoBGP/Telegram credentials, real compiled handlers/JWT; без внешних probe/send или изменений рабочих credentials.
1. **204 — live section navigation:** actual Portal reader/admin, ПК/телефон; scoped check общего auth возврата, API GET, errors/overflow, без mutations.
2. **Профильный контроль:** для новых изменений выполнять затронутые SQL/API/UI проверки. Общая регрессия192 выполнена; не повторять её без изменений общей основы или нового основания.
3. **Внешние зависимости:** Portal issuer/login/revoke, Telegram bot/chat/разрешённое сообщение, клиентские ОС, независимые WAN/public IPv6 и scale/multi-instance — отдельные группы по таблице выше. Ограничения текущего стенда не превращать в обещание приёмки всех конфигураций.
@@ -1380,3 +1380,11 @@ Own DB/role/container и Portal reader user удалены, отдельный p
Telegram в рабочем приложении действительно настроен и доставлял сообщения201: reader alerts DTO не содержит raw bot token. S3/EvoBGP secrets в текущем стенде не заполнены; их маскирование populated credentials не объявляется доказанным данным read-only прогоном. Source audit подтвердил DTO secretConfigured уbackup/EvoBGP, GeoIP только metadata, speedProbeRead безpassword. App config/credentials не менялись, native commands не запрашивались. Собственный reader удалён204. Вспомогательный драйвер сначала ошибся на JSON parsing пустого204cleanup; исправлен на nullable response body, actual removal уже произошёл; финальный прогон successful/cleaned.
Протокол: [actual reader API](ux-ui/acceptance/reader202-live-api-2026-10-13.json). Это scoped DTO audit10 endpoints, не аудит binary backup/cert export или произвольных embedded credentials в errors. Следующий203: собственная ограниченная PostgreSQL DB с синтетическими заполненными S3/EvoBGP/Telegram secrets, actual compiled handlers/JWT, без send/network probe.12.5 открыта.
## 12.5.203 — маскирование заполненных секретов интеграций (2026-10-13)
Actual compiled buildApp/auth/GET handlers ux-lock200 проверены на собственной ограниченной PostgreSQL роли/БД с непустыми синтетическими S3 secret access key, EvoBGP API key и Telegram bot token. JWT подписаны штатным Fastify тестовым RAM-secret/issuer: это изолированные test JWT, не real Portal login (реальный reader был проверен202). startScheduler=false, global fetch запрещён и считает обращения.
9 проверок reader/admin/noJWT ×backup storage/EvoBGP settings/alerts: разрешённые DTO200 содержат secretConfigured/tokenConfigured=true, но не сохранённые секреты. Reader EvoBGP403, безJWT401. Хранимые значения всех3 секретов неизменны, externalRequests0. S3 provider local/EvoBGP disabled, реальных probe/send/job не выполнялось. Own DB/role/container удалены. Первый драйвер попытался импортировать dev-only jose из production image и не запустил cases; исправлен на штатный app.jwt.sign, никакой зависимости/продуктового кода не добавлялось. Оба временных окружения очищены. PostgreSQL выдал warning о concurrent query наclient в существующем repeatable-read alerts overview; это совместимо с текущим pg8, не объявлено pg9 acceptance.
Протокол: [owned SQL masks9](ux-ui/acceptance/secret203-sql-2026-10-13.json). Это scoped DTO proof, не S3 connectivity, EvoBGP execution, Telegram transport (принят201) или аудит всехexport/error text. Runtime не менялся. Следующий204: actual Portal reader/admin navigation основных разделов ПК/телефон после auth199, GET/overflow/page errors и отсутствие mutation requests.12.5 открыта.
+9 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -3769,3 +3769,11 @@ Own DB/role/container и Portal reader user удалены, отдельный p
Telegram в рабочем приложении действительно настроен и доставлял сообщения201: reader alerts DTO не содержит raw bot token. S3/EvoBGP secrets в текущем стенде не заполнены; их маскирование populated credentials не объявляется доказанным данным read-only прогоном. Source audit подтвердил DTO secretConfigured уbackup/EvoBGP, GeoIP только metadata, speedProbeRead безpassword. App config/credentials не менялись, native commands не запрашивались. Собственный reader удалён204. Вспомогательный драйвер сначала ошибся на JSON parsing пустого204cleanup; исправлен на nullable response body, actual removal уже произошёл; финальный прогон successful/cleaned.
Протокол: [actual reader API](ux-ui/acceptance/reader202-live-api-2026-10-13.json). Это scoped DTO audit10 endpoints, не аудит binary backup/cert export или произвольных embedded credentials в errors. Следующий203: собственная ограниченная PostgreSQL DB с синтетическими заполненными S3/EvoBGP/Telegram secrets, actual compiled handlers/JWT, без send/network probe.12.5 открыта.
## 12.5.203 — маскирование заполненных секретов интеграций (2026-10-13)
Actual compiled buildApp/auth/GET handlers ux-lock200 проверены на собственной ограниченной PostgreSQL роли/БД с непустыми синтетическими S3 secret access key, EvoBGP API key и Telegram bot token. JWT подписаны штатным Fastify тестовым RAM-secret/issuer: это изолированные test JWT, не real Portal login (реальный reader был проверен202). startScheduler=false, global fetch запрещён и считает обращения.
9 проверок reader/admin/noJWT ×backup storage/EvoBGP settings/alerts: разрешённые DTO200 содержат secretConfigured/tokenConfigured=true, но не сохранённые секреты. Reader EvoBGP403, безJWT401. Хранимые значения всех3 секретов неизменны, externalRequests0. S3 provider local/EvoBGP disabled, реальных probe/send/job не выполнялось. Own DB/role/container удалены. Первый драйвер попытался импортировать dev-only jose из production image и не запустил cases; исправлен на штатный app.jwt.sign, никакой зависимости/продуктового кода не добавлялось. Оба временных окружения очищены. PostgreSQL выдал warning о concurrent query наclient в существующем repeatable-read alerts overview; это совместимо с текущим pg8, не объявлено pg9 acceptance.
Протокол: [owned SQL masks9](ux-ui/acceptance/secret203-sql-2026-10-13.json). Это scoped DTO proof, не S3 connectivity, EvoBGP execution, Telegram transport (принят201) или аудит всехexport/error text. Runtime не менялся. Следующий204: actual Portal reader/admin navigation основных разделов ПК/телефон после auth199, GET/overflow/page errors и отсутствие mutation requests.12.5 открыта.
+10 -2
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -708,7 +708,7 @@ flowchart LR
## 12.5.77 — основной блок IPsec (2026-10-09)
Актуальное продолжение 2026-10-13:202 reader actual Portal JWT audit10 GET endpoints +server detail passed, secrets absent, admin-only403/noJWT401; fixture удалена.201 цельный Telegram live/human receipt принят;200 collector crash/observed lock-loss fixed/deployed. Runtime backend ux-lock200/frontend ux-portal199. Следующий203 — заполненные S3/EvoBGP/Telegram secrets в own SQL, не рабочие credentials.12.5 открыта.
Актуальное продолжение 2026-10-13:203 populated secret DTO tests9 passed (reader/admin/noJWT) на actual compiled backend/own PG, nonempty synthetic S3/EvoBGP/Telegram secrets скрыты, flags true, stored values unchanged, external fetch0. Backend ux-lock200/frontend ux-portal199. Следующий204 — scoped live PC/mobile section navigation reader/admin после общих auth changes.12.5 открыта.
Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md).
@@ -2195,3 +2195,11 @@ Own DB/role/container и Portal reader user удалены, отдельный p
Telegram в рабочем приложении действительно настроен и доставлял сообщения201: reader alerts DTO не содержит raw bot token. S3/EvoBGP secrets в текущем стенде не заполнены; их маскирование populated credentials не объявляется доказанным данным read-only прогоном. Source audit подтвердил DTO secretConfigured уbackup/EvoBGP, GeoIP только metadata, speedProbeRead безpassword. App config/credentials не менялись, native commands не запрашивались. Собственный reader удалён204. Вспомогательный драйвер сначала ошибся на JSON parsing пустого204cleanup; исправлен на nullable response body, actual removal уже произошёл; финальный прогон successful/cleaned.
Протокол: [actual reader API](ux-ui/acceptance/reader202-live-api-2026-10-13.json). Это scoped DTO audit10 endpoints, не аудит binary backup/cert export или произвольных embedded credentials в errors. Следующий203: собственная ограниченная PostgreSQL DB с синтетическими заполненными S3/EvoBGP/Telegram secrets, actual compiled handlers/JWT, без send/network probe.12.5 открыта.
## 12.5.203 — маскирование заполненных секретов интеграций (2026-10-13)
Actual compiled buildApp/auth/GET handlers ux-lock200 проверены на собственной ограниченной PostgreSQL роли/БД с непустыми синтетическими S3 secret access key, EvoBGP API key и Telegram bot token. JWT подписаны штатным Fastify тестовым RAM-secret/issuer: это изолированные test JWT, не real Portal login (реальный reader был проверен202). startScheduler=false, global fetch запрещён и считает обращения.
9 проверок reader/admin/noJWT ×backup storage/EvoBGP settings/alerts: разрешённые DTO200 содержат secretConfigured/tokenConfigured=true, но не сохранённые секреты. Reader EvoBGP403, безJWT401. Хранимые значения всех3 секретов неизменны, externalRequests0. S3 provider local/EvoBGP disabled, реальных probe/send/job не выполнялось. Own DB/role/container удалены. Первый драйвер попытался импортировать dev-only jose из production image и не запустил cases; исправлен на штатный app.jwt.sign, никакой зависимости/продуктового кода не добавлялось. Оба временных окружения очищены. PostgreSQL выдал warning о concurrent query наclient в существующем repeatable-read alerts overview; это совместимо с текущим pg8, не объявлено pg9 acceptance.
Протокол: [owned SQL masks9](ux-ui/acceptance/secret203-sql-2026-10-13.json). Это scoped DTO proof, не S3 connectivity, EvoBGP execution, Telegram transport (принят201) или аудит всехexport/error text. Runtime не менялся. Следующий204: actual Portal reader/admin navigation основных разделов ПК/телефон после auth199, GET/overflow/page errors и отсутствие mutation requests.12.5 открыта.
@@ -0,0 +1,75 @@
{
"date": "2026-10-13",
"block": "12.5.203",
"database": "mm_accept_166_1791883862303",
"scope": "Actual compiled buildApp/auth/GET handlers and own restricted PostgreSQL with nonempty synthetic credentials; isolated signed test JWT, not real Portal login",
"cases": [
{
"role": "reader",
"path": "/api/backups/storage",
"status": 200,
"syntheticSecretExposed": false,
"configuredFlag": true
},
{
"role": "reader",
"path": "/api/evobgp/settings",
"status": 403,
"syntheticSecretExposed": false,
"configuredFlag": false
},
{
"role": "reader",
"path": "/api/alerts",
"status": 200,
"syntheticSecretExposed": false,
"configuredFlag": true
},
{
"role": "admin",
"path": "/api/backups/storage",
"status": 200,
"syntheticSecretExposed": false,
"configuredFlag": true
},
{
"role": "admin",
"path": "/api/evobgp/settings",
"status": 200,
"syntheticSecretExposed": false,
"configuredFlag": true
},
{
"role": "admin",
"path": "/api/alerts",
"status": 200,
"syntheticSecretExposed": false,
"configuredFlag": true
},
{
"role": "unauthenticated",
"path": "/api/backups/storage",
"status": 401
},
{
"role": "unauthenticated",
"path": "/api/evobgp/settings",
"status": 401
},
{
"role": "unauthenticated",
"path": "/api/alerts",
"status": 401
}
],
"passed": true,
"externalRequests": 0,
"storedSyntheticSecretsUnchanged": true,
"cleanup": {
"ownedDatabaseRoleContainerRemoved": true
},
"bounds": [
"No S3/EvoBGP connection or Telegram send tested",
"Known DTO fields only; binary backups/exports and arbitrary embedded error credentials not audited"
]
}