shahondin1624
3fb75e3344
feat: add AuthorizationMiddleware for endpoint permission checks ( Closes #166 ) ( #179 )
2026-04-10 16:18:35 +02:00
shahondin1624
7d3be60adb
fix: throw exception instead of returning plaintext when encryption fails ( Closes #165 ) ( #178 )
2026-04-10 16:15:31 +02:00
shahondin1624
53268f21d2
fix: read DSGVO export password from POST body only ( Closes #164 ) ( #177 )
2026-04-10 16:14:32 +02:00
shahondin1624
0678fb12d9
fix: wire InputSanitizer into ApiControllerTrait.getRequestData() ( Closes #163 ) ( #176 )
2026-04-10 16:13:09 +02:00
shahondin1624
c5704c3e74
security: comprehensive security audit with 13 findings
...
Document findings from full codebase security review covering:
- 3 high-severity: unused InputSanitizer, password in query param, silent
encryption fallback to plaintext
- 5 medium-severity: missing authorization enforcement, rate limit bypass,
ZIP path traversal, temp file permissions, sync API bypass
- 5 low-severity: CSRF scope, error message leaks, missing CSP headers,
CSV injection potential, date formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 12:45:51 +02:00
shahondin1624
895f3d5960
refactor: extract ApiControllerTrait to DRY controller boilerplate
...
- Create ApiControllerTrait with shared getRequestData() and handleAction()
- handleAction() maps exceptions to HTTP responses: ValidationException->400,
DuplicateMemberException->409, DoesNotExistException->404, Exception->500
- Remove 10 identical private getRequestData() methods across controllers
- Refactor StufeController, FamilyController, InjuryController, FeeController,
PermissionController, MilestoneController to use handleAction() wrapper
- Add trait to FileController, QueryController, LagerController,
MemberController, ImportController (getRequestData consolidation)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 12:43:06 +02:00
shahondin1624
78174e6ad8
test: comprehensive test suite achieving 90.49% line coverage
...
Add 1343 PHPUnit tests covering all services, controllers, entities,
mappers, middleware, background jobs, and validators. Key changes:
- Install PHPUnit 10, Nextcloud OCP stubs, doctrine/dbal, sabre/vobject
as dev dependencies
- Add test bootstrap with OC\Hooks\Emitter stub
- Add TestInputStream stream wrapper for controller request body testing
- Fix ImportService to handle empty file input gracefully
- Fix existing test compatibility with PHPUnit 10 (withConsecutive removal)
- Exclude migration files from coverage (DB schema, not business logic)
- Coverage: 90.49% lines, 84.81% methods across 77 classes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 12:36:52 +02:00
shahondin1624
c35fa7b13e
feat: inline error correction for imports, dark-mode warning boxes, German date formatting
...
- Add inline editing UI for import validation errors: click error rows to
expand and fix missing fields, then re-validate with "Erneut pruefen"
- Backend accepts corrections map in preview and execute endpoints
- Fix warning/error box contrast for dark theme (hardcoded dark backgrounds)
- Format all raw ISO dates with toLocaleDateString('de-DE') in MemberList,
FeeOverview, and QueryBuilder views
- Fix Application.php crash: registerTimedJob() unavailable in NC28,
moved background jobs to info.xml
- Bump version to 0.1.5
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 22:22:36 +02:00
shahondin1624
c37b2a970c
docs: add cache-busting escalation path to CLAUDE.md
...
Document the full escalation when changes don't show up: hard-refresh,
restart container, version bump (3 places), and full rebuild as nuclear
option.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 21:53:26 +02:00
shahondin1624
41bab34d04
fix: improve warning box contrast and add XLSX converter script
...
Warning summary boxes in the import wizard had white text on a
light warning background, making them unreadable. Switch to a
light-yellow background with dark text instead.
Also adds convert_xlsx.py for converting the LvS member Excel
spreadsheet into CSV files for ZIP bundle import, and documents
the mandatory version bump rule in CLAUDE.md.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 21:52:42 +02:00
shahondin1624
bfda98e678
chore: sync uncommitted changes from previous sessions
...
Version bump to 0.1.0, updated app icons, migration fixes, various
Vue component improvements, CLAUDE.md project instructions, gitignore
for test artifacts, and webpack/main.js configuration updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 20:54:41 +02:00
shahondin1624
bcb7bd7056
feat: content-based matching for cross-instance migration ( Closes #153 ) ( #159 )
2026-04-09 20:43:58 +02:00
shahondin1624
454a7c23e1
feat: per-field conflict resolution UI for duplicate records ( Closes #152 ) ( #158 )
2026-04-09 20:40:05 +02:00
shahondin1624
32a79d42d7
feat: ZIP bundle import with dependency-aware auto-ordering ( Closes #151 ) ( #157 )
2026-04-09 20:35:25 +02:00
shahondin1624
ce76c22c20
feat: per-entity CSV import with German header auto-mapping ( Closes #150 ) ( #156 )
2026-04-09 20:30:44 +02:00
shahondin1624
27cb708a5f
feat: add full ZIP bundle export with sensitive data toggle ( Closes #149 ) ( #155 )
2026-04-09 20:23:52 +02:00
shahondin1624
aee5040720
feat: per-entity CSV export for all data types ( #148 ) ( #154 )
...
feat: add per-entity CSV export for all data types (Closes #148 ) (#154 )
2026-04-09 20:18:22 +02:00
shahondin1624
821de4d8d0
feat: add Lagerhistorie and Verletzungsprotokoll reports ( Closes #129 ) ( #146 )
2026-04-09 15:58:31 +02:00
shahondin1624
944c2c4da6
feat: seed default Stufen on fresh install ( Closes #128 ) ( #145 )
2026-04-09 15:55:45 +02:00
shahondin1624
b99f84bca7
fix: various UX polish improvements ( Closes #136 ) ( #144 )
2026-04-09 15:54:06 +02:00
shahondin1624
910a1794b9
fix: define appName/appVersion globals via webpack ( Closes #130 , #131 ) ( #143 )
2026-04-09 15:51:42 +02:00
shahondin1624
6a5e5de04e
feat: add missing pages to sidebar navigation ( Closes #135 ) ( #142 )
2026-04-09 15:49:33 +02:00
shahondin1624
9679348756
fix: resolve Stufe names in member list table ( Closes #134 ) ( #141 )
2026-04-09 15:47:41 +02:00
shahondin1624
d59c6d9b99
fix: use Vue 3 model-value for inline member search ( Closes #133 ) ( #140 )
2026-04-09 15:46:11 +02:00
shahondin1624
6b4332d21c
fix: resolve member names in fee table ( Closes #127 ) ( #139 )
2026-04-09 15:44:54 +02:00
shahondin1624
df4223dd40
fix: use Vue 3 modelValue bindings in MemberForm ( Closes #125 ) ( #138 )
2026-04-09 15:43:19 +02:00
shahondin1624
b93b8a73d2
fix: wire AuditService into all CRUD operations ( Closes #126 ) ( #137 )
2026-04-09 15:40:37 +02:00
shahondin1624
a714efb298
Add README
2026-04-07 21:48:26 +02:00
shahondin1624
7b582639e1
Commit possible fixes for build
2026-04-07 21:46:41 +02:00
shahondin1624
d36c1a59ca
fix: use :to prop for sidebar navigation instead of @click handlers ( Closes #124 )
2026-04-07 21:43:47 +02:00
shahondin1624
79b8253fc6
feat: add app icon for Nextcloud navigation bar ( Closes #115 )
2026-04-07 17:15:26 +02:00
shahondin1624
306991da26
fix: improve button styling and prevent text overflow ( Closes #116 )
2026-04-07 17:13:50 +02:00
shahondin1624
f7243ff0b1
fix: replace ASCII Umlaut substitutes with proper German characters ( Closes #117 )
2026-04-07 17:10:40 +02:00
shahondin1624
f5e7441bfb
fix: make sidebar navigation clickable ( Closes #118 )
2026-04-07 16:58:37 +02:00
shahondin1624
c4712b12bc
feat: Import wizard with CSV parsing and duplicate detection ( Closes #58 )
2026-04-07 16:27:39 +02:00
shahondin1624
bbbc5fab0c
feat: Visual query builder with AST-to-SQL engine ( Closes #53 )
2026-04-07 16:22:15 +02:00
shahondin1624
af2eaeffd7
feat: FileLinkService + FileExplorer component ( Closes #52 )
2026-04-07 16:16:25 +02:00
shahondin1624
f27860ec3b
feat: add ContactsSyncService with VCard sync to address book ( Closes #51 ) ( #111 )
2026-04-07 16:06:43 +02:00
shahondin1624
792fe62d3e
feat: add CalendarSyncService with queue-based birthday sync ( Closes #50 ) ( #110 )
2026-04-07 16:00:43 +02:00
shahondin1624
81c78974d9
test: add integration test suite for API endpoints ( Closes #65 ) ( #109 )
2026-04-07 15:57:42 +02:00
shahondin1624
524c8690ca
feat: add security hardening with rate limiting and pentest prep ( Closes #64 ) ( #108 )
2026-04-07 15:54:14 +02:00
shahondin1624
ac74152a45
test: add comprehensive data validation tests ( Closes #66 ) ( #107 )
2026-04-07 15:36:11 +02:00
shahondin1624
b3bc498091
feat: add injury tracking backend and frontend ( Closes #57 ) ( #106 )
2026-04-07 15:33:23 +02:00
shahondin1624
25ab72dc69
feat: add DB migration for injuries tracking tables ( Closes #56 ) ( #105 )
2026-04-07 15:28:06 +02:00
shahondin1624
1905e03c33
feat: add membership milestone detection (Jubilaeen) ( Closes #59 )
2026-04-07 15:21:18 +02:00
shahondin1624
4e1c88b036
feat: add Stufe change suggestions based on age ranges ( Closes #63 )
2026-04-07 15:18:18 +02:00
shahondin1624
5f337f7256
feat: add Lager (camp) system with DB, backend, and frontend ( Closes #54 , Closes #55 )
2026-04-07 15:15:53 +02:00
shahondin1624
407bf04789
feat: add DSGVO data export and irreversible hard-delete ( Closes #62 )
2026-04-07 15:10:39 +02:00
shahondin1624
bc404609c3
feat: add soft deletion logic with sensitive data purge and archive ( Closes #61 )
2026-04-07 15:07:03 +02:00
shahondin1624
1861261a2f
feat: add Reports UI with type selection, preview, and download ( Closes #49 )
2026-04-07 15:02:20 +02:00