import { messages } from '../../../core/messages/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorGitLabCISecurity = {
    nome: 'detector-gitlab-ci-security',
    categoria: 'security',
    descricao: 'Detecta vulnerabilidades em GitLab CI pipelines',
    test: (relPath) => relPath.endsWith('.gitlab-ci.yml'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        const linhas = src.split('\n');
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            if (/\bimage:\s*[^\s@]+:latest\b/.test(linha) || (/\bimage:\s*[^\s@:]+$/.test(linha.trim()) && linha.includes('image:'))) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'gitlab-ci-image-latest',
                    nivel: 'aviso',
                    mensagem: messages.AnalistaGitlabCiMensagens.imagemLatest,
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Use uma versão específica da imagem (ex: alpine:3.18) para garantir builds reproduzíveis'
                }));
            }
            if (/\b(TOKEN|SECRET|PASSWORD|KEY)\b.*[:=]\s*['"][^'"]+['"]/i.test(linha) && !/\$\{/.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'gitlab-ci-hardcoded-secret',
                    nivel: 'erro',
                    mensagem: messages.AnalistaGitlabCiMensagens.secretHardcoded,
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Use variáveis de ambiente do GitLab (Settings > CI/CD > Variables) e referencie com $VAR'
                }));
            }
            if (/\$\{\s*(CI_COMMIT_TITLE|CI_COMMIT_DESCRIPTION|GITLAB_USER_NAME)\s*\}/.test(linha) && /\s*-\s+/.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'gitlab-ci-script-injection',
                    nivel: 'erro',
                    mensagem: messages.AnalistaGitlabCiMensagens.scriptInjection,
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Evite usar essas variáveis diretamente em comandos de shell ou use aspas duplas corretamente'
                }));
            }
        });
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-gitlab-ci-security.js.map