Skip to content

Commit 6e9fedb

Browse files
crybeclaude
andcommitted
chore: harden public release baseline
- Fix traceback leak: remove 'or True' in error handler (app.py) - Remove internal hostnames ALPHA-01 and Shinra-Gate from all files - Remove debug print leaking secret bytes in archive auth - Replace known hardcoded fallback secrets with neutral placeholders - Add MIT LICENSE (Copyright 2026 crybe) - Harden .gitignore with key/cert/archive/secret patterns - Expand SECURITY.md with Docker socket and public exposure warnings - Update README clone URL and add public internet warning Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent bd510a8 commit 6e9fedb

10 files changed

Lines changed: 73 additions & 22 deletions

File tree

.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,44 @@ logs/
2929

3030
# Environment & Secrets
3131
.env
32+
.env.*
33+
!.env.example
3234
.env.local
3335
.env.development.local
3436
.env.test.local
3537
.env.production.local
3638
*.bak
3739
*.old
3840
*.orig
41+
*.key
42+
*.pem
43+
*.crt
44+
*.p12
45+
*.pfx
46+
*secret*
47+
*token*
48+
*credentials*
49+
50+
# Archives & Dumps
51+
*.dump
52+
*.tar
53+
*.tar.gz
54+
*.zip
55+
*.7z
56+
*.sqlite3
3957

4058
# Node / Frontend
4159
node_modules/
4260
dist/
4361
build/
4462
.eslintcache
4563
.stylelintcache
64+
.cache/
65+
66+
# Virtual environments
67+
.venv/
68+
venv/
69+
instance/
4670

4771
# IDEs
4872
.idea/

Abschluss-Dashboard.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
## 🛰️ MISSION OVERVIEW
99
Das Ziel der Operation war das **Readability Hardening** des zentralen Antigravity Dashboards. Fokus lag auf der Eliminierung von Lesbarkeitsschwächen in transparenten Panels und der Schärfung der visuellen Hierarchie für kritische Telemetriedaten. Die folgenden Aufnahmen zeigen den **echten Live-Stand** nach dem Deployment.
1010

11-
![Live Dashboard Header](file:///home/user/.gemini/antigravity/brain/2c1b9eed-1d6d-4088-bcce-3d7f5b5a04f1/growbox_header_metrics_1778366855972.png)
12-
1311
---
1412

1513
## 🛠️ CORE MODIFICATIONS (TECHNICAL SPECS)
@@ -24,25 +22,21 @@ Ein systemweiter Font-Bump wurde durchgeführt, um die Informationsdichte bei gl
2422
- **Labels:** Erhöht auf `11px/12px` (Font-Weight: Black).
2523
- **Tracking:** Erhöht auf `0.2em` bis `0.4em` für optimale Lesbarkeit in Fenstermodi.
2624

27-
![Bloom & Environment Progress](file:///home/user/.gemini/antigravity/brain/2c1b9eed-1d6d-4088-bcce-3d7f5b5a04f1/bloom_environment_progress_1778366893604.png)
28-
2925
### 3. Log Module Refactor // System_Module
3026
Das "Grow Logbuch" wurde optisch gehärtet und als festes Systemmodul integriert.
3127
- **Design:** Taktische Rahmen mit `CornerBrackets` und `mascot-ornament`.
3228
- **Status:** Klare Anzeige von Systemzuständen (z.B. `DATABASE_EMPTY`).
3329

34-
![Grow Log Module](file:///home/user/.gemini/antigravity/brain/2c1b9eed-1d6d-4088-bcce-3d7f5b5a04f1/grow_log_module_1778366923227.png)
35-
3630
---
3731

3832
## 🔍 DEPLOYMENT & VERIFICATION
39-
Das Update wurde erfolgreich auf den Live-Server (`ALPHA-01`) synchronisiert und verifiziert.
33+
Das Update wurde erfolgreich auf den Live-Server synchronisiert und verifiziert.
4034

4135
| Metrik | Wert | Status |
4236
| :--- | :--- | :--- |
4337
| **Version** | v2.5.5 | `🟢 ACTIVE` |
44-
| **Node** | ALPHA-01 (Shinra-Gate) | `🟢 ONLINE` |
45-
| **Health-Check** | DB: Connected / Disk: 561GB | `🟢 STABLE` |
38+
| **Node** | homelab-server | `🟢 ONLINE` |
39+
| **Health-Check** | DB: Connected / Disk: sufficient free space | `🟢 STABLE` |
4640

4741
---
4842

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 crybe
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ Das (Nexus Command Hub) dient als zentrale Kommandozentrale für technik-affine
3333

3434
### 1. Repository klonen
3535
```bash
36-
git clone https://github.com/your-username/project-dashboard.git
37-
cd project-dashboard
36+
git clone https://github.com/crybe/ProjectOperationCenter.git
37+
cd ProjectOperationCenter
3838
```
3939

4040
### 2. Konfiguration
@@ -66,8 +66,13 @@ Das Dashboard ist anschließend unter `http://localhost:5666` erreichbar.
6666
---
6767

6868
## 🛡️ Sicherheitshinweis
69+
70+
> **Do not expose this dashboard directly to the public internet.**
71+
6972
Dieses Projekt ist für den Einsatz im privaten Netzwerk konzipiert. Stellen Sie sicher, dass der Zugang von außen nur über gesicherte Tunnel (VPN) oder einen authentifizierten Reverse-Proxy erfolgt.
7073

74+
**`docker-compose.yml` is intended for local/private homelab use only.** Bind-Ports sind standardmäßig auf `127.0.0.1` beschränkt und sollten nicht öffentlich erreichbar sein.
75+
7176
**WICHTIG:** Committen Sie niemals Ihre `.env` Datei mit echten Zugangsdaten!
7277

7378
---

SECURITY.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ Please do not report security vulnerabilities through public GitHub issues. Inst
1212
4. **API Keys**: Ensure all API keys (Gemini, Groq, OpenRouter, etc.) have appropriate usage limits set in their respective provider consoles to prevent abuse.
1313
5. **Docker Socket**: Mounting `/var/run/docker.sock` allows the container to control the host Docker daemon. Use this feature with caution and only if you trust the network environment.
1414

15+
6. **No Public Exposure**: Do not expose this dashboard directly to the public internet. Always use a VPN (Tailscale, WireGuard) or an authenticated reverse proxy (Nginx Proxy Manager, Traefik) in front of it.
16+
7. **No Secrets in Git**: Never commit API keys, passwords, session secrets, or any credentials to this repository. The `.env` file must remain local and untracked.
17+
8. **No Production API Keys**: Use test/sandbox keys during development. Apply rate limits and IP restrictions in your API provider consoles.
18+
19+
## Docker Security Notes
20+
21+
- **Docker Socket (`/var/run/docker.sock`)**: The `docker-compose.yml` may mount the Docker socket to allow container management via the UI. This grants the container full control over the host Docker daemon. Only use this feature in a trusted, isolated network environment.
22+
- **Root Containers**: Avoid running containers as root in production. Review the `Dockerfile` and `docker-compose.yml` before deploying in shared or sensitive environments.
23+
1524
## Secrets Cleanup
1625

1726
This repository has been sanitized for public release. If you find any leaked secrets or private information in the history or code, please report it immediately.

app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ def handle_exception(e):
5555

5656
if request.path.startswith('/api/'):
5757
import traceback
58-
error_details = traceback.format_exc() if app.debug or True else 'Kontaktieren Sie den Administrator'
58+
error_details = traceback.format_exc() if app.debug else 'Interner Serverfehler'
5959
return jsonify({
60-
'ok': False,
61-
'error': 'Interner Serverfehler',
60+
'ok': False,
61+
'error': 'Interner Serverfehler',
6262
'details': error_details
6363
}), 500
6464
return render('500.html', error=str(e)), 500

blueprints/api/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,6 @@ def grow_archive():
266266
provided = (request.args.get('passphrase') or '').strip()
267267
secret = os.environ.get('ADMIN_PASSPHRASE', LOGIN_PASSWORD).strip()
268268

269-
print(f"[ARCHIVE] Auth check: received={provided[:3]}***, expected={secret[:3]}***", file=sys.stderr)
270-
271269
if provided != secret:
272270
return jsonify({'ok': False, 'error': 'PASS_REQUIRED'})
273271

@@ -375,7 +373,7 @@ def grow_archive_post():
375373
password = data.get('password', '')
376374

377375
# Simple passphrase check
378-
secret = os.environ.get('ADMIN_PASSPHRASE', 'admin-dev')
376+
secret = os.environ.get('ADMIN_PASSPHRASE', '')
379377
if password != secret:
380378
return jsonify({"ok": False, "error": "Ungültige Passphrase"}), 403
381379

core/config.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22

33
class Config:
4-
SECRET_KEY = os.environ.get('SECRET_KEY', 'devhub-secret-2026-tactical-fallback')
4+
SECRET_KEY = os.environ.get('SECRET_KEY', 'change-me-set-a-real-secret-key')
55

66
# Pfad-Erkennung
77
PROJ_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -38,5 +38,5 @@ class Config:
3838
def validate(cls):
3939
if not os.path.exists(cls.DATA_PATH): os.makedirs(cls.DATA_PATH, exist_ok=True)
4040
if not os.path.exists(cls.LOG_DIR): os.makedirs(cls.LOG_DIR, exist_ok=True)
41-
if cls.SECRET_KEY == 'devhub-secret-2026-tactical-fallback':
42-
print('WARNING: Using default SECRET_KEY.')
41+
if cls.SECRET_KEY == 'change-me-set-a-real-secret-key':
42+
print('WARNING: Using default SECRET_KEY. Set SECRET_KEY in your .env file!')

core/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@
5151

5252
# Bot & Service URLs
5353
BOT_CTRL_URL = os.environ.get('BOT_CTRL_URL', 'http://localhost:5667')
54-
CTRL_TOKEN = os.environ.get('CTRL_TOKEN', 'default-token')
54+
CTRL_TOKEN = os.environ.get('CTRL_TOKEN', '')
5555
PROM_URL = os.environ.get('PROM_URL', 'http://localhost:9090/api/v1/query')
5656
n8n_BASE_URL = os.environ.get('N8N_BASE_URL', 'http://localhost:5678')

frontend/src/pages/Growbox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,7 @@ export default function Growbox() {
719719
<div>
720720
<div className="flex items-center gap-3 mb-1">
721721
<div className="h-[1px] w-8 bg-emerald-600/30" />
722-
<span className="text-tactical-label opacity-40">Operational_Node: ALPHA-01</span>
722+
<span className="text-tactical-label opacity-40">Operational_Node: homelab-server</span>
723723
</div>
724724
<h2 className="text-5xl sm:text-7xl font-black text-emerald-500 tracking-tighter uppercase italic flex items-center gap-6 drop-shadow-[0_8px_24px_rgba(0,0,0,0.7)]">
725725
Growth<span className="text-emerald-700">_OS</span>

0 commit comments

Comments
 (0)