import { criarOcorrencia } from '../../../types/index.js';
export const detectorCircleCISecurity = {
    nome: 'detector-circleci-security',
    categoria: 'security',
    descricao: 'Detecta vulnerabilidades em CircleCI configs',
    test: (relPath) => relPath.endsWith('.circleci/config.yml'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        const linhas = src.split('\n');
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            if (/\b(TOKEN|SECRET|PASSWORD|KEY|ACCESS_KEY)\b.*:\s*['"][^'"]+['"]/i.test(linha) && !/\$/.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'circleci-hardcoded-secret',
                    nivel: 'erro',
                    mensagem: 'Secret hardcoded detectada no bloco environment',
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Use as "Contexts" ou "Environment Variables" do CircleCI (Project Settings > Environment Variables)'
                }));
            }
            if (/\bimage:\s*[^\s@]+:latest\b/.test(linha) || (/\bimage:\s*[^\s@:]+$/.test(linha.trim()) && linha.includes('image:'))) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'circleci-image-latest',
                    nivel: 'aviso',
                    mensagem: 'Uso de imagem :latest ou sem tag específica',
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Use um digest (SHA) ou uma versão fixa para garantir segurança e reprodutibilidade'
                }));
            }
        });
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-circleci-security.js.map