Skip to content

Login application with user authentication and password recovery features. Includes modules for user management, email notifications, and error handling to ensure secure login and account recovery.

Notifications You must be signed in to change notification settings

MSpilari/spring_login

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇺🇸 Login Application API

This application is an authentication API for user management with password recovery via email, built using Spring Boot and JWT for authentication. Its goal is to provide a secure system for user registration, login, password recovery, and reset.

Features

  • User registration with email and password validation
  • Login with JWT authentication
  • Password recovery with email link delivery
  • Password reset via link with a temporary token
  • Field validation and error handling

Technologies and Dependencies

  • Java 17
  • Spring Boot 3 (Spring Security, Spring Data JPA, Spring Mail)
  • PostgreSQL (relational database)
  • JWT for authentication
  • Mailtrap (for email testing)
  • BCrypt for password hashing
  • Maven for dependency management

Project Structure

login_app/
├── .mvn/                       # Maven folder (Maven configurations)
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── dev/
│   │   │       └── mspilari/
│   │   │           └── login_app/
│   │   │               ├── configs/           # Security, authentication, etc., configurations
│   │   │               ├── domains/           # Application's main domains
│   │   │               │   ├── email/         # Email-related logic
│   │   │               │   └── user/          # User-related logic
│   │   │               ├── exceptions/        # Custom exceptions and error handling
│   │   │               └── utils/             # Utilities and helpers
│   │   └── resources/                         # Resources (e.g., configuration files)
│   └── test/                                  # Application tests
├── target/                                    # Compilation output folder generated by Maven
├── .gitattributes                             # Git attributes configuration
├── .gitignore                                 # Git ignore file
├── docker-compose.yaml                        # Docker Compose configuration
├── HELP.md                                    # Project help documentation
├── mvnw                                       # Maven Wrapper script for Linux
├── mvnw.cmd                                   # Maven Wrapper script for Windows
└── pom.xml                                    # Maven configuration file

Main Folder Descriptions

  • configs/: Contains project configurations, likely related to security (e.g., JWT, authentication).
  • domains/: Application domain logic, including classes for email and user functionalities.
  • exceptions/: Handles custom exceptions for better error management.
  • utils/: General utilities to support various functionalities.

Prerequisites

  • Java 17+
  • PostgreSQL (create a database for the application and configure credentials in application.properties)
  • Mailtrap for capturing emails in the development environment (or another SMTP service)

Configuration

Database

Configure your database credentials in the application.properties file:

spring.datasource.url=jdbc:postgresql://localhost:5432/<DATABASE_NAME>
spring.datasource.username=<USERNAME>
spring.datasource.password=<PASSWORD>

SMTP (Mailtrap)

Set your Mailtrap or other SMTP service credentials in the env.properties file:

spring.mail.username=<MAILTRAP_USERNAME>
spring.mail.password=<MAILTRAP_PASSWORD>

Note: The env.properties file is imported in application.properties using the line spring.config.import=classpath:env.properties.

JWT

JWT public and private keys are loaded in application.properties. Place your keys in the resources folder as public.key and private.key, and configure the properties:

jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key

Expiration Settings

Define the expiration time for the JWT token and the password reset token (in seconds):

jwt.expiration=300
token.expiration.seconds=300

Running the Project

  1. Clone the repository:

    git clone https://github.com/MSpilari/spring_login.git
    cd login_app
  2. Compile and run the application with Maven:

    ./mvnw spring-boot:run
  3. The application will be available at http://localhost:8080.

API Endpoints

Authentication

  • POST /user/register: Creates a new user. Body: { "email": "user@example.com", "password": "password" }
  • POST /user/#: Logs in and returns a JWT token. Body: { "email": "user@example.com", "password": "password" }

Password Recovery

  • POST /user/redeem-password: Sends an email for password reset. Body: { "email": "user@example.com" }
  • POST /user/reset-password: Resets the password using a reset token. Body: { "token": "reset_token", "password": "newPassword" }

Example Responses

  • Success

    { "message": "User created successfully" }
  • Error

    {
      "errorMessage": "Invalid login credentials",
      "errorStatusCode": "400 BAD_REQUEST"
    }

Exceptions and Error Handling

The system handles specific exceptions for validation and authentication, providing user-friendly messages with the appropriate HTTP status code.

Future Improvements

  • Implementation of differentiated roles and more granular access permissions
  • Detailed logging for auditing and security analysis
  • Integration with a secret management system for sensitive variables in production

Contribution

Contributions are welcome! Follow the steps for creating pull requests and review.


🇧🇷 Login Application API

Esta aplicação é uma API de autenticação para gerenciamento de usuários com recuperação de senha via email, utilizando Spring Boot e JWT para autenticação. O objetivo é fornecer um sistema seguro de registro, login, recuperação e redefinição de senha.

Funcionalidades

  • Registro de usuários com validação de email e senha
  • Login com autenticação JWT
  • Recuperação de senha com envio de link por email
  • Redefinição de senha via link com token temporário
  • Validação de campos e manipulação de erros

