mcp-auth: тело enforceBasicLoginGate (закрытие SSO/MFA-байпаса) не покрыто тестами #82
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено в multi-aspect code review всех изменений с коммита
053a9c0d(ветка develop).Грань: test-coverage / security · Severity: warning
Где:
apps/server/src/integrations/mcp/mcp.service.ts:230-277Проблема
enforceBasicLoginGate — ядро security-фикса. 4 нетривиальные ветки: re-surface ошибки validateSsoEnforcement как UnauthorizedException, отсутствие EE MFA-модуля → проход, вызов checkMfaRequirements, reject при userHasMfa||requiresMfaSetup. Тесты используют ЗАГЛУШКУ гейта и проверяют лишь, что resolveMcpSessionConfig вызывает её до login() и шорткатит на throw — реальное тело не исполняется. Регрессия, инвертирующая MFA-условие или сузившая catch вокруг SSO, пройдёт все тесты и заново откроет байпас. (McpService не инстанцируется под текущим jest из-за импорта AuthService → @docmost/transactional, поэтому нужен framework-free вынос или AST-контракт-тест.)
Предлагаемый фикс
Вынести решающую логику гейта в framework-free mcp-auth.helpers.ts (чистая функция: результат validateSsoEnforcement + инжектируемый checkMfaRequirements + флаги) и покрыть все ветки; как минимум — AST-контракт-тест по образцу verify-user-credentials.contract.spec.ts.