Essa aplicação tem o objetivo de ser uma API para validar uma senha digitada pelo usuário a partir das seguintes regras:
- minSize: tem pelo menos x caracteres.
- minUppercase: tem pelo menos x caracteres maiúsculos
- minLowercase: tem pelo menos x caracteres minúsculos
- minDigit: tem pelo menos x dígitos (0-9)
- minSpecialChars: tem pelo menos x caracteres especiais ( Os caracteres especiais são os caracteres da seguinte string: "!@#$%^&*()-+/{}[]" )
- noRepeted: não tenha nenhum caractere repetido em sequência ( ou seja, "aab" viola esta condição, mas "aba" não)
Todas as regras são opcionais e o retorno da API será em formato JSON informando se a senha foi aceita e um array contendo quais regras não foram atendidas. Caso a senha seja aceita, o array de erros retornará um array vazio.
Instalar as dependencias
npm i
Iniciar o servidor
npm run server
Criar a imagem docker
docker build -t password_validator .
Iniciar o container
docker run --name password_validator -dp 8080:8080 password_validator
Em ambos os casos, a aplicação será iniciada na porta 8080 e com a rota /verify para validar o input Para acessar, é necessário fazer uma requisição POST no formato json passando a senha para ser validada e as regras desejadas no modelo abaixo
curl -X POST -H 'Content-Type: application/json' "http://localhost:8080/verify" -d '{
"password": "TesteSenhaForte!123&",
"rules": [
{"rule": "minSize","value": 8},
{"rule": "minSpecialChars","value": 2},
{"rule": "noRepeted","value": 0},
{"rule": "minDigit","value": 2}
]
}'
Caso a senha seja aceita, o resultado será um json com duas chaves:
- verify: que deve retornar um boolean dizendo se a senha foi validada por todas as regras
- noMatch: que deve retornar uma lista de strings que deve conter quais as regras a senha não passou ou uma lista vazia caso verify seja true.
No caso do exemplo anterior, a resposta seria a seguinte:
{"verify":true,"noMatch":[]}
Seguindo os princípios de Clean Architecture, a entidade Password é uma classe que tem dentro de si as regras de negócio para sua criação. Dentro do arquivo é declarado uma interface com as possíveis regras exigidas pelo usuário, e no construtor, cada regra é validada através de um loop que mapeia a regra com seu respectivo método de tratamento Em cada iteração é armazenado o nome da regra que não foi atendida ( caso exista ), e por fim, o valor da senha é salvo na variável value ( caso todas as regras passem ).
O arquivo Server.ts inicia o servidor declarando a porta da aplicação assim como a sua rota e o tratamento do input para então retornar a resposta.
Cada regra foi testada individualmente, tanto no caso em que a senha está de acordo com a regra quanto no caso em que a senha não atende alguma regra. Também é feito o teste em que todas as regras são usadas em conjunto. Totalizando 22 testes e atingindo 100% de cobertura de testes