Skip to content

Commit 0f5b8b6

Browse files
Reformat code
1 parent 73ac9e4 commit 0f5b8b6

16 files changed

Lines changed: 137 additions & 72 deletions

File tree

.github/workflows/defender-for-devops.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ jobs:
3636
runs-on: windows-latest
3737

3838
steps:
39-
- uses: actions/checkout@v4
40-
- uses: actions/setup-dotnet@v4
41-
with:
42-
dotnet-version: |
43-
5.0.x
44-
6.0.x
45-
- name: Run Microsoft Security DevOps
46-
uses: microsoft/security-devops-action@v1.6.0
47-
id: msdo
48-
- name: Upload results to Security tab
49-
uses: github/codeql-action/upload-sarif@v3
50-
with:
51-
sarif_file: ${{ steps.msdo.outputs.sarifFile }}
39+
- uses: actions/checkout@v4
40+
- uses: actions/setup-dotnet@v4
41+
with:
42+
dotnet-version: |
43+
5.0.x
44+
6.0.x
45+
- name: Run Microsoft Security DevOps
46+
uses: microsoft/security-devops-action@v1.6.0
47+
id: msdo
48+
- name: Upload results to Security tab
49+
uses: github/codeql-action/upload-sarif@v3
50+
with:
51+
sarif_file: ${{ steps.msdo.outputs.sarifFile }}

.github/workflows/noir-security.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ name: OWASP Noir Security Scan
33
on:
44
workflow_dispatch:
55
push:
6-
branches: ["main"]
6+
branches: [ "main" ]
77
pull_request:
8-
branches: ["main"]
8+
branches: [ "main" ]
99

1010
permissions:
1111
contents: read

.github/workflows/stale.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name: Mark stale issues and pull requests
77

88
on:
99
schedule:
10-
- cron: '29 12 * * *'
10+
- cron: '29 12 * * *'
1111

1212
jobs:
1313
stale:
@@ -18,10 +18,10 @@ jobs:
1818
pull-requests: write
1919

2020
steps:
21-
- uses: actions/stale@v5
22-
with:
23-
repo-token: ${{ secrets.GITHUB_TOKEN }}
24-
stale-issue-message: 'Stale issue message'
25-
stale-pr-message: 'Stale pull request message'
26-
stale-issue-label: 'no-issue-activity'
27-
stale-pr-label: 'no-pr-activity'
21+
- uses: actions/stale@v5
22+
with:
23+
repo-token: ${{ secrets.GITHUB_TOKEN }}
24+
stale-issue-message: 'Stale issue message'
25+
stale-pr-message: 'Stale pull request message'
26+
stale-issue-label: 'no-issue-activity'
27+
stale-pr-label: 'no-pr-activity'

README.md

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212

1313
## Descripción
1414

15-
SmartPot-API es una API RESTful desarrollada en **Java 17** con **Spring Boot 3.5.7**, diseñada para gestionar el sistema de cultivos inteligentes SmartPot. La aplicación utiliza **MongoDB** como base de datos principal, **Redis** para almacenamiento en caché, y cuenta con autenticación mediante **JWT** (JSON Web Tokens). La API está completamente documentada con **Swagger/OpenAPI** y ofrece múltiples interfaces de documentación (Swagger UI, ReDoc, Scalar).
15+
SmartPot-API es una API RESTful desarrollada en **Java 17** con **Spring Boot 3.5.7**, diseñada para gestionar el
16+
sistema de cultivos inteligentes SmartPot. La aplicación utiliza **MongoDB** como base de datos principal, **Redis**
17+
para almacenamiento en caché, y cuenta con autenticación mediante **JWT** (JSON Web Tokens). La API está completamente
18+
documentada con **Swagger/OpenAPI** y ofrece múltiples interfaces de documentación (Swagger UI, ReDoc, Scalar).
1619

1720
## Tecnologías Principales
1821

@@ -29,6 +32,7 @@ SmartPot-API es una API RESTful desarrollada en **Java 17** con **Spring Boot 3.
2932
- **Maven** - Gestión de dependencias
3033

3134
## Estructura del Proyecto
35+
3236
```
3337
3438
SmartPot-API/
@@ -170,105 +174,135 @@ SmartPot-API/
170174
├── mvnw / mvnw.cmd # Maven Wrapper
171175
└── pom.xml # Configuración de Maven
172176
```
177+
173178
## Descripción de Módulos
174179

175180
### Cache
181+
176182
**Propósito**: Configuración de Redis para almacenamiento en caché.
183+
177184
- `RedisConfig.java`: Configuración de conexión y serialización de Redis.
178185

179186
### Commands
187+
180188
**Propósito**: Gestión de comandos enviados a dispositivos IoT SmartPot.
189+
181190
- **Controlador**: Endpoints REST para crear, leer, actualizar y eliminar comandos.
182191
- **Servicio**: Lógica de negocio para procesamiento de comandos.
183192
- **Repositorio**: Persistencia de comandos en MongoDB.
184193

185194
### Crops
195+
186196
**Propósito**: Administración completa del ciclo de vida de cultivos.
197+
187198
- **Entidades**: `Crop`, `CropStatus`, `CropType`.
188199
- **Validación**: Validadores personalizados para integridad de datos de cultivos.
189200
- **Mapper**: Conversión entre DTOs y entidades usando MapStruct.
190201

191202
### Documentation
203+
192204
**Propósito**: Configuración de documentación automática de la API.
205+
193206
- `SwaggerConfig.java`: Configuración de OpenAPI/Swagger.
194207
- `DocumentController.java`: Endpoints para servir múltiples UIs de documentación.
195208
- **Interfaces disponibles**:
196-
- Swagger UI
197-
- ReDoc
198-
- Scalar
209+
- Swagger UI
210+
- ReDoc
211+
- Scalar
199212

200213
### Exception
214+
201215
**Propósito**: Manejo centralizado de errores y excepciones.
216+
202217
- `ApiHandler.java`: Manejador global de excepciones con `@ControllerAdvice`.
203218
- `ApiException.java`: Excepción personalizada base.
204219
- `InvalidTokenException.java`: Excepción específica para tokens JWT inválidos.
205220
- `EncryptionException.java`: Excepción para errores de cifrado.
206221

207222
### Mail
223+
208224
**Propósito**: Sistema de envío de correos electrónicos.
225+
209226
- **Configuración asíncrona**: `AsyncConfig.java` para envío no bloqueante.
210227
- **Validación**: Validadores para verificar formato de correos.
211228
- **Repositorio**: Historial de correos enviados.
212229

213230
### Notifications
231+
214232
**Propósito**: Sistema de notificaciones a usuarios.
233+
215234
- Gestión de notificaciones push y en tiempo real.
216235
- Registro de historial de notificaciones.
217236

218237
### Records
238+
219239
**Propósito**: Gestión de historial de mediciones de sensores.
240+
220241
- **Entidades**: `History`, `Measures`, `DateRange`.
221242
- **DTOs**: `RecordDTO`, `MeasuresDTO`, `CropRecordDTO`.
222243
- Almacena datos de temperatura, humedad, pH, etc.
223244

224245
### Security
246+
225247
**Propósito**: Autenticación, autorización y seguridad.
248+
226249
- **JWT**: Generación y validación de tokens.
227250
- **Filtros**:
228-
- `JwtAuthFilter`: Validación de tokens en cada request.
229-
- `RateLimitingFilter`: Limitación de tasa de peticiones.
251+
- `JwtAuthFilter`: Validación de tokens en cada request.
252+
- `RateLimitingFilter`: Limitación de tasa de peticiones.
230253
- **CORS**: Configuración de orígenes permitidos.
231254
- **Encriptación**: Servicios de cifrado AES para datos sensibles.
232255

233256
### Users
257+
234258
**Propósito**: Gestión completa de usuarios del sistema.
259+
235260
- **Entidades**: `User`, `UserRole`.
236261
- **Validación**: Expresiones regulares personalizadas (`UserRegex`).
237262
- Autenticación y gestión de perfiles.
238263

239264
### Sessions
265+
240266
**Propósito**: Gestión de sesiones activas de usuarios.
267+
241268
- Registro de dispositivos y tokens activos.
242269
- Control de sesiones concurrentes.
243270

244271
## Guía de Despliegue
245272

246273
### Requisitos Previos
274+
247275
- Java 17 o superior
248276
- Maven 3.9+
249277
- Docker (opcional, para contenedorización)
250278
- MongoDB 4.4+
251279
- Redis 6.0+
252280

253281
### 1. Compilación de la Aplicación
282+
254283
```
255284
bash
256285
# Compilar sin ejecutar tests
257286
mvn clean package -DskipTests -P docker -f pom.xml
258287
```
288+
259289
**Explicación**:
290+
260291
- `clean`: Limpia compilaciones previas.
261292
- `package`: Empaqueta la aplicación en un JAR.
262293
- `-DskipTests`: Omite la ejecución de tests.
263294
- `-P docker`: Activa el perfil de compilación para Docker.
264295

265296
### 2. Construcción de Imagen Docker
297+
266298
```
267299
bash
268300
# Construir imagen para arquitectura AMD64
269301
docker build --platform linux/amd64 -t sebastian190030/api-smartpot:latest .
270302
```
303+
271304
### 3. Publicación en Docker Hub
305+
272306
```
273307
bash
274308
# Login en Docker Hub
@@ -277,16 +311,19 @@ docker login
277311
# Subir imagen
278312
docker push sebastian190030/api-smartpot:latest
279313
```
314+
280315
### 4. Despliegue en Render.com
281316

282317
#### 4.1 Configuración Inicial
318+
283319
1. Crear cuenta en [Render.com](https://render.com)
284320
2. Crear nuevo **Web Service**
285321
3. Seleccionar **Docker** como tipo de despliegue
286322
4. Configurar repositorio: `sebastian190030/api-smartpot`
287323
5. Configurar variables de entorno (ver sección Variables de Entorno)
288324

289325
#### 4.2 Despliegue Automático
326+
290327
```
291328
bash
292329
# Usando deploy hook (Windows)
@@ -295,13 +332,15 @@ cmd /c deploy.render.cmd
295332
# Usando curl directamente
296333
curl -X POST https://api.render.com/deploy/srv-YOUR_SERVICE_ID?key=YOUR_DEPLOY_KEY
297334
```
335+
298336
## 🔧 Configuración
299337

300338
### Variables de Entorno
301339

302340
Copia el archivo `.env.example` a `.env` y configura las siguientes variables:
303341

304342
#### Configuración de la Aplicación
343+
305344
```
306345
bash
307346
APP_NAME=SmartPot-API
@@ -311,7 +350,9 @@ DESCRIPTION=Documentación de la API REST de SmartPot
311350
VERSION=1.0.0
312351
AUTHOR=SmartPot Developers
313352
```
353+
314354
#### MongoDB
355+
315356
```
316357
bash
317358
DATA_CONNECTION_METHOD=mongodb
@@ -321,7 +362,9 @@ DATA_SOURCE_DOMAIN=db-smartpot:27017
321362
DATA_SOURCE_DB=smartpot
322363
DATA_PARAMS=authSource=admin&directConnection=true&serverSelectionTimeoutMS=100000&socketTimeoutMS=10000&appName=mongo
323364
```
365+
324366
#### Redis (Cache)
367+
325368
```
326369
bash
327370
CACHE_TYPE=redis
@@ -340,7 +383,9 @@ CACHE_LETTUCE_POOL_MIN_IDLE=8
340383
CACHE_TIME_TO_LIVE=300000
341384
CACHE_NULL_VALUES=false
342385
```
386+
343387
#### Email (SMTP)
388+
344389
```
345390
bash
346391
MAIL_HOST=mail-smartpot
@@ -350,7 +395,9 @@ MAIL_PASSWORD=password123
350395
MAIL_PROPERTIES_SMTP_AUTH=true
351396
MAIL_PROPERTIES_SMTP_STARTTLS_ENABLE=false
352397
```
398+
353399
#### Seguridad (JWT)
400+
354401
```
355402
bash
356403
SECURITY_JWT_SECRET_KEY=your-secret-key-here
@@ -359,25 +406,33 @@ SECURITY_PUBLIC_ROUTES=/auth/login,/auth/verify
359406
SECURITY_AES_KEY=your-aes-key-here
360407
SECURITY_SCHEME_NAME=bearerAuth
361408
```
409+
362410
#### Rate Limiting
411+
363412
```
364413
bash
365414
RATE_LIMITING_MAX_REQUESTS=5
366415
RATE_LIMITING_TIME_WINDOW=60000
367416
RATE_LIMITING_PUBLIC_ROUTES=/swagger-ui/,/v3/api-docs,/swagger-resources/,/webjars/
368417
```
418+
369419
#### CORS
420+
370421
```
371422
bash
372423
HEADER_CORS_ALLOWED_ORIGINS=http://localhost:5173
373424
```
425+
374426
#### Servidor
427+
375428
```
376429
bash
377430
SERVER_TOMCAT_TIMEOUT=600000
378431
SERVER_FORWARD_HEADERS_STRATEGY=framework
379432
```
433+
380434
#### Swagger/OpenAPI
435+
381436
```
382437
bash
383438
SWAGGER_API_DOCS_ENABLED=true
@@ -396,12 +451,16 @@ SWAGGER_UI_DISPLAY_REQUEST_DURATION=true
396451
SWAGGER_UI_DOC_EXPANSION=list
397452
OPENAPI_SERVER_URL=http://localhost:8091
398453
```
454+
399455
#### Logging
456+
400457
```
401458
bash
402459
DEBUGGER_MODE=INFO
403460
```
461+
404462
### Ejemplo de Ejecución con Docker
463+
405464
```
406465
bash
407466
docker run -d --name smartpot-api-dev -p 8091:8091 \
@@ -456,7 +515,9 @@ docker run -d --name smartpot-api-dev -p 8091:8091 \
456515
-e DEBUGGER_MODE=INFO \
457516
sebastian190030/api-smartpot:latest
458517
```
518+
459519
## Testing
520+
460521
```
461522
bash
462523
# Ejecutar todos los tests
@@ -465,6 +526,7 @@ mvn test
465526
# Ejecutar tests específicos
466527
mvn test -Dtest=UserControllerTest
467528
```
529+
468530
## Documentación de la API
469531

470532
Una vez que la aplicación esté en ejecución, accede a las interfaces de documentación:

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Use this section to tell people about which versions of your project are
66
currently being supported with security updates.
77

88
| Version | Supported |
9-
| ------- | ------------------ |
9+
|---------|--------------------|
1010
| 5.1.x | :white_check_mark: |
1111
| 5.0.x | :x: |
1212
| 4.0.x | :white_check_mark: |

0 commit comments

Comments
 (0)