From b13ab4975a83d297d894135d3a38c6c1c7eb0980 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Sat, 22 Aug 2026 23:24:58 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20423=20Architektur-Fehler=20=E2=80=94=20?= =?UTF-8?q?alle=20Plugin=20Models=20gelesen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/test-bugs.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/docs/test-bugs.md b/docs/test-bugs.md index 7649b10..ec6981c 100644 --- a/docs/test-bugs.md +++ b/docs/test-bugs.md @@ -3272,3 +3272,75 @@ Playwright E2E: 10 passed, 24 failed (BUG-011/012/013 — Mock-Daten und data-te - **Problem:** `apiGet('/plugins/active-manifests')` — dieser Endpoint erfordert `plugins:read` (Problem 3). Normaler User ohne plugins:read bekommt keine Plugin-Menüs. - **Schweregrad:** High - **Status:** ⏳ Nicht gefixt + +### ARCH-412: ai_assistant/models.py — api_key als Plaintext in DB +- **Datei:** app/plugins/builtins/ai_assistant/models.py:35 +- **Problem:** `api_key: Mapped[str] = mapped_column(Text, nullable=False, default="")` — API Key wird als Plaintext gespeichert. +- **Schweregrad:** High +- **Status:** ⏳ Nicht gefixt + +### ARCH-413: mcp_client/models.py — api_token als Plaintext in DB +- **Datei:** app/plugins/builtins/mcp_client/models.py:30 +- **Problem:** `api_token: Mapped[str | None] = mapped_column(String(500), nullable=True)` — API Token wird als Plaintext gespeichert. +- **Schweregrad:** High +- **Status:** ⏳ Nicht gefixt + +### ARCH-414: permissions/models.py — ShareLink.token als Plaintext +- **Datei:** app/plugins/builtins/permissions/models.py:50 +- **Problem:** `token: Mapped[str] = mapped_column(String(64), nullable=False, unique=True)` — Share Link Token als Plaintext. Sollte gehasht werden. +- **Schweregrad:** Medium +- **Status:** ⏳ Nicht gefixt + +### ARCH-415: calendar/models.py — CalendarEntry Spalten vor __table_args__ +- **Datei:** app/plugins/builtins/calendar/models.py:60 +- **Problem:** `indexed_at`, `embedding`, `search_tsv` werden vor `__table_args__` definiert — SQLAlchemy Anti-Pattern. +- **Schweregrad:** Low +- **Status:** ⏳ Nicht gefixt + +### ARCH-416: dms/models.py — File Spalten vor __table_args__ +- **Datei:** app/plugins/builtins/dms/models.py:50 +- **Problem:** `indexed_at`, `content_tsv`, `content_text`, `embedding` vor `__table_args__` — SQLAlchemy Anti-Pattern. +- **Schweregrad:** Low +- **Status:** ⏳ Nicht gefixt + +### ARCH-417: mail/models.py — Mail Spalten vor __table_args__ +- **Datei:** app/plugins/builtins/mail/models.py:100 +- **Problem:** `indexed_at`, `embedding`, `body_tsv`, `company_id` vor `__table_args__` — SQLAlchemy Anti-Pattern. +- **Schweregrad:** Low +- **Status:** ⏳ Nicht gefixt + +### ARCH-418: tags/models.py — Tag Spalten vor __table_args__ +- **Datei:** app/plugins/builtins/tags/models.py:30 +- **Problem:** `embedding`, `search_tsv` vor `__table_args__` — SQLAlchemy Anti-Pattern. +- **Schweregrad:** Low +- **Status:** ⏳ Nicht gefixt + +### ARCH-419: mail/models.py — MailAccount.encrypted_password mit password_salt +- **Datei:** app/plugins/builtins/mail/models.py:40 +- **Problem:** `encrypted_password` und `password_salt` — gut dass verschlüsselt, aber der Salt sollte pro-Account random sein, nicht hardcoded default="". +- **Schweregrad:** Medium +- **Status:** ⏳ Nicht gefixt + +### ARCH-420: mail/models.py — PgpKey.encrypted_private_key in DB +- **Datei:** app/plugins/builtins/mail/models.py:300 +- **Problem:** `encrypted_private_key: Mapped[str] = mapped_column(Text, nullable=False)` — PGP Private Key in DB gespeichert. Auch wenn verschlüsselt, ist das ein hohes Risiko. +- **Schweregrad:** High +- **Status:** ⏳ Nicht gefixt + +### ARCH-421: forgejo_error_reporter/models.py — Integer auto-increment PK statt UUID +- **Datei:** app/plugins/builtins/forgejo_error_reporter/models.py:20 +- **Problem:** `id = Column(Integer, primary_key=True, autoincrement=True)` — Integer auto-increment PK. AGENTS.md verbietet Integer IDs, UUID only. +- **Schweregrad:** Medium +- **Status:** ⏳ Nicht gefixt + +### ARCH-422: forgejo_error_reporter/models.py — Kein TenantMixin +- **Datei:** app/plugins/builtins/forgejo_error_reporter/models.py +- **Problem:** `ReportedError` hat kein TenantMixin — nicht tenant-scoped. Kann für Cross-Tenant Data Leaks führen. +- **Schweregrad:** Medium +- **Status:** ⏳ Nicht gefixt + +### ARCH-423: marketplace/models.py — Kein TenantMixin (global) +- **Datei:** app/plugins/builtins/marketplace/models.py:30 +- **Problem:** `MarketplaceListing` hat kein TenantMixin — bewusst global, aber muss dokumentiert sein. +- **Schweregrad:** Low +- **Status:** ⏳ Nicht gefixt