feat(auth): Implementiere vollständiges Auth-System

- JWT Access + Refresh Tokens mit djwt
- Argon2 Password Hashing (OWASP konfig)
- Rate Limiting für Auth-Endpoints
- Rollen-basierte Zugriffskontrolle (owner, admin, manager, user)
- DSGVO Audit Logging
- Email-Verifizierung (Struktur)
- Passwort-Reset Flow
- Multi-Device Logout

Neue Dateien:
- src/types/index.ts - TypeScript Interfaces
- src/db/connection.ts - PostgreSQL Pool
- src/services/password.ts - Argon2 Hashing
- src/services/jwt.ts - Token Generation
- src/services/audit.ts - DSGVO Audit Log
- src/middleware/auth.ts - Auth Middleware
- src/repositories/user.ts - User DB Queries
- src/repositories/organization.ts - Org DB Queries
- src/utils/response.ts - API Response Helpers

Task: #8 Authentifizierung & Benutzerverwaltung
This commit is contained in:
2026-02-11 10:30:37 +00:00
parent cc74d66fad
commit d0f1c242a3
13 changed files with 1888 additions and 107 deletions

View File

@@ -2,9 +2,12 @@
"name": "pulse-crm-backend",
"version": "0.1.0",
"tasks": {
"dev": "deno run --allow-net --allow-env --allow-read --watch src/main.ts",
"start": "deno run --allow-net --allow-env --allow-read src/main.ts",
"test": "deno test --allow-net --allow-env --allow-read",
"dev": "deno run --allow-net --allow-env --allow-read --allow-ffi --watch src/main.ts",
"start": "deno run --allow-net --allow-env --allow-read --allow-ffi src/main.ts",
"test": "deno test --allow-net --allow-env --allow-read --allow-ffi",
"check": "deno check src/main.ts",
"lint": "deno lint",
"fmt": "deno fmt",
"db:migrate": "deno run --allow-net --allow-env --allow-read src/db/migrate.ts",
"db:seed": "deno run --allow-net --allow-env --allow-read src/db/seed.ts"
},
@@ -13,10 +16,20 @@
"@std/dotenv": "jsr:@std/dotenv@^0.225.0",
"postgres": "https://deno.land/x/postgres@v0.19.3/mod.ts",
"zod": "https://deno.land/x/zod@v3.22.4/mod.ts",
"argon2": "https://deno.land/x/argon2@v0.9.2/mod.ts",
"argon2": "https://deno.land/x/argon2@v0.10.1/lib/mod.ts",
"djwt": "https://deno.land/x/djwt@v3.0.2/mod.ts"
},
"compilerOptions": {
"strict": true
},
"fmt": {
"indentWidth": 2,
"lineWidth": 100,
"singleQuote": false
},
"lint": {
"rules": {
"exclude": ["no-explicit-any"]
}
}
}