Skip to content

leandronowras/password_validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

password_validator

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.

Table of Contents

Getting Started

Locally

Instalar as dependencias

npm i

Iniciar o servidor

npm run server

Docker

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":[]}

Architecture

    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.

Tests

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

image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published