# Köprü: Hesap Profilleri Planı

> **YENİDEN AKTİF (2026-10-16):** Sınır Windows oturumu değil. Bilgisayarda tek köprü programı çalışır, birden fazla fikoyt hesabı bu köprüye giriş yapar. Plan olduğu gibi geçerli.

Amaç: Aynı bilgisayarda birden fazla fikoyt hesabı oturum açabilsin. Her hesabın izinleri, eşleşmeleri, eklenti etkinliği, eklenti ayarları ve eklenti süreçleri birbirinden bağımsız olsun.

## Kararlar

- [x] Eşzamanlılık (2026-10-16): Köprüde oturum açmış her kullanıcı aynı anda bağlı kalır. Her biri kendi izinlerini, eşleşmelerini, eklenti ayarlarını ve eklenti süreçlerini kullanır. Bir kullanıcının oturumu diğerini etkilemez. Tek oturum (oturum.json üzerine yazma) modeli kaldırılır.
- [x] Windows hesabı bu planın sınırı değildir. Sınır, köprü programı ve içindeki oturumlardır.
- [x] Geçişte diğer hesabın bağlantısı kapanmaz (2026-10-16 kararı). Her hesap kendi socket bağlantısını korur.
- [x] Eklentiler hesaba bağlıdır (2026-10-16 kararı): kurulum ve etkinlik hesap başınadır. Bir hesap kurmadığı eklentiyi görmez. Kurulu dosyalar makine genelinde kalabilir ama her hesabın kendi kurulum kaydı olur.
- [x] Sunucu (2026-10-16 kontrolü): `docker/fikoyt-sunucu/merkez.go-server.com/sistem/fikoyt_socket_io/bridge_socket.go` cihazı `cihazKimlik` + gizli anahtarla doğrulayıp odasına alıyor. Her hesabın ayrı `cihazKimlik`'i olduğu sürece sunucuda değişiklik gerekmeyebilir. Doğrulanması için çoklu socket testi gerekir.

- [x] A. Eşleşme profili: köprüdeki aktif profil kullanılır. Eşleşme onay ekranında profil seçimi de sunulur.
- [x] B. Eklenti süreçleri profil başına çalışır. Kurulum dosyaları makine genelinde kalır; etkinlik, ayar, izin ve süreç profil başınadır.
- [x] C. Hesap çıkarılınca profil verisi varsayılan olarak saklanır. Ayrıca "verisini de sil" seçeneği sunulur.

## Mevcut durum (tek hesap)

Veri klasörü `veriKlasoru()` (bridge/guvenlik.go) `os.UserConfigDir()/FikoYT` yolunu kullanır; Windows'ta bu `%AppData%\FikoYT`. Yani veri zaten Windows kullanıcı hesabı başına ayrıdır. Profil ayrımı gereken yer, aynı Windows hesabında birden fazla fikoyt hesabı olduğu durumdur.


Veri klasöründe tek kümede duran dosyalar:
- `oturum.json` (çerezler)
- `bridge-izin.json` (izinler)
- `eslesmeler.json` (site eşleşmeleri)
- `eklenti-ayar/<anahtar>.json` (eklenti ayarları)
- `cihaz-kimlik`, `cihaz-gizli`, `cihaz-makine` (cihaz kimliği)
- güncelleme tercihi

## Adımlar

- [x] 1. bridge/profil.go: profilAnahtari, profilKlasoru, profilVeriYolu (aktif profil yoksa kök klasör), aktifProfilAyarla, aktifProfilYukle, eskiDosyalariTasi. Oturum, izin, eşleşme ve cihaz dosyaları aktif profil klasörünü kullanıyor. Giriş başarılı olunca profil etkinleşir, eski tek hesap dosyaları ilk profile taşınır (profiller/ boşken). Seçim `aktif-profil` dosyasında tutulur, açılışta main.go yükler. İzinler profil değişince bellekten sıfırlanır. go vet + go test geçiyor.
- [~] 2. Çoklu oturum (kısmi): Oturumlar zaten profil klasöründe, yeni giriş diğer profilin oturumunu silmez. `GET /profiller` (oturumu olan profiller, aktif olan işaretli) ve `POST /profiller/sec` (aktif profil değiştirir, izinleri yükler) eklendi, yalnızca yerel arayüz. Test: profil_oturum_test.go. Henüz EKSİK: aynı anda birden fazla profil bağlı kalması (karar "eşzamanlılık") için izinler ve socket bellekte profil başına tutulmalı; bu adım 3 ile birlikte yapılacak.
- [~] 3. Socket ve senkron (kısmi): Socket ve senkron döngüsü artık aktif profilin cihaz kimliğini her bağlantıda okuyor. Profil seçilince (`/profiller/sec`) veya girişte (`/giris`) açık socket kapatılıyor, yeni profille yeniden bağlanılıyor ve senkron tetikleniyor. Profil değişince bu bilgisayar yeni profil için yeniden kaydoluyor. Henüz EKSİK: aynı anda iki profilin ayrı socket'lerle bağlı kalması (eşzamanlılık kararı); bu, `sokAktif`, `sokHazirOldu` ve eklenti gönderim fonksiyonlarının profil başına tutulmasını gerektiriyor.
- [~] 4. Eklenti süreçleri (kısmi): Eklenti ayarları profil klasöründe (`profiller/<anahtar>/eklenti-ayar/`). Profil değişince (giriş ya da seçim, `profilDegisti`) çalışan tüm eklenti süreçleri kapatılır (`ekTumunuDurdur`). Böylece bir hesabın süreçleri aktif soket üzerinden diğer hesaba olay göndermez. Henüz EKSİK: süreç tablosu hâlâ global (`profil + eklenti` anahtarı yok); etkinlik durumu (`kurulu` listesi) ve kurulu eklenti listesi hâlâ kök klasörde. Bunlar eşzamanlı çoklu profil (adım 3 eksiği) ile birlikte ele alınmalı.
- [x] 5. HTTP uçları: Eşleşme token'ları zaten profilin kendi `eslesmeler.json` dosyasında olduğu için ayrıca profil alanı gerekmedi. Ayarlar sayfasına "Hesaplar" kartı eklendi (geçiş ve çıkarma). `POST /profiller/cikar` hesabı çıkarır: oturum silinir, veri varsayılan olarak saklanır, "verisini de sil" seçilirse profil klasörü silinir. Aktif hesap çıkarılırsa seçim temizlenir ve eklenti süreçleri kapatılır. Seçim ucuna CSRF kontrolü eklendi. Not: Sunucudaki cihaz kaydı çıkarmada silinmiyor; ayrı bir `bridge.cihaz` kaldırma çağrısı gerekebilir.
- [~] 6. Testler (kısmi): profil listesi, seçim, çıkarma testleri (profil_oturum_test.go). Eski veri taşıma testleri eklendi (profil_tasima_test.go): ilk profile taşıma, ikinci profilin dosya çalmaması, açılışta aktif profilin okunması ve bozuk aktif-profil dosyasının yok sayılması. Henüz yok: socket geçişinin ve HTTP uçlarının uçtan uca testi (gerçek bağlantı gerektirir).

## Notlar

- Sunucu tarafı (`fikoyt-sunucu`) zaten `kullaniciID` ile ayırıyor. Profil başına `cihazKimlik` üretildiğinde sunucuda değişiklik gerekmeyebilir.
- Tek port (7878) tüm profillere hizmet eder; port çakışması sorunu yok.
