token-project-access-delete
/**
- @fileoverview Удаление токенов бота: доступ по проекту (владелец/коллаборатор)
- @description DELETE использует
requireTokenOwnership/hasProjectAccess, - как POST/PUT. Сырой Telegram token не отдаётся в list/status (маска). */
Поток
- UI / MCP →
DELETE /api/projects/{projectId}/tokens/{tokenId} - Middleware
requireTokenOwnership→ реальныйprojectIdтокена →hasProjectAccess - Хендлер сверяет URL
projectIdс токеном (404 при несовпадении) stopBot→deleteBotToken→ WStoken-deleted
Безопасность
- Коллаборатор может удалять токены проекта (как создавать/менять настройки)
- Посторонний — 403
- IDOR по чужому
projectIdв URL — 404 GET .../tokensиbot-status.instanceбез сырогоtoken(маска / omit)GET /api/projects/:id/bot/statuses— те же публичные инстансы списком, доступ черезrequireProjectAccess- MCP
db_delete_bot_tokenтолько сconfirm: true
Источники правды
- projects.md — HTTP DELETE
- tokens.md — list DTO
- realtime-events.md —
token-deleted - bot-builder.md — MCP
Ключевые файлы
| Файл | Роль |
|---|---|
server/routes/botTokens/handlers/deleteProjectTokenHandler.ts | DELETE project-scoped |
server/routes/botTokens/to-public-bot-token.ts | DTO без секретов |
server/middleware/requireResourceOwnership.ts | ACL |
lib/bot-tools/bot-runtime-db.ts | deleteBotTokenInDb |