﻿# Lisans Yonetim Konsolu - Kullanim Kilavuzu

## Ne Yapildi

Uretici makinesinden TUM fikocad'lari uzaktan yonetmek icin eksiksiz bir
sistem kuruldu. Mevcut altyapi (kokDB + tetikleyici motoru + Socket.IO)
kullanildi; sifirdan bir yonetim servisi YAZILMADI.

---

## 1. Sunucu Tarafi (2 dosya)

### `apps/uyar_dokum/uyar/uyar_main.go` (1 satir)

```go
TetikleyiciRouting(Uyar)   // EKLENDI
```

Bu olmadan "manuel tetikle" ucu 404 verir ve aninda komut gonderilemez.
Tetikleyici rotalari: `/uyar/api/fikoyt.com.FikoYT.sistem.tetikleyici.manuel-tetikle`

### `sistem/kokDB/guvenlik.go` + `routes.go`

Generic DB uclarina erisim kontrolu. Onceki haliyle `db` yolu istemciden
geliyor ve **hic yetki kontrolu yoktu** - oturumu olan herkes `goUyeler`
koleksiyonunu parolalar dahil okuyabilir, kendini Super Yonetici yapabilirdi.

```go
func dbErisimKontrol(FikoYT *FikoYTCtx.FikoYTCtx, db string) error
```

- Oturum zorunlu (401)
- Beyaz liste (varsayilan KAPALI - yeni koleksiyon unutulunca acilmaz)
- `goUyeler`, `go_sessions`, `firma`, `personel` -> sadece yonetici

---

## 2. Uretici Tarafi (Araçlar -> Lisans Yonetimi)

Derleme: `cmake -DFIKO_URETICI_UI=ON` (uretici makinesinde)

| Dosya | Rol |
|-------|-----|
| `lisans_yonetim.hpp` | Arayuz sozlesmesi |
| `lisans_yonetim_http.cpp` | WinHTTP + kokDB + tetikleyici + imzalama |
| `lisans_yonetim_penceresi.cpp` | UI |

### Panel

**Ust serit:** sunucu adresi + yonetici hesabi + Baglan/Cikis, LED, hata satiri

**Sol tablo** (3 sn otomatik yenilenir):
Bilgisayar | Seri | IP | Son | Durum
- LED: yesil=aktif+lisansli, sari=bagli ama lisanssiz, gri=cevrimdisi, kirmizi=kilitli
- Filtre: bilgisayar/seri/musteri/IP
- Tikla -> sag panel acilir

**Sag panel - 5 bolum:**

1. **Cihaz bilgisi** - kimlik, seri, musteri, IP, surum, son baglanma
2. **Uzaktan komut gonder** - beyaz listeden sec + mesaj + [Gonder]
3. **Lisans ver / komut yetkilendir** - katalogdan coklu secim (filtreli),
   ozel anahtar yolu, sureli/suresiz bitis, [LISANSI YAZ ve aninda gonder]
4. **Uzak kanal durumu** - kanal bagli mi, komut gecmisi temizle
5. **Son komutlar** - saat | komut | OK/RED | detay

---

## 3. Musteri Tarafi (3 dosya, her surumde derlenir)

| Dosya | Rol |
|-------|-----|
| `lisans_uzaktan_soket.cpp` | `/socket.io/` baglantisi, komut dinleme |
| `lisans_uzaktan_komut.cpp` | 3 katmanli dogrulama + uygulama |
| `lisans_uzaktan_bilet.cpp` | kokDB'den imzali bilet cekme |

Ozel anahtar YOK - yalniz gomulu ACIK anahtarla imza DOGRULANIR. Bu yuzden
musteri ikilisinde bulunmasi guvenlik acigi degildir.

### Iki kanal birlikte calisir

| Kanal | Yol | Islev |
|-------|-----|-------|
| Eski (dokunulmadi) | `/isans` | Kill-switch: engelle/izin kararlari |
| Yeni | `/socket.io/` | Uzaktan komut + cihaz kaydi |

### 3 Katmanli Guvenlik

```cpp
// 1. BEYAZ LISTE (istemci son karari verir - sunucu hata donse bile calisir)
if (!beyazListedeMi(komutKodu)) return red;

// 2. MUHURLU SAGLIK KONTROLU
if (!lisansSaglikKontrol()) return red;

// 3. MERKEZI KAPIDAN CALISTIR
cekirdek.komutCalistir(*oge, "uzaktan");
```

