Este projeto é uma implementação de um formulário web que utiliza tecnologias de segurança modernas para proteger os dados do usuário. O código incorpora tokens CSRF (Cross-Site Request Forgery) nos cookies e nos campos do formulário para prevenir ataques que forçam um usuário endossado a executar ações indesejadas. Além disso, utiliza tokens JWT (JSON Web Token) para autenticação, garantindo que apenas usuários autorizados possam acessar determinados recursos.
Os currículos cadastrados podem ser acessados através do endpoint /login. Por exemplo, para visualizar os currículos em um ambiente de desenvolvimento local, você usaria a URL http://127.0.0.1:5000/login
- Sobre o Projeto
- Instalação
- Configuração do Projeto
- Configuração da Base de Dados PostgreSQL
- Executando o Projeto
- Endpoints
- Registros de Eventos e Acessos (Logs)
- Contribuição
- Licença
- Contato
Durante o primeiro acesso ao endpoint "/" (http://127.0.0.1:5000/ em caso de acesso local), será solicitado que você cadastre o primeiro administrador do sistema. Por favor, seja cauteloso e memorize a senha informada, pois ela será necessária para futuros acessos e operações administrativas. Não há uma funcionalidade de recuperação de senha implementada, portanto, a perda da senha do administrador pode resultar em dificuldades de acesso.
Este projeto é desenvolvido em Python, uma linguagem de programação de alto nível amplamente utilizada para desenvolvimento web. Antes de iniciar a instalação, certifique-se de que o Python e o pip (Package Installer for Python), o gerenciador de pacotes padrão do Python, estão instalados em seu sistema. O pip é usado para instalar e gerenciar pacotes de software escritos em Python.
Antes de prosseguir com a instalação das dependências, certifique-se de que você está no diretório raiz do projeto.
Para instalar as dependências necessárias, execute o seguinte comando no terminal:
pip install -r requirements.txt
Este guia irá ajudá-lo a configurar a base de dados PostgreSQL para o seu projeto.
Esses passos só são necessários se você não possuir uma base de dados postgresql
- PostgreSQL instalado. Se você estiver usando um sistema operacional baseado em Unix, pode instalar o PostgreSQL com o seguinte comando:
sudo apt update && sudo apt install postgresql
- Acesso a um terminal ou linha de comando
- Privilégios de administrador (se estiver em um sistema operacional baseado em Unix)
-
- Iniciar serviço do postgresql:
sudo service postgresql start
- Iniciar serviço do postgresql:
-
-
Criar uma nova base de dados: Primeiro, mude para o usuário postgres:
sudo -i -u postgres || sudo su postgres
Em seguida, inicie o prompt de comando do PostgreSQL:
psql
Agora, crie a nova base de dados:
CREATE DATABASE dbname;
Substitua
"dbname"
pelo nome que você deseja dar à sua base de dados.
-
-
- Configurar o acesso à base de dados: Ainda no prompt de comando do PostgreSQL, crie um novo usuário e conceda a ele os privilégios necessários:
Substitua
CREATE USER user WITH ENCRYPTED PASSWORD 'password'; GRANT ALL PRIVILEGES ON DATABASE dbname TO user;
"user"
pelo nome de usuário desejado e"password"
pela senha desejada.
- Configurar o acesso à base de dados: Ainda no prompt de comando do PostgreSQL, crie um novo usuário e conceda a ele os privilégios necessários:
-
- Configurar o host da base de dados: O host da base de dados geralmente é "localhost" para uma base de dados local. Se a sua base de dados estiver em um servidor remoto, você precisará do endereço IP ou do nome do domínio do servidor.
-
- Sair do PostgreSQL e voltar ao usuário normal:
\q exit
- Sair do PostgreSQL e voltar ao usuário normal:
Agora você deve ter a base de dados PostgreSQL configurada para o seu projeto. Lembre-se de substituir os valores de "DB_NAME"
, "DB_USERNAME"
, "DB_PASSWORD"
e "DB_HOST"
pelos valores corretos para o seu ambiente. Para mais informações sobre a instalação e uso do postgresql, consulte este guia.
Este projeto requer algumas configurações que são definidas no arquivo .env
. Abaixo estão as variáveis de ambiente que você precisa configurar:
Importante: Para valores que contêm espaços no arquivo .env, certifique-se de envolvê-los em aspas duplas. Isso garante que o espaço seja interpretado corretamente como parte do valor, e não como um delimitador. Caso restem dúvidas sobre a configuração do arquivo
.env
, veja o arquivo.env.example
.
NUMERO_MAXIMO_TENTATIVAS
: Número de tentativas de login incorretas.BLOQUEIO_DE_LOGIN
: Tempo de bloqueio de login em segundos após atingir o número máximo de tentativas de login incorretas. (86400 = 1 dia)
NOME_REMETENTE
: Nome do remetente (pode ser o mesmo do email).EMAIL_REMENTENTE
: Email do remetente (gmail).SENHA_REMETENTE
: Senhas de app Gerada pelo Google (account.google.com).
EMAIL_DESTINATARIOS:
Email do destinatário. Separe por virgula [","] (dentro das aspas) para mais de um destinatário.
DB_NAME
: Nome da Base de dados.DB_USERNAME
: Nome de usuário da base de dados.DB_PASSWORD
: Senha da Base de dados.DB_HOST
: Host da base de dados.
Por favor, substitua os valores das variáveis de ambiente no arquivo .env
pelos valores corretos para o seu ambiente. Lembre-se de não compartilhar o arquivo .env
ou qualquer outro arquivo que contenha informações sensíveis, como senhas ou chaves de API, em repositórios públicos.
Para executar esse projeto use o seguite comando:
python3 -m app
Esse são alguns endpoints desse projeto:
-
GET /login
: Este endpoint é usado para autenticar um usuário. Ele espera receber um nome de usuário e senha no corpo da solicitação e define o token jtw e csrf, ambos validos por 30 minutos. -
GET /admin
: Este endpoint é usado para renderizar a página de administração. Ele é protegido por JWT e CSRF, o que significa que o cliente deve fornecer um token JWT válido no cabeçalho de autorização da solicitação e um token CSRF no cookie para acessar este endpoint. -
GET /candidatos
: Este endpoint é usado para renderizar a página 'candidatos.html', onde onde pode ser encontradas informações sobre as pessoas que enviaram seus curriculos. -
DELETE /api/logout
: Este endpoint é usado para encerrar a sessão do usuário do lado do servidor -
GET /api/curriculos
: Esta rota retorna uma lista de currículos de candidatos. Ela é protegida por JWT e CSRF, o que significa que o cliente deve fornecer um token JWT válido no cabeçalho de autorização da solicitação e um token CSRF no cookie para acessar esta rota. A rota aceita dois parâmetros opcionais na URL:offset
elimit
, que são usados para implementar a paginação dos resultados. Por padrão,offset
é 0 elimit
é 10. -
GET /api/estatisticas
: Esta rota retorna as estatísticas do sistema. Ela é protegida por JWT e CSRF, o que significa que o cliente deve fornecer um token JWT válido no cabeçalho de autorização da solicitação e um token CSRF no cookie para acessar esta rota. As estatísticas retornadas incluem o número total de candidatos, entrevistadores e administradores no banco de dados. Se ocorrer um erro ao obter as estatísticas, a rota retornará um erro 500 com uma mensagem de erro.
Por favor, note que outros endpoints podem ser encontrados no main.py
Este projeto possui um sistema de registro que inclui tanto logs de erros quanto logs de acessos. Esses registros são fundamentais para monitorar e entender as atividades que ocorrem durante a execução do projeto, sendo particularmente úteis para identificar e corrigir problemas, bem como analisar o comportamento dos usuários.
Os logs são gerados automaticamente e podem ser localizados no diretório "logs", que é criado após a primeira execução do projeto.
Contribuições são o que fazem a comunidade open source um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito apreciada.
Distribuído sob a licença GNU GPL. Veja LICENSE
para mais informações.
Elisson Rodrigues - elissonrodrigues98@gmail.com