Frontend GET /api/muzibu/songs/{id}/stream isteği yapar
Guest? Normal User? Premium? → Bu bilgiye göre chunk limiti belirlenir
Guest/Normal → İlk 3 chunk (30 saniye)
Premium → Tüm chunk'lar
Her chunk URL'inde user_id, chunk_index, expiry bilgisi olur
HLS player playlist'teki chunk URL'lerini sırayla ister
✓ Token geçerli mi?
✓ User bu chunk'ı isteyebilir mi?
✓ Chunk index izin verilen sınırda mı?
✅ İzin varsa → Chunk dosyası serve edilir
❌ İzin yoksa → 403 Forbidden
Orijinal playlist.m3u8 dosyasını okuyup, user tipine göre modify eden bir servis.
Her chunk isteğinde token doğrulama ve yetki kontrolü yapan yeni endpoint.
Mevcut stream() method'unda, HLS serve ederken dynamic playlist kullan.
Her chunk için unique token oluştur ve doğrula.
| Test Senaryosu | Beklenen Sonuç | Durum |
|---|---|---|
| Guest user 4. chunk'ı isterse | 403 Forbidden | ✓ Engellenir |
| JavaScript ile 30 saniye limiti kaldırılırsa | Server yine 3 chunk döner | ✓ Etkisiz |
| Token expire olduktan sonra chunk isterse | 403 Forbidden (Token expired) | ✓ Engellenir |
| Chunk token'ı farklı şarkı için kullanılırsa | 403 Forbidden (Song ID mismatch) | ✓ Engellenir |
| DevTools ile chunk URL'lerini kopyalarsa | Token 10 dakika sonra geçersiz | ✓ Geçici risk |
| Premium user'a downgrade olursa | Yeni istek 3 chunk ile sınırlanır | ✓ Dinamik kontrol |
Dynamic playlist generation her istekte yapılmamalı. User tipine göre cache'le:
Chunk endpoint'ine sıkı rate limiting uygula:
Chunk dosyaları CDN'e cache'lenebilir ama URL'lerde token var, bu CDN'yi bypass eder.
Çözüm: Token'ı query string yerine custom header'da gönder.
Aynı IP'den çok fazla chunk isteği gelirse (örneğin bot), IP'yi geçici olarak engelle.
Chunk isteklerinde User Agent kontrolü yap, şüpheli bot trafiğini filtrele.
Chunk istekleri sadece kendi domain'den gelmeli, hotlinking engellenir.
Her chunk isteğinde user fingerprint'i (IP + User Agent + Device ID) logla, anormal aktivite tespiti için analiz et.
Guest user için chunk süresini 10 saniye yerine 5 saniye yap (daha hassas kontrol). Bu durumda 30 saniye = 6 chunk olur.
1. JavaScript Manipülasyonu İşe Yaramaz: Client-side kod değişse bile, server sadece izin verilen chunk'ları serve eder.
2. DevTools ile İndirme Engellenir: Chunk URL'lerinde token var, 10 dakika sonra geçersiz olur.
3. URL Paylaşımı İşe Yaramaz: Token user_id ve chunk_name içerir, başkası kullanamaz.
4. Hassas Kontrol: Chunk index ile saniye-seviye kontrol (10 saniye/chunk).
5. Dinamik User Tipine Göre Servis: Premium'a yükseltme anında etkili olur.
| Adım | Süre | Zorluk |
|---|---|---|
| 1. PlaylistGeneratorService | 2-3 saat | Orta |
| 2. Chunk Serve Endpoint + Route | 1-2 saat | Kolay |
| 3. SongStreamController Güncelleme | 1 saat | Kolay |
| 4. Chunk Token System | 2 saat | Orta |
| 5. Test + Debug | 2-3 saat | Orta |
| TOPLAM | 8-11 saat | 1-1.5 gün |