An open API service indexing awesome lists of open source software.

https://github.com/mspilari/spring_login

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.
https://github.com/mspilari/spring_login

java jwt-token mailtrap spring-boot spring-data-jpa spring-security

Last synced: 2 months ago
JSON representation

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.

Awesome Lists containing this project

README

          

# 🇺🇸 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

```plaintext
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:

```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/
spring.datasource.username=
spring.datasource.password=
```

### SMTP (Mailtrap)

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

```properties
spring.mail.username=
spring.mail.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:

```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):

```properties
jwt.expiration=300
token.expiration.seconds=300
```

## Running the Project

1. Clone the repository:

```bash
git clone https://github.com/MSpilari/spring_login.git
cd login_app
```

2. Compile and run the application with Maven:

```bash
./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/login`: 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**

```json
{ "message": "User created successfully" }
```

- **Error**
```json
{
"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

```plaintext
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`:

```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/
spring.datasource.username=
spring.datasource.password=
```

### SMTP (Mailtrap)

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

```properties
spring.mail.username=
spring.mail.password=
```

**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:

```properties
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):

```properties
jwt.expiration=300
token.expiration.seconds=300
```

## Executando o Projeto

1. Clone o repositório:

```bash
git clone https://github.com/MSpilari/spring_login.git
cd login_app
```

2. Compile e execute a aplicação com o Maven:

```bash
./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/login`: 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**

```json
{ "message": "User created successfully" }
```

- **Erro**
```json
{
"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.