Tecnologias e Dependências

  • Java 17
  • Spring Boot 3 (Spring Security, Spring Data JPA, Spring Mail)
  • PostgreSQL (banco de dados relacional)
  • JWT para autenticação
  • Mailtrap (para simulação de envio de emails)
  • BCrypt para hashing de senhas
  • Maven para gerenciamento de dependências

Estrutura do Projeto

login_app/
├── .mvn/                       # Pasta do Maven (configurações do Maven)
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── dev/
│   │   │       └── mspilari/
│   │   │           └── login_app/
│   │   │               ├── configs/           # Configurações de segurança, autenticação, etc.
│   │   │               ├── domains/           # Domínios principais da aplicação
│   │   │               │   ├── email/         # Lógica relacionada a email
│   │   │               │   └── user/          # Lógica relacionada ao usuário
│   │   │               ├── exceptions/        # Exceções personalizadas e tratamento de erros
│   │   │               └── utils/             # Utilitários e helpers
│   │   └── resources/                         # Recursos (ex: arquivos de configuração)
│   └── test/                                  # Testes da aplicação
├── target/                                    # Pasta de compilação gerada pelo Maven
├── .gitattributes                             # Configurações de atributos Git
├── .gitignore                                 # Arquivo para ignorar arquivos no Git
├── docker-compose.yaml                        # Configuração Docker Compose
├── HELP.md                                    # Documentação de ajuda do projeto
├── mvnw                                       # Script Maven Wrapper para Linux
├── mvnw.cmd                                   # Script Maven Wrapper para Windows
└── pom.xml                                    # Arquivo de configuração Maven

Descrição das Pastas Principais

  • configs/: Contém configurações do projeto, provavelmente relacionadas à segurança (ex.: JWT, autenticação).
  • domains/: Estrutura de domínio da aplicação, onde estão as classes e lógicas específicas para email e user (usuário).
  • exceptions/: Contém classes para tratamento de exceções personalizadas, melhorando o controle de erros.
  • utils/: Utilitários gerais que auxiliam em diversas funcionalidades.

Pré-requisitos

  • Java 17+
  • PostgreSQL (crie um banco de dados para a aplicação e configure as credenciais em application.properties)
  • Mailtrap para captura de emails em ambiente de desenvolvimento (ou outro serviço SMTP)

Configuração

Banco de Dados

Configure as credenciais do banco de dados no arquivo application.properties:

spring.datasource.url=jdbc:postgresql://localhost:5432/<NOME_DO_BANCO>
spring.datasource.username=<USUARIO>
spring.datasource.password=<SENHA>

SMTP (Mailtrap)

Utilize suas credenciais do Mailtrap ou outro serviço de SMTP no arquivo env.properties:

spring.mail.username=<USUARIO_MAILTRAP>
spring.mail.password=<SENHA_MAILTRAP>

Obs: env.properties é importado no application.properties com a linha spring.config.import=classpath:env.properties.

JWT

As chaves públicas e privadas do JWT são carregadas no application.properties. Coloque suas chaves nos arquivos public.key e private.key na pasta resources, e assegure-se de configurar as propriedades:

jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key

Configuração do Tempo de Expiração

Defina o tempo de expiração do token JWT e o tempo de expiração do token de redefinição de senha (em segundos):

jwt.expiration=300
token.expiration.seconds=300

Executando o Projeto

  1. Clone o repositório:

    git clone https://github.com/MSpilari/spring_login.git
    cd login_app
  2. Compile e execute a aplicação com o Maven:

    ./mvnw spring-boot:run
  3. A aplicação estará disponível em http://localhost:8080.

Endpoints da API

Autenticação

  • POST /user/register: Cria um novo usuário. Corpo: { "email": "user@example.com", "password": "password" }
  • POST /user/#: Faz login e retorna um token JWT. Corpo: { "email": "user@example.com", "password": "password" }

Recuperação de Senha

  • POST /user/redeem-password: Envia um email para redefinição de senha. Corpo: { "email": "user@example.com" }
  • POST /user/reset-password: Redefine a senha com base em um token de redefinição. Corpo: { "token": "token_redefinicao", "password": "novaSenha" }

Exemplo de Respostas

  • Sucesso

    { "message": "User created successfully" }
  • Erro

    {
      "errorMessage": "Invalid login credentials",
      "errorStatusCode": "400 BAD_REQUEST"
    }

Exceções e Tratamento de Erros

O sistema lida com exceções específicas para validação e autenticação, lançando mensagens amigáveis com o código de status HTTP correspondente.

Melhorias Futuras

  • Implementação de roles diferenciadas e permissões de acesso mais granulares
  • Logging detalhado para auditoria e análise de segurança
  • Integração com um sistema de gerenciamento de segredos para variáveis sensíveis em produção

Contribuição

Contribuições são bem-vindas! Siga os passos para criação de pull requests e revisão.

About

Login application with user authentication and password recovery features. Includes modules for user management, email notifications, and error handling to ensure secure login and account recovery.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages