#pragma once // -- Lisans Yonetim Paneli (yalniz URETICI makinesinde) ------------------------- // Saticinin TUM sistemi uzaktan yonetmesi icin tek panel: // // 1. ACIK FIKOCAD'LERI LISTE -> kokDB .aggregate (goCihazlar) // 2. LISANS VER / UZAT -> kokDB .ekle (fikocadLisanslari, imzali) // 3. KOMUT YETKILENDIR -> lisans.komutlari (beyaz listeli) // 4. UZAKTAN KOMUT GONDER -> tetikleyici -> soket emit // 5. KILITLE / KILIT AC -> lisans.kilitle // // Akis (ANINDA, ~200-800 ms): // Uretici -> tetikleyici kurali yazar -> tetikleyici.yenile // -> tetikleyici.manuel-tetikle -> motor sokete emit eder // -> fikocad komutu alir, uygular, cevap yollar // // ⚠️ BU PANEL MUSTERIYE DAGITILMAZ. Yalniz uretici derlemesinde (FIKO_URETICI_UI) // derlenir ve ozel imza anahtarinin varligiyla ekrana gelir. #include #include #include #include namespace fiko { struct UygulamaBaglam; // ── Baglanan bir FIKOCAD cihazinin gorunumu ─────────────────────────────────── struct CihazOzet { std::string cihazKimlik; // soket eslesmesinin anahtari (soketCihazMap) std::string bilgisayar; // Cihaz_bilgi header'inden std::string ip; // goSoketler'den std::string tipi; // "desktop" vb. std::string seri; // lisans serisi (varsa) std::string musteri; // musteri adi (varsa) std::string surum; // surum (varsa) std::string sonBaglanma; // ISO tarih bool cevrimici = true; bool kilitli = false; // lisans.kilitle uygulandi mi bool engelli = false; // PC bazli engel karari (lisans sunucusu, /kararlar) int sahipKomut = 0; // tahmini sahip olunan komut sayisi std::string uretici; // "1" = uretici makinesi (lisans dosyasi gerekmez) std::vector makine; // donanim parmak izi (goCihazlar.bilgiler.makine) }; // ── Uzaktan komut sonucu (cevap kuyrugu) ─────────────────────────────────────── struct KomutCevabi { std::string komutId; std::string cihazKimlik; std::string komutKodu; std::string mesaj; bool basarili = false; bool beklemede = false; // gonderildi, cevap bekleniyor std::string zaman; }; // ── Panel durumu (UI'da gorunur) ────────────────────────────────────────────── struct YonetimDurumu { std::string sunucu = "https://fikoyt.com:9000"; std::string kullaniciAdi; std::string cevapHatasi; // son isteginin hatasi bool oturumAcik = false; bool sunucuyaBagli = false; bool yukleniyor = false; std::string sonHata; int komutSayaci = 0; // gonderilen toplam i64 sonCevapZamani = 0; // unix }; // ── Ana panel cizimi ─────────────────────────────────────────────────────────── // acik=false iken hicbir sey yapmaz (kapaliyken sifir maliyet). void lisansYonetimCiz(UygulamaBaglam& b, bool& acik); // Cihaz Merkezi: kart ızgarası + cihaz sayfası (cihaz_merkezi_penceresi.cpp). void cihazMerkeziCiz(UygulamaBaglam& b, bool& acik); // ── Is parcaciklari (UI'dan bagimsiz; dogrudan da cagrilabilir) ─────────────── // Oturum ac (Super Yonetici). Donus: basarili mi. bool yonetimOturumAc(const std::string& sunucu, const std::string& kullaniciAdi, const std::string& parola, std::string& hata); // Cihaz listesini tazele (kokDB .aggregate -> goCihazlar). bool yonetimCihazlariYenile(std::vector& cikti, std::string& hata); // Cihaz kayd(lar)ini sunucudan sil (kokDB .sil -> goCihazlar). Uretici/yonetici // yetkisi gerekir; filtre kimlik uzerinden. silinen: okunamadiysa -1. bool yonetimCihazlariSil(const std::vector& kimlikler, int& silinen, std::string& hata); // Cihaz adlari (satici takma adlari) SUNUCUDA saklanir: kokDB koleksiyonu // fikocadCihazAdlari, belge basina tek kayit (_id = cihaz kimligi, alan cihazAdi). // - Yaz: ad bossa kayit silinir; doluysa once .sil sonra .ekle (tek kayit kalir). // - Oku: tum adlari {kimlik -> ad} olarak getirir. Sunucu koleksiyona erisimi // reddederse false + hata metni doner (cagiran yerel kayda dusebilir). bool yonetimCihazAdiYaz(const std::string& kimlik, const std::string& ad, std::string& hata); bool yonetimCihazAdlariOku(std::map& adlar, std::string& hata); // Komut imzalama icin kullanilacak ozel anahtar yolunu ayarla (UI doldurur; // ayarlanmazsa %USERPROFILE%\.fikoyt\lisans_ozel.key varsayilir). void yonetimOzelAnahtarYolAyarla(const std::string& yol); // Lisans/bilet yaz (kokDB .ekle -> fikocadLisanslari). Ozel anahtarla imzalanir. bool yonetimLisansYaz(const std::string& ozelAnahtarYolu, const CihazOzet& cihaz, const std::string& musteri, const std::string& seri, const std::vector& komutlar, i64 bitisUnix, std::string& hata); // Uzaktan komut gonder (tetikleyici uzerinden ANINDA). // komutKodu beyaz listeden olmali; sunucu kurali yazar ve emit eder. bool yonetimKomutGonder(const CihazOzet& cihaz, const std::string& komutKodu, const std::string& mesaj, std::string& hata); // Şifreli .fkl metnini (uretici tarafinda zaten imzali + sifreli) cihaza yazar. // Musteri bu alani sunucudan ceker, lisansZarfCoz + lisansCoz ile dogrular. bool yonetimFklYaz(const CihazOzet& cihaz, const std::string& fklMetin, i64 bitisUnix, std::string& hata); // Komut yetkilendir (lisans.komutlari) - cihaza yeni komut hakki ekler. bool yonetimKomutYetkilendir(const CihazOzet& cihaz, const std::vector& komutlar, std::string& hata); // Kilitle / kilit ac. bool yonetimKilitle(const CihazOzet& cihaz, bool kilitli, const std::string& mesaj, std::string& hata); // ── Durum erisimi (UI okur) ─────────────────────────────────────────────────── YonetimDurumu& yonetimDurumu(); const std::vector& yonetimCihazlari(); // Cevap bekleyen komut var mi? (pumpa: gelince listede goster) bool yonetimCevapTaze(); const std::vector& yonetimCevaplari(); // ── Uzaktan calistirilabilir komut listesi (beyaz liste) ────────────────────── const std::vector& yonetimBeyazListe(); // Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token). // Seçili bilgisayarı engeller (engelli=true) veya iznini açar (engelli=false). // Karar PC kimliğine (cihaz.cihazKimlik) yazılır; yalnız bu bilgisayar etkilenir. bool yonetimEngelDegistir(const CihazOzet& cihaz, bool engelli, const std::string& yoneticiToken, std::string& hata); // Engelli bilgisayar kimliklerini lisans sunucusundan okur (X-Token). bool yonetimEngelliKimlikleri(const std::string& yoneticiToken, std::vector& engelliler, std::string& hata); } // namespace fiko