chore(tests): подтвердить маскирование заполненных секретов интеграций
This commit is contained in:
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
|
||||
@@ -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
@@ -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).
|
||||
@@ -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 не сохранены.
|
||||
|
||||
@@ -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 открыта.
|
||||
@@ -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 открыта.
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user