Security, code quality and frontend improvements

- Move SECRET_KEY out of docker-compose into .env (env_file), add .env.example
- Add flask-limiter with 10 req/min on login route; introduce util/limiter.py
- Replace direct mysql.connector.connect() calls with MySQLConnectionPool via util/db_pool.py
- Fix deprecated datetime.utcnow() -> datetime.now(timezone.utc) in auth/login.py
- Remove dead /api/scripts 410 route from admin.py
- Add MD5 security warning in Md5Tool.jsx
- Add ErrorBoundary component and wrap App.jsx
- Expand README with setup guide, screenshot and project structure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Nirodan
2026-04-24 13:52:53 +02:00
parent 8e2c2d740e
commit 80ec5eca7b
12 changed files with 232 additions and 75 deletions
+106 -20
View File
@@ -1,34 +1,120 @@
# 🐳 Docker-Webplattform: React + Flask + externe MariaDB
# Docker-Webplattform: React + Flask + externe MariaDB
Dieses Projekt ist eine vollständig dockerisierte Webanwendung, die ein React-Frontend und ein Flask-Backend **in einem einzigen Container** vereint. Sie kommuniziert mit einer **externen MariaDB-Datenbank** (z.B. auf einem Unraid-Server) und bietet ein Setup-System, Login, Rollenverwaltung und modulare Tools.
Vollständig dockerisierte Webanwendung mit React-Frontend und Flask-Backend in einem einzigen Container. Verbindet sich mit einer externen MariaDB-Datenbank und bietet Setup-System, Login, Rollenverwaltung und modulare Tools.
---
## ⚙️ Was macht der Docker-Container?
## Screenshot
- 🚀 Startet automatisch **Flask + React** in einer Umgebung
- 🛠 Bei Erststart zeigt er eine **Setup-Webseite** zum Eintragen der DB-Verbindung
- 💾 Speichert die Konfiguration in `config/db_config.json`
- 🌐 Verbindet sich mit der **externen MariaDB-Datenbank**
- 👤 Erstellt automatisch ein `admin`-Benutzerkonto (`admin / admin`)
- 🔐 Ermöglicht Login und Rollenzuordnung
- 🧰 Liefert das React-Frontend direkt über Flask aus (keine extra Node-Instanz)
- 🧾 Verwaltet Tools wie z.B. ein MD5-Hash-Modul
- ✅ Docker-fähig, kompatibel mit Docker Compose oder Portainer
![Admin-Dashboard](logs/Screenshot%202026-01-22%20151541.png)
---
## 📦 Projektstruktur
## Setup-Anleitung
## 📄 Lizenz
### Voraussetzungen
- Docker & Docker Compose installiert
- Externe MariaDB/MySQL-Datenbank erreichbar (z.B. auf Unraid, NAS oder anderem Server)
Außerdem ist es notwendig den Ursprüglichen Entwickler anzugeben
### 1. Repository klonen
Dieses Projekt steht unter der **Creative Commons BY-NC 4.0 Lizenz**.
➡️ Du darfst ihn verwenden, verändern und teilen **aber nicht kommerziell nutzen.**
Volltext: [https://creativecommons.org/licenses/by-nc/4.0] (https://creativecommons.org/licenses/by-nc/4.0)
```bash
git clone https://github.com/Nirodan/Tools.git
cd Tools
```
💡 Hinweis: Die Urheberschaft erfolgt unter Pseudonym.
### 2. Umgebungsvariablen konfigurieren
Author: Source page: Nirodan/Github:Nirodan Production
```bash
cp .env.example .env
```
Dann `.env` öffnen und `SECRET_KEY` durch einen sicheren zufälligen Wert ersetzen:
```bash
# Sicheren Key generieren:
python -c "import secrets; print(secrets.token_hex(32))"
```
### 3. Container starten
```bash
docker compose -f docker-compose.dev.yml up -d
```
### 4. Datenbank einrichten (Erststart)
Beim ersten Start öffnet sich automatisch die Setup-Seite unter `http://localhost:5050/setup`.
Dort die MariaDB-Verbindungsdaten eintragen:
| Feld | Beispiel |
|------------|-------------------|
| Host | `192.168.1.100` |
| Port | `3306` |
| User | `tools_user` |
| Password | `geheimes_pw` |
| Database | `tools_db` |
Nach dem Speichern wird automatisch ein Admin-Account angelegt:
- **Benutzername:** `admin`
- **Passwort:** `admin` *(bitte sofort im Admin-Dashboard ändern)*
### 5. Anwendung aufrufen
```
http://localhost:5050
```
---
## Was der Container macht
- Startet automatisch Flask + React in einer Umgebung
- Bei Erststart: Setup-Webseite zum Eintragen der DB-Verbindung
- Speichert die Konfiguration in einem Docker-Volume (`config/db_config.json`)
- Verbindet sich mit der externen MariaDB-Datenbank
- Erstellt automatisch ein `admin`-Benutzerkonto
- Liefert das React-Frontend direkt über Flask aus (keine extra Node-Instanz)
---
## Projektstruktur
```
Tools/
├── backend/
│ ├── app.py # Flask-Einstiegspunkt
│ ├── admin.py # Admin-API (Nutzer- und Websitenverwaltung)
│ ├── auth/ # Login, Logout, Token-Verifikation
│ ├── tools/ # Modulare Tools (MD5 etc.)
│ └── util/ # DB-Pool, Konfiguration, Logger, Rate-Limiter
├── frontend/
│ └── src/
│ ├── App.jsx
│ ├── components/ # React-Komponenten
│ └── services/api.js # Axios-Instanz mit Auth-Interceptor
├── docker-compose.dev.yml
├── Dockerfile
├── .env.example # Vorlage für Umgebungsvariablen
└── README.md
```
---
## Sicherheitshinweise
- `SECRET_KEY` niemals im Klartext in der Versionskontrolle speichern immer `.env` verwenden
- Standard-Admin-Passwort (`admin`) nach dem Erststart sofort ändern
- MD5 ist kryptografisch unsicher nicht für Passwort-Hashing verwenden
---
## Lizenz
Dieses Projekt steht unter der **Creative Commons BY-NC 4.0 Lizenz**.
Du darfst es verwenden, verändern und teilen aber nicht kommerziell nutzen.
Volltext: https://creativecommons.org/licenses/by-nc/4.0
Author: Nirodan https://github.com/Nirodan