### !!! KRITIK - Muhur Tuzağı

`lisans.komutlari` calistirildiginda:

```cpp
for (const std::string& k : kimlikler) lis.komutIzinVer(k);
lis.muhurle();   // <-- BU OLMAZSA 1.5 SN SONRA TUM YETKILER SILINIR
```

`saglikKontrol()` politika ozetini yeniden hesaplar. Politika degisti ama
muhr tazelenmediyse uyumsuzluk sayar, tum haklari en kisitli kipe dusurur.
Bu, sizden gelen "uzaktan yetki" ozelligini calistirmak icin ZORUNLU.

---

## 4. Akis

```
URETICI tiklar
  -> kokDB .ekle (kural: hareketler, vt=tetikleyiciler)
  -> tetikleyici.yenile
  -> tetikleyici.manuel-tetikle
  -> motor: OlayIsle -> kuralEslesiyor -> eylemCihazKomut
  -> socket.Emit("FikoYT.sistem.io.cihaz.komut")
  -> soketCihazMap ile SADECE hedef cihaza
  -> FIKOCAD: beyaz liste -> saglik kontrolu -> komutCalistir
  -> socket.Emit("FikoYT.sistem.io.cihaz.komut-cevap")
GEcikme: 200-800 ms
```

---

## 5. Kurulum

### Sunucu
```bash
cd docker/fikoyt-sunucu
docker-compose build fikoyt-sunucu
docker-compose up -d
```

Dogrulama:
```bash
curl https://fikoyt.com:9000/uyar/api/fikoyt.com.FikoYT.sistem.tetikleyici.durum \
  -H "Content-Type: application/json" -d '{}' -b "sid=<SESSION>"
```

### Uretici makinesi
```bash
cmake -S . -B insa/Release -DFIKO_URETICI_UI=ON
cmake --build insa/Release --target fikocad
```

Calistir: `FIKO_URETICI=1 fikocad.exe` (veya ozel anahtar dosyasi mevcutsa)
Menu: **Araçlar -> Lisans Yonetimi**

Giris: sunucudaki Super Yonetici hesabi (varsayilan `admin`)

---

## 6. Beyaz Liste (23 komut)

**Lisans:** yenile, komutlari, kilitle, kilitac, uzat, kota.sifirla
**Gorus:** tumunu_sigdir, secimi_cercevele, izometrik, ust, on, ortografik, iziklar, malzeme
**Secim:** kip_govde, kip_yuz, kip_kenar
**Analiz:** dosya.fark, cekme_acisi, kalinligi, kurvatur
**Araclar:** guncelleme, geri_bildirim, sistem.temizle

Olmayanlar (her iki tarafta da): dosya.sil, ayar.*, arac.kapat, sifirla.*
Yeni komut eklerken **iki listeye de** eklenmeli.

---

## 7. Dogrulama Durumu

| Bilesen | Durum |
|---------|--------|
| Go sunucu derlemesi | **TAMAM** (`go build .` temiz) |
| kokDB erisim kontrolu | **TAMAM** |
| Tetikleyici route baglantisi | **TAMAM** |
| C++ derlemesi (uretici) | **TAMAM** (10.6 MB, hata yok) |
| C++ derlemesi (musteri) | **TAMAM** |
| Canli sunucu testi | **YAPILMADI** - sunucu calistirilip denenmeli |

**Sunucu yeniden baslatilmalI** (route + guvenlik degisikligi icin).

---

## 8. Bilinen Sinirlar

1. **Anlik cevap gosterilmiyor.** Panel komutu gonderir, "Gonderildi" toast
   cikar; cevap 2-3 sn sonra sol listede gorunur. Gercek zamanli cevap icin
   sunucuda `komut-cevap` event'i dinlenmeli.

2. **Komut listesi senkron degil.** Uretici ve musteri listeleri ayri yazildi.
   Yeni komutta iki dosyaya da eklenmeli.

3. **Bilet cekme sadece dogruluyor.** `lisans_uzaktan_bilet.cpp` bileti alip
   imzayi dogruluyor ve kopma suresini isliyor; haklari `lisansYukleVeUygula`
   uzerinden uygulanmali (tam entegrasyon sonraki adim).

4. **Saat geri alma korumasi** uzaktan verilen sureler icin gecerli degil
   (istemci saati esas). Onceki raporda belgelendi.
