# Progress - Dead Man Switch 2.0 ## Fazlar ### Faz 1: Proje Kurulumu & Auth ✅ - [x] Next.js proje kurulumu (Next.js 15, current latest) - [x] Tailwind + shadcn/ui setup - [x] PostgreSQL + Prisma setup - [x] NextAuth.js entegrasyonu - [x] User tablosu ve auth akışı - [x] Temel layout ve routing - [x] Dark mode aktifleştirildi ### Faz 2: Mesaj CRUD ✅ - [x] Message, Recipient, Attachment şemaları - [x] Mesaj oluşturma formu - [x] Mesaj listeleme/detay sayfaları - [x] Mesaj düzenleme/silme - [x] IDOR güvenlik açığı düzeltildi ### Faz 3: Dosya Yükleme (R2) ✅ - [x] Cloudflare R2 entegrasyonu - [x] Dosya upload/download API - [x] Dosya listeleme UI ### Faz 4: Client-side Encryption ✅ - [x] Web Crypto API wrapper - [x] Encrypt/decrypt utilities - [x] Şifreli mesaj oluşturma akışı - [x] Decrypt sayfası (alıcı için) - [x] Şifreli mesaj düzenleme - [x] Dosya adı şifreleme ### Faz 5: Check-in & Cron 🔲 - [ ] Check-in API endpoint - [ ] node-cron scheduler setup - [ ] Deadline kontrolü - [ ] Status güncellemeleri ### Faz 6: Email Gönderimi 🔲 - [ ] Nodemailer setup - [ ] Email templates - [ ] Deadline triggered email - [ ] Check-in reminder emails ### Faz 7: Admin Panel 🔲 - [ ] Admin role ve guard - [ ] Kullanıcı yönetimi - [ ] Mesaj istatistikleri - [ ] System logs ### Faz 8: Polish & Deploy 🔲 - [ ] Error handling - [ ] Loading states - [ ] Responsive tasarım - [ ] Production deployment - [ ] Monitoring setup ### Sonradan Yapılacaklar 1. Static Salt in Key Derivation - Severity: Medium - Location: src/lib/crypto.ts (Lines 13-13) - Line Content: 1 salt: encoder.encode("dead-man-switch-salt"), - Description: The deriveKeyFromPassword function uses a hardcoded, static salt ("dead-man-switch-salt") for all users and messages. In the event of a database compromise, this allows an attacker to perform mass rainbow table or dictionary attacks to crack passwords for all users simultaneously. A unique salt per encryption operation is required to force attackers to crack each password individually. - Recommendation: 1. Generate a random, cryptographically secure salt (e.g., 16 bytes) for each new message or file encryption operation. 2. Store this salt alongside the ciphertext (e.g., as a prefix to the encrypted string or in a separate database column). 3. Update deriveKeyFromPassword to accept salt as a parameter. 4. Update the encrypt and decrypt flows to pass this unique salt during key derivation. ## Tamamlanan - ✅ Teknoloji stack seçimi - ✅ Memory bank oluşturma - ✅ Faz planlaması - ✅ Faz 1: Auth sistemi - ✅ Faz 2: Mesaj CRUD - ✅ Faz 3: Dosya Yükleme (R2) - ✅ Faz 4: Client-side Encryption ## Bilinen Sorunlar (henüz yok)