Suistimal Sistemi — Tam Plan v3

Bug Fix + Batch Ayrımı + Uyarı/Yasaklama Sistemi

6
Bug
4
Tasarım
2
Yeni Özellik
1
Karar
Kararlar Buglar Batch Uyarı/Yasaklama Veritabanı Dosyalar TODO

Alınan Kararlar

KARAR-1 Ping-Pong Pattern'i KALACAK

İki kişi aynı hesabı paylaşıp eş zamanlı dinlediğinde, play kayıtları zamana göre sıralandığında IP adresleri 1→2→1→2→1→2 şeklinde değişiyor. Bu Ping-Pong pattern'inin tam olarak aradığı A→B→A döngüsü.

3 pattern ile devam: Ping-Pong + Concurrent Different + Split Stream

Ping-Pong KALIYOR

A→B→A döngüsü (IP, browser, platform)

Sırayla dinleyenleri yakalar

Concurrent Different

Aynı anda farklı fingerprint

Eş zamanlı dinleyenleri yakalar

Split Stream

Aynı fingerprint + overlap

1 PC → 2 hoparlör yakalar

Max skor: 1300 — PP: döngü×100 (max 500) + CD: örnek×50 (max 500) + SS: örnek×30 (max 300)

KARAR-2 Kademe Sistemi

Uyarı
Onay formu
3 gün süre
1. Yasak
3 gün erişim engeli
İletişim yazısı
2. Yasak
15 gün erişim engeli
İletişim yazısı
Kalıcı Yasak
Süresiz engel
İletişim yazısı

Uyarı Gönder Butonu

  • Kullanıcı her sayfada uyarı metni + onay formu görür
  • Onaylayana kadar site kullanılamaz
  • 3 gün içinde onaylamazsa → player çalışmaz
  • Onayladıktan sonra normal kullanıma döner

Yasakla Butonu

  • Direkt erişim engeli (süreli veya kalıcı)
  • Player çalışmaz, site kullanılamaz
  • "Müşteri hizmetleriyle iletişime geçin" mesajı
  • Abonelik devam eder ama erişim yok (sadece engel)

KARAR-3 Diğer Kararlar

E-posta: Hayır, sadece site içi bildirim
Abonelik: Sadece erişim engeli (abonelik devam eder)
Geri sayım: Evet, kalan süre gösterilecek ("2 gün 14 saat")
Onay güvenliği: IP, cihaz, user-agent kaydedilecek

Uyarı / Yasaklama Sistemi (Yeni Özellik)

Kullanıcı Deneyimi

EKRAN-1 Uyarı Ekranı (Tam Sayfa Engel)

Suistimal tespit edilmiştir.

Kalan süre: 2 gün 14 saat 23 dakika

muzibu.com Premium üyeliğinizde, kullanım şartlarına aykırı davranış tespit edilmiştir. Premium üyelik Ticari Uzaktan Hizmet ve Abonelik Sözleşmesi'nde de belirtildiği gibi kişiye özeldir ve aynı anda yalnızca tek bir kullanım içindir.

Bu kapsamda aşağıdaki eylemler yasaktır:

  • Hesap/şifre bilgilerinin üçüncü kişilerle paylaşılması,
  • Aynı hesabın eşzamanlı olarak birden fazla cihazda veya farklı kişiler tarafından kullanılması,
  • Üyeliğin devredilmesi, kiralanması ya da ortak kullanım amacıyla paylaşılması.

Bu tespit, hizmet güvenliği ve kullanım bütünlüğü kapsamında değerlendirilir. Aykırı kullanımın devamı halinde üyeliğiniz hakkında kısıtlama, geçici durdurma veya fesih dahil gerekli işlemler uygulanabilir.

Yetkisiz kullanım gerçekleştirildiği takdirde, kullanım belgesi yalnızca abonelik oluşturulan kişi özelinde düzenlendiğinden, olası bir denetim halinde yetkisiz kullanımda bulunan taraflara herhangi bir koruma sağlamayacaktır.

Beyan ve Onay

Aşağıdaki beyanı okuduğumu, anladığımı ve kabul ettiğimi; Premium üyeliğin kişiye özel olduğunu, şifre paylaşımı ve eşzamanlı çoklu cihaz kullanımının yasak olduğunu; aykırı kullanımın devamı halinde üyeliğime kısıtlama uygulanabileceğine ilişkin ilk uyarının gerçekleştirilmiş olduğunu kabul ederim.

Devam etmek için aşağıdaki ifadeyi ELLE yazınız (kopyala-yapıştır kabul edilmez):
"Okudum, anladım, onaylıyorum."

[text input]
+90 05__ ___ __ __

Türkiye formatı zorunlu: 05XX XXX XX XX

[text input]
Gönder (tüm alanlar doğru doldurulunca aktifleşir)

Bu ekran her route'un en tepesinde çıkar (anasayfa dahil)

Kopyala-yapıştır engeli: paste event engellenecek, typing speed kontrol edilecek

Telefon: Türkiye formatı zorunlu (05XX XXX XX XX), input mask uygulanacak

3 gün içinde onaylanmazsa → player çalışmaz

EKRAN-2 Yasaklama Ekranı (Erişim Engeli)

Hesabınız Geçici Olarak Askıya Alınmıştır

Kullanım şartlarına aykırı davranış nedeniyle hesabınız 3 gün / 15 gün / süresiz süreyle askıya alınmıştır.

Detaylı bilgi ve itiraz için lütfen müşteri hizmetleriyle iletişime geçin.

destek@muzibu.com

0850 XXX XX XX

Kalan süre: 2 gün 14 saat (kalıcı yasaklarda gösterilmez)

Admin Deneyimi

Rapor Detay Sayfasında

Uyarı Gönder → Onay formu gönderir
Yasakla → Süre otomatik (kademe)
Temiz İşaretle → Yanlış tespit

Uyarılı/Yasaklı Kullanıcılar

Yeni route: /admin/muzibu/abuse-reports/sanctions

  • Tüm uyarılı/yasaklı kullanıcılar listesi
  • Her kullanıcının altında tüm suistimal günleri
  • Mevcut kademe (1. uyarı, 1. yasak, 2. yasak...)
  • Onay durumu, kalan süre
  • Onay formunu doldurduysa: isim, metin, tarih

Akış Diyagramı

Suistimal Tespit → Admin inceledi
                    ├── Temiz İşaretle → Bitti
                    ├── Uyarı Gönder → Kullanıcı uyarı ekranı görür
                    │                   ├── 3 gün içinde onayladı → Normal kullanım (izleme sürer)
                    │                   │                           ├── Tekrar suistimal → Admin: Yasakla (1. = 3 gün)
                    │                   │                           │                      ├── Süre bitti → Normal (izleme)
                    │                   │                           │                      │   └── Tekrar → Yasakla (2. = 15 gün)
                    │                   │                           │                      │       └── Tekrar → Yasakla (kalıcı)
                    │                   │                           └── Suistimal yok → Temiz
                    │                   └── 3 gün geçti, onaylamadı → Player çalışmaz
                    │                       └── Onayladı → Normal (player açılır)
                    └── Yasakla → Kademeye göre süre belirlenir
                                  └── İletişim ekranı gösterilir

Onay Doğrulama Kuralları

Kullanıcının yazması gereken: "Okudum, anladım, onaylıyorum."

Kabul Edilir

  • okudum anladim onayliyorum — virgül ve Türkçe karakter önemsiz
  • OKUDUM ANLADIM ONAYLIYORUM — büyük/küçük harf önemsiz
  • Okudum, anladım, onaylıyorum. — tam doğru
  • okudum , anladım,onaylıyorum — boşluklar önemsiz

Reddedilir

  • okudum — eksik kelimeler
  • tamam — farklı metin
  • copy-paste — yapıştırma engelli

Doğrulama algoritması:

// Normalize: lowercase, Türkçe karakter → ASCII, virgül/nokta kaldır, trim
// "okudum anladim onayliyorum" === normalized_input

Bug Listesi (6 Adet)

B1 apiStats() yanlış pattern key'leri Kritik

Controller'da rapid_skips, high_volume gibi eski key'ler aranıyor. Doğrusu: ping_pong, concurrent_different, split_stream + detected kontrolü

B2 formatScore() saniye formatı

Skor puan ama "8m 20s" gösteriyor. "500 puan" olmalı.

B3 getPatternCount() detected filtresi yok

Temiz kullanıcıda bile "3 pattern" yazıyor. Object.values().filter(p => p.detected) olmalı.

B4 show.blade overlap kartları eksik alanlar Kritik

device, platform, overlap_start/end, same_browser, same_ip alanları service tarafından üretilmiyor.

B5 calculateDailyStats() overlaps key yok

Günlük "toplam çakışma" sayısı eksik, grafik boş.

B6 scan_date saat gösteriyor

format('d.m.Y H:i') → format('d.m.Y')

Yeni Özellik: Tarama Batch Ayrımı

Her taramaya benzersiz batch ID verilir. Aynı gün birden fazla tarama yapılabilir, sonuçlar karışmaz.

Migration

scan_batch_id (UUID) + scan_batch_label + index + unique(user_id, batch_id)

API

GET /api/batches + list/stats batch filtresi

UI

Batch dropdown + varsayılan son batch

Veritabanı Değişiklikleri (3 Aşamalı Onay Gerekli)

MIG-1 muzibu_abuse_reports tablosuna batch kolonları

+ scan_batch_idstring(36) nullableUUID
+ scan_batch_labelstring(100) nullable"Son 7 Gün — 28.02.2026"
+ indexscan_batch_id
+ unique(user_id, scan_batch_id)

MIG-2 YENİ TABLO: muzibu_abuse_sanctions (Uyarı/Yasaklama Kayıtları)

KolonTipAçıklama
idbigint PK
user_idbigint FKKullanıcı
abuse_report_idbigint nullable FKTetikleyen rapor
typeenumwarning, ban_3day, ban_15day, ban_permanent
leveltinyintKaçıncı yaptırım (1, 2, 3, 4)
statusenumactive, acknowledged, expired, lifted
messagetextGösterilen uyarı metni
sent_bybigint FKGönderen admin
sent_attimestamp
expires_attimestamp nullablenull = kalıcı
player_blocked_attimestamp nullablePlayer'ın kapandığı an
acknowledged_attimestamp nullableOnay tarihi
consent_namestring(255) nullableYazdığı isim soyisim
consent_phonestring(20) nullableTelefon (05XX XXX XX XX)
consent_textstring(500) nullableYazdığı onay metni
consent_ipstring(45) nullableOnay IP'si
consent_user_agentstring(500) nullableOnay cihazı
admin_notestext nullableAdmin notu
created_attimestamp
updated_attimestamp
Index'ler: user_id, status, type, (user_id + status)

Değişecek / Yeni Dosyalar

Güncellenecek (8)

AbuseReport.phpModel
AbuseDetectionService.phpService
ScanUserForAbuseJob.phpJob
AbuseReportController.phpController
routes/admin.phpRoutes
index.blade.phpListe
show.blade.phpDetay
player-core.jsPlayer (sanction check)

Yeni Oluşturulacak (6+)

migration: add_scan_batchMIG-1
migration: create_sanctionsMIG-2
AbuseSanction.phpModel
AbuseSanctionService.phpService
CheckAbuseSanction.phpMiddleware
sanctions.blade.phpAdmin liste
abuse-warning.blade.phpFrontend uyarı
abuse-banned.blade.phpFrontend yasak

TODO Listesi (Tüm Adımlar)

FAZ 1 Bug Fix + Batch Ayrımı

Kararlar

Ping-Pong KALACAK (3 pattern devam)
Max skor: 1300 (PP:500 + CD:500 + SS:300)

Adım 1: Migration — Batch Kolonları

Aşama 1 onayı alındı
Aşama 2: Migration içeriği göster, onay al
Aşama 3: Çalıştırma onayı al
scan_batch_id (string 36) + scan_batch_label (string 100) + index + unique

Adım 2: AbuseReport.php

$fillable → scan_batch_id, scan_batch_label
THRESHOLD yorum düzeltme (saniye → puan)
getAbuseScoreFormattedAttribute() → puan formatı
scopeInBatch() ekle

Adım 3: AbuseDetectionService.php (En büyük)

scanUser() → batch parametreleri ekle
scanUser() → updateOrCreate: (user_id, scan_batch_id)
scanUser() → status: determineStatus($score) [D1 fix]
detectConcurrentDifferentSource() → sliding window + ek sample alanları [B4]
detectSplitStream() → sliding window + ek sample alanları [B4]
calculateDailyStats() → 'overlaps' key [B5]
getUserTimelineData() → 'overlaps' key [B4]
getOverlapStart() / getOverlapEnd() helper'ları

Adım 4-6: Job + Controller + Routes

Job: batch params + quickCheck early exit [D2]
Controller: startScan() batch ID/label üret
Controller: apiStats() doğru key'ler [B1]
Controller: apiBatches() metodu
Routes: api/batches GET

Adım 7-8: View'lar

index.blade: 3 pattern kartı + formatScore + getPatternCount + batch dropdown [B1,B2,B3]
show.blade: 3 pattern meta + skor puan + dark tema fix + batch bilgisi [B6,D4,E5]

FAZ 2 Uyarı / Yasaklama Sistemi

Veritabanı

Migration: muzibu_abuse_sanctions tablosu (3 aşamalı onay)

Model + Service

AbuseSanction.php model oluştur (type, level, status, ilişkiler)
AbuseSanctionService.php (sendWarning, banUser, acknowledge, getActiveForUser, getNextLevel)

Middleware (Her Route'da)

CheckAbuseSanction middleware oluştur
Aktif uyarı var mı? → uyarı ekranı göster
Aktif ban var mı? → yasaklama ekranı göster
Uyarı 3 gün geçti + onaylanmadı → player engelle
Frontend route'lara middleware kaydet

Frontend Sayfaları

abuse-warning.blade.php — Uyarı metni + onay formu + geri sayım
abuse-banned.blade.php — Yasaklama mesajı + iletişim bilgileri
Onay form submit route + controller
Paste engeli + typing validation (kopyala-yapıştır koruması)
Telefon input mask (05XX XXX XX XX Türkiye formatı)
Geri sayım timer (JS)

Admin Paneli

show.blade: "Uyarı Gönder" + "Yasakla" butonları
sanctions.blade.php — Uyarılı/yasaklı kullanıcılar listesi
Kullanıcı detay: tüm suistimal günleri + yaptırım geçmişi
API: sendWarning, banUser, liftSanction endpoint'leri
Routes: sanctions prefix altında route'lar

Player Entegrasyonu

Stream endpoint: aktif ban veya süresi geçmiş uyarı kontrolü
Player UI: engelli kullanıcıya bilgi mesajı

FAZ 3 Doğrulama Kontrolleri

Migration sonrası kolonlar/tablo oluştu mu?
"Tarama Başlat" → batch ID üretiliyor mu?
İkinci tarama → ayrı batch olarak listeleniyor mu?
Score puan olarak gösteriliyor mu?
Pattern sayısı doğru mu (detected olanlar)?
"Uyarı Gönder" → kullanıcı uyarı ekranı görüyor mu?
Onay formu → paste engeli çalışıyor mu?
Onay sonrası → normal kullanıma dönüyor mu?
"Yasakla" → yasaklama ekranı gösteriliyor mu?
3 gün geçti + onaylanmadı → player çalışmıyor mu?
Geri sayım timer doğru çalışıyor mu?
Kademe yükseltme (uyarı → 3 gün → 15 gün → kalıcı) çalışıyor mu?

Kapsam Dışı (Bu Seferde Yapılmayacak)

E1 Otomatik periyodik tarama (cron)
E2 CSV/Excel export
E3 Arşiv/soft delete
E4 Real-time tarama progress
E5 E-posta bildirimi
E6 Abonelik otomatik iptali