9
respostas

Error em utilizar o grep no hook

Estou tentando utilizar uma condicional em um pre-commit é apresenta erro, no grep no linux executa direito e no arquivo do git pre-commit não consegue realizar a a validação correta.

#!/bin/sh

if [ grep -E "[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}|[0-9]{7}-[0-9]{2}|[0-9]{11}" $1 ]; then echo "Encontrou cpf"; else echo "Não tem cpf "; fi

Poderiam informar o motivo do erro?

9 respostas

Olá jrumiato, tudo bem? Você poderia passar mais detalhes do que você está tentando fazer? O que você deseja fazer com essa condicional no pre-commit? Não entendi muito bem seu problema, pode detalhar melhor pra gente tentar encontrar uma solução?

Fico aguardando retorno!

Estou tentando validar se o usuário está tentando subir para o repositório algum cpf:
gostaria de também validar se é um cpf válido.

Certo, entendi! De ante mão acho que nessa regex:

[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}|[0-9]{7}-[0-9]{2}|[0-9]{11}

No segundo bloco você colocou |[0-9]{7}-[0-9]{2}| porém deve ser |[0-9]{9}-[0-9]{2}| correto?

Agora qual é o erro que acontece? Pode colocar aqui qual o erro que é apresentado pra eu verificar corretamente o problema.

Fico aguardando retorno!

Olá Jonilson,

consegui realizar as verificação com esse código:

#!/bin/sh

echo 'Ferramenta de validação de envio de dados sensíveis!'

- Expressão regular verifica o padrão de CPF por pontos e uma seguencia de 11 números

if git grep -E '(\b[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}\b|\b[0-9]{11}\b)' then exit 1; fi

Mas não consigo obter o os valores para realizar a verificação se são CPF válidos

Teria alguma dica?

Pois o funcionamento do hooks no git é um pouco diferente de um shell script.

Bem, se você deseja realmente verificar se o CPF é válido, você pode dar uma olhada nesse post, até porque isso é tem um certo grau de dificuldade principalmente para fazer isso diretamente em shell script, então não seria melhor verificar isso de outra forma? E porque alguém pode digitar em um commit? Não entendi bem foi essa parte! Não entendo se precisar de algum dado sensível é melhor colocar diretamente no GitHub, na parte de Secrets. Poderia explicar melhor essa lógica? Assim posso tentar ti ajudar de outra maneira!

Boa tarde, Jonilson

Minha ideia seria utilizar o pre-commit do hook do git para não permitir que desenvolvedor pudesse commitar cpfs válidos no código.

Entendi! Então você chegou a verificar o link que eu indiquei no outro post? E outra, talvez não seria melhor fazer esse processo usado a integração contínua, no caso do GitHub temos o GitHub Actions, e nele podemos fazer uma serie de coisas que podem ser executadas sempre que um push ou pull request foi feito, assim seria mais tranquilo fazer isso.

Boa tarde, Jonilson

cheguei a ler o link que mandou e já tinha e estava utilizando como exemplo o qual não funcionou da mesma forma no git hooks, queria fazer isso no git para depois tratar na integração continua usando o gitlab. O que você acha ? Conseguiu descobrir se consigo obter o valores para que possa realizar algo parecido com que o link que me mandou ?

Bem, agora entendi, você pensa em fazer isso para evitar que um commit seja feito com algum CPF válido, só que isso é realmente algo muito especifico e nunca tinha pensado a respeito, até porque todo e qualquer atributo ou variável que usamos (desenvolvedores) tentamos nunca deixar diretamente no código (hard code), porque isso é uma má prática além de ser altamente perigoso. Mas bem o que vi foi esse tópico no stack overflow que segue mais ou menos a sua ideia, nele o autor faz um loop em todos os arquivos do commit, e vai adicionando em outra variavel os arquivos que se encaixam na condição e depois que finaliza o loop ele retorna o que foi encontrada ou então aprova o commit.

Porém você usa regex, então poderia também usar como base esse outro arquivo de pre-commit que usa regex e comparação só que os testes são com variáveis estáticas colocadas dentro do código mesmo.

Espero ter ajudado!