Compare commits
1 Commits
versione_2
...
ae099f04cf
| Author | SHA1 | Date | |
|---|---|---|---|
| ae099f04cf |
78
.env.prod
Normal file
78
.env.prod
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Parking Manager Configuration
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# REQUIRED - Security
|
||||||
|
# =============================================================================
|
||||||
|
# MUST be set to a random string of at least 32 characters
|
||||||
|
# Generate with: openssl rand -hex 32
|
||||||
|
SECRET_KEY=766299d3235f79a2a9a35aafbc90bec7102f250dfe4aba83500b98e568289b7a
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Server
|
||||||
|
# =============================================================================
|
||||||
|
# Usa 0.0.0.0 per permettere connessioni dall'esterno del container (essenziale per Docker/Traefik)
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=8000
|
||||||
|
|
||||||
|
# Database (SQLite path)
|
||||||
|
# Percorso assoluto nel container
|
||||||
|
DATABASE_PATH=/app/data/parking.db
|
||||||
|
# Lascia vuoto DATABASE_URL per costruirlo automaticamente da DATABASE_PATH
|
||||||
|
# Oppure usa: DATABASE_URL=sqlite:////app/data/parking.db
|
||||||
|
|
||||||
|
# CORS (comma-separated origins)
|
||||||
|
#ALLOWED_ORIGINS=https://parking.rocketscale.it
|
||||||
|
|
||||||
|
# JWT token expiration (minutes, default 24 hours)
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES=1440
|
||||||
|
|
||||||
|
# Logging level (DEBUG, INFO, WARNING, ERROR)
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Rate Limiting
|
||||||
|
# =============================================================================
|
||||||
|
# Number of requests allowed per window for sensitive endpoints (login, register)
|
||||||
|
RATE_LIMIT_REQUESTS=5
|
||||||
|
# Window size in seconds
|
||||||
|
RATE_LIMIT_WINDOW=60
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Authentication
|
||||||
|
# =============================================================================
|
||||||
|
# Set to true when behind Authelia reverse proxy
|
||||||
|
AUTHELIA_ENABLED=true
|
||||||
|
|
||||||
|
# Header names (only change if your proxy uses different headers)
|
||||||
|
AUTHELIA_HEADER_USER=Remote-User
|
||||||
|
AUTHELIA_HEADER_NAME=Remote-Name
|
||||||
|
AUTHELIA_HEADER_EMAIL=Remote-Email
|
||||||
|
AUTHELIA_HEADER_GROUPS=Remote-Groups
|
||||||
|
|
||||||
|
# LLDAP group that maps to admin role
|
||||||
|
AUTHELIA_ADMIN_GROUP=parking_admins
|
||||||
|
|
||||||
|
# External URLs for Authelia mode (used for landing page buttons)
|
||||||
|
# Login URL - Authelia's login page (users are redirected here to authenticate)
|
||||||
|
AUTHELIA_LOGIN_URL=https://auth.rocketscale.it
|
||||||
|
# Registration URL - External registration portal (org-stack self-registration)
|
||||||
|
REGISTRATION_URL=https://register.rocketscale.it
|
||||||
|
# Logout URL
|
||||||
|
AUTHELIA_LOGOUT_URL=https://auth.rocketscale.it/logout
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Email Notifications
|
||||||
|
# =============================================================================
|
||||||
|
# Set to true to enable email sending
|
||||||
|
SMTP_ENABLED=false
|
||||||
|
|
||||||
|
# SMTP server configuration
|
||||||
|
SMTP_HOST=localhost
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_USER=
|
||||||
|
SMTP_PASSWORD=
|
||||||
|
SMTP_FROM=noreply@parking.local
|
||||||
|
SMTP_USE_TLS=true
|
||||||
|
|
||||||
|
# When SMTP is disabled, emails are logged to this file
|
||||||
|
EMAIL_LOG_FILE=/tmp/parking-emails.log
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -25,7 +25,6 @@ ENV/
|
|||||||
# Environment variables
|
# Environment variables
|
||||||
.env
|
.env
|
||||||
.env.local
|
.env.local
|
||||||
.env.production
|
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
.idea/
|
.idea/
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -119,10 +119,6 @@ Gestione utenti e profili.
|
|||||||
- `GET /me/settings`: Ottieni le proprie impostazioni.
|
- `GET /me/settings`: Ottieni le proprie impostazioni.
|
||||||
- `PUT /me/settings`: Aggiorna le proprie impostazioni.
|
- `PUT /me/settings`: Aggiorna le proprie impostazioni.
|
||||||
- `POST /me/change-password`: Modifica la propria password.
|
- `POST /me/change-password`: Modifica la propria password.
|
||||||
- `GET /me/exclusion`: Lista delle proprie auto-esclusioni.
|
|
||||||
- `POST /me/exclusion`: Crea una nuova auto-esclusione.
|
|
||||||
- `PUT /me/exclusion/{exclusion_id}`: Modifica una auto-esclusione.
|
|
||||||
- `DELETE /me/exclusion/{exclusion_id}`: Elimina una auto-esclusione.
|
|
||||||
|
|
||||||
### Offices (`/api/offices`)
|
### Offices (`/api/offices`)
|
||||||
Gestione uffici, regole di chiusura e quote.
|
Gestione uffici, regole di chiusura e quote.
|
||||||
@@ -155,8 +151,7 @@ Gestione presenze giornaliere.
|
|||||||
- `POST /admin/mark`: Segna presenza per un altro utente (Manager/Admin).
|
- `POST /admin/mark`: Segna presenza per un altro utente (Manager/Admin).
|
||||||
- `DELETE /admin/{user_id}/{date}`: Rimuovi presenza di un altro utente (Manager/Admin).
|
- `DELETE /admin/{user_id}/{date}`: Rimuovi presenza di un altro utente (Manager/Admin).
|
||||||
- `GET /team`: Visualizza presenze e stato parcheggio del team.
|
- `GET /team`: Visualizza presenze e stato parcheggio del team.
|
||||||
- `GET /admin/{user_id}`: Storico presenze di un utente (Manager/Admin).
|
- `GET /admin/{user_id}`: Storico presenze di un utente.
|
||||||
- `POST /admin/clear-office-presence`: Pulisce presenze e parcheggi di un ufficio per un range di date (Test/Admin).
|
|
||||||
|
|
||||||
### Parking (`/api/parking`)
|
### Parking (`/api/parking`)
|
||||||
Gestione assegnazioni posti auto.
|
Gestione assegnazioni posti auto.
|
||||||
@@ -170,12 +165,6 @@ Gestione assegnazioni posti auto.
|
|||||||
- `POST /reassign-spot`: Riassegna o libera un posto già assegnato.
|
- `POST /reassign-spot`: Riassegna o libera un posto già assegnato.
|
||||||
- `POST /release-my-spot/{id}`: Rilascia il proprio posto assegnato.
|
- `POST /release-my-spot/{id}`: Rilascia il proprio posto assegnato.
|
||||||
- `GET /eligible-users/{id}`: Lista utenti idonei a ricevere un posto riassegnato.
|
- `GET /eligible-users/{id}`: Lista utenti idonei a ricevere un posto riassegnato.
|
||||||
- `POST /test-email`: Invia email di test (Test Tool).
|
|
||||||
|
|
||||||
### Reports (`/api/reports`)
|
|
||||||
Esportazione dati.
|
|
||||||
|
|
||||||
- `GET /team-export`: Esporta dati presenze e parcheggi del team in Excel.
|
|
||||||
|
|
||||||
## Utilizzo con AUTHELIA
|
## Utilizzo con AUTHELIA
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ services:
|
|||||||
- PORT=8000
|
- PORT=8000
|
||||||
- DATABASE_PATH=/app/data/parking.db
|
- DATABASE_PATH=/app/data/parking.db
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" ]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
@@ -31,8 +31,8 @@ services:
|
|||||||
- "caddy.forward_auth=authelia:9091"
|
- "caddy.forward_auth=authelia:9091"
|
||||||
- "caddy.forward_auth.uri=/api/verify?rd=https://parking.lvh.me/"
|
- "caddy.forward_auth.uri=/api/verify?rd=https://parking.lvh.me/"
|
||||||
- "caddy.forward_auth.copy_headers=Remote-User Remote-Groups Remote-Name Remote-Email"
|
- "caddy.forward_auth.copy_headers=Remote-User Remote-Groups Remote-Name Remote-Email"
|
||||||
|
# cambiare l'url delle label per il reverse proxy
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
org-network:
|
org-network:
|
||||||
external: true
|
external: true
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
--success: #16a34a;
|
--success: #16a34a;
|
||||||
--success-bg: #dcfce7;
|
--success-bg: #dcfce7;
|
||||||
--warning: #f59e0b;
|
--warning: #f59e0b;
|
||||||
--warning-bg: #fef3c7;
|
--warning-bg: #fde68a;
|
||||||
--danger: #dc2626;
|
--danger: #dc2626;
|
||||||
--danger-bg: #fee2e2;
|
--danger-bg: #fee2e2;
|
||||||
--text: #1f1f1f;
|
--text: #1f1f1f;
|
||||||
|
|||||||
Reference in New Issue
Block a user