{
"event": "PreToolUse",
"tool_name": "mcp__mcp-tasks__tasks_create",
"tool_input": {
"title": "KRITISCH: Credential-Management Pipeline refactoren - kein Klartext-Passwort",
"description": "# Problem\n\nDas Python-Pipeline-System (`\/var\/www\/scripts\/pipeline\/`) verwendet `DB_PASSWORD` als **Environment-Variable im Klartext**. Das ist ein kritischer Architektur-Fehler.\n\n## Verstöße gegen Prinzipien\n\n| Prinzip | Verstoß |\n|---------|---------|\n| **DRY** | Passwort wird bei jedem Aufruf als ENV-Var übergeben |\n| **SRP** | config.py mischt Config-Laden mit Credential-Management |\n| **DIP** | Direkter Zugriff auf `os.environ` statt Abstraktion |\n| **KISS** | Umständliche Übergabe `DB_PASSWORD=\"xxx\" .\/venv\/bin\/python` |\n| **Security** | Passwort in Prozessliste sichtbar, Shell-History |\n\n## IST-Zustand\n\n```python\n# config.py\nDB_CONFIG = {\n \"host\": \"localhost\",\n \"user\": \"root\",\n \"password\": os.environ.get(\"DB_PASSWORD\", \"\"), # ← Problem\n \"database\": \"ki_content\"\n}\n```\n\n## SOLL-Zustand\n\n1. **Credential-File** außerhalb des Repositories:\n - `\/etc\/campus\/db_credentials.json` (chmod 600, www-data)\n \n2. **CredentialService** in Python:\n ```python\n # credentials.py\n class CredentialService:\n @staticmethod\n def get_db_config() -> dict:\n with open('\/etc\/campus\/db_credentials.json') as f:\n return json.load(f)\n ```\n\n3. **Analog zu PHP**: Infrastructure\/Config\/CredentialService.php existiert bereits\n\n## Betroffene Dateien\n\n- `\/var\/www\/scripts\/pipeline\/config.py` - Hauptkonfiguration\n- `\/var\/www\/scripts\/pipeline\/db.py` - Datenbankverbindung\n- Alle Skripte die `DB_PASSWORD` erwarten\n\n## Akzeptanzkriterien\n\n- [ ] Kein `DB_PASSWORD` mehr als Environment-Variable\n- [ ] Credentials in `\/etc\/campus\/db_credentials.json`\n- [ ] Python CredentialService analog zu PHP\n- [ ] Alle Pipeline-Skripte ohne Passwort-Übergabe aufrufbar\n- [ ] Bestehende Funktionalität erhalten",
"type": "ai_task"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"task\": {\n \"id\": 309,\n \"uuid\": \"fd08ebb9-9a19-4e19-b72e-e2e71da6e9e5\",\n \"title\": \"KRITISCH: Credential-Management Pipeline refactoren - kein Klartext-Passwort\",\n \"description\": \"# Problem\\n\\nDas Python-Pipeline-System (`\/var\/www\/scripts\/pipeline\/`) verwendet `DB_PASSWORD` als **Environment-Variable im Klartext**. Das ist ein kritischer Architektur-Fehler.\\n\\n## Verstöße gegen Prinzipien\\n\\n| Prinzip | Verstoß |\\n|---------|---------|\\n| **DRY** | Passwort wird bei jedem Aufruf als ENV-Var übergeben |\\n| **SRP** | config.py mischt Config-Laden mit Credential-Management |\\n| **DIP** | Direkter Zugriff auf `os.environ` statt Abstraktion |\\n| **KISS** | Umständliche Übergabe `DB_PASSWORD=\\\"xxx\\\" .\/venv\/bin\/python` |\\n| **Security** | Passwort in Prozessliste sichtbar, Shell-History |\\n\\n## IST-Zustand\\n\\n```python\\n# config.py\\nDB_CONFIG = {\\n \\\"host\\\": \\\"localhost\\\",\\n \\\"user\\\": \\\"root\\\",\\n \\\"password\\\": os.environ.get(\\\"DB_PASSWORD\\\", \\\"\\\"), # ← Problem\\n \\\"database\\\": \\\"ki_content\\\"\\n}\\n```\\n\\n## SOLL-Zustand\\n\\n1. **Credential-File** außerhalb des Repositories:\\n - `\/etc\/campus\/db_credentials.json` (chmod 600, www-data)\\n \\n2. **CredentialService** in Python:\\n ```python\\n # credentials.py\\n class CredentialService:\\n @staticmethod\\n def get_db_config() -> dict:\\n with open('\/etc\/campus\/db_credentials.json') as f:\\n return json.load(f)\\n ```\\n\\n3. **Analog zu PHP**: Infrastructure\/Config\/CredentialService.php existiert bereits\\n\\n## Betroffene Dateien\\n\\n- `\/var\/www\/scripts\/pipeline\/config.py` - Hauptkonfiguration\\n- `\/var\/www\/scripts\/pipeline\/db.py` - Datenbankverbindung\\n- Alle Skripte die `DB_PASSWORD` erwarten\\n\\n## Akzeptanzkriterien\\n\\n- [ ] Kein `DB_PASSWORD` mehr als Environment-Variable\\n- [ ] Credentials in `\/etc\/campus\/db_credentials.json`\\n- [ ] Python CredentialService analog zu PHP\\n- [ ] Alle Pipeline-Skripte ohne Passwort-Übergabe aufrufbar\\n- [ ] Bestehende Funktionalität erhalten\",\n \"type\": \"ai_task\",\n \"status\": \"pending\",\n \"created_by\": \"mcp-tasks\",\n \"created_by_type\": \"ai\",\n \"parent_task_id\": null,\n \"due_date\": null,\n \"created_at\": \"2025-12-25T01:47:23.735845\",\n \"updated_at\": \"2025-12-25T01:47:23.735847\",\n \"completed_at\": null,\n \"metadata\": {}\n },\n \"message\": \"Task #309 created\"\n}"
}
]
}