TgWitness / Dokumentasi

Rujukan / Keselamatan & projek

Arkitektur

Komponen pengumpul, panel, jurnal, pekerja dan saksi, dan bagaimana data bergerak di antara mereka.

Satu proses Python menjadi hos panel FastAPI dan sebarang bilangan ruang kerja terasing, setiap satu dengan klien akaun pengguna Telethon. SQLite menyimpan jurnal peristiwa berasingan yang hanya menambah dan tetapan operasi yang boleh diubah. Sebuah peti besi yang disulitkan menyimpan kelayakan API, StringSession, dan kunci penandatanganan. Bahagian hadapan adalah HTML/CSS/JavaScript biasa yang dibundel: tiada pembinaan Node, CDN, atau muat turun bahagian hadapan semasa runtime diperlukan.

Modul Tanggungjawab
collector.py Autorisasi, pemilihan dialog, kemas kini, tangkapan skrin, barisan media, pemantauan sambungan
interactions.py / telegram_client.py Tindakan panel yang jelas, resit yang disahkan, ID permintaan berterusan dan dasar percubaan semula callback/sertai tempatan tugas
message_content.py Perbandingan mesej yang dapat diperhatikan, mengecualikan metadata capaian penghantaran
workers.py Tunggu pekerja fail eksport sebelum pembersihan pembatalan
store.py Transaksi WAL, rantaian peristiwa teratur, penapis pertanyaan, tetapan operasi
security.py Penciptaan fail peribadi, peti simpanan disulitkan, tandatangan Ed25519, kunci proses tunggal
evidence.py Eksport jurnal lengkap, derivatif, titik pemeriksaan, pengesahan lampiran
verify.py Pemverifikasi berdiri sendiri, baca sahaja (stdlib + kriptografi): arkib, liputan, jurnal saksi dan kiriman saluran, fail profil
app.py API yang disahkan, kitar hayat, pengesahan permintaan, panel statik
profiles.py Pengumpul akaun pelbagai, pengawal akses dikongsi, kitar hayat setiap ruang kerja
access.py Kebenaran berperingkat, pemeriksaan kebenaran, sekatan IP, had sesi dan konsol pentadbir
proxy_catalog.py Snepakta suapan awam, pemeriksaan pengangkutan, kolam proksi kongsi dan pemilihan berasaskan kesihatan
provenance.py Pengukuran identiti, kod dan kebergantungan yang ditandatangani oleh proses akuisisi
network.py Laluan per-workspace yang disahkan; status dan bukti yang disembunyikan; pilihan pengangkutan Telethon
sessions.py Penukaran hanya-baca luar talian bagi skema SQLite Telethon yang telah disemak
account_import.py Pengesanan dan penormalan dalam memori bagi fail akaun dan JSON yang disokong
tdata.py Pembaca ZIP TData moden terhad, pengesahan checksum/penyahsulit, tiada ekstraksi
doctor.py Semakan kesiapsiagaan tempatan tanpa pengumpulan, log masuk atau pemasangan pakej
download.py Muat turun eksport penstriman yang disahkan dengan bacaan terhad dan tanpa ke atas menulis
monitoring.py Dasar peristiwa setiap ruang kerja dan peraturan lampiran mengikut jenis yang disahkan, dikongsi oleh pengendali, status dan resit yang ditandatangani
scope.py Skop pemerhatian (perbualan terpilih, folder Telegram, keseluruhan akaun), jenis sumber, pengecualian, peringkat semakan semula
dossier.py Profil orang bagi setiap sembang dibina daripada rekod yang disimpan: fakta dengan rujukan rekod, SHA-256/pHash avatar, pengekstrakan sebutan
witness_api.py Token saksi baca sahaja dan tajuk jurnal yang disahkan yang boleh mereka ambil
witness.py Proses saksi bebas: kunci dan jurnal sendiri, pemeriksaan utama, kiriman saluran yang disahkan, eksport
alerts.py Notifikasi Apprise dan senarai notifikasi panel
logging_config.py Log konsol dan diagnostik pelayan berputar untuk pelancaran tanpa tetingkap
statik/ Antaramuka responsif, pintu akses tempatan, penapis, butiran, eksport, tetapan akaun
demo.py Jurnal sintetik dilabel dengan jelas, diasingkan daripada pengumpulan sebenar

Pengendali pemerhatian didaftarkan sebelum sambungan. Pengumpulan langsung dikawal oleh identiti klien aktif, status pelaksanaan nyata, sumber yang diaktifkan atau skop pemerhatian (mod folder atau akaun penuh menambah sembang baru sebagai sumber pada kemas kini pertamanya), dan dasar acara. Klien yang ditolak dan digantikan tidak dapat menyumbang kemas kini langsung. Reaksi mentah dan kemas kini keahlian mengekalkan had keterlihatan. Kandungan mesej masuk dan tugas media tahan lama-nya disimpan bersama. Tugas mengekalkan penerang TL asal dan mengikat hash-nya kepada pemerhatian mesej yang disahkan. Semantik penghantar/penyunting/pembuang dipisahkan.

Setiap ruang kerja menerima satu akaun dan mempunyai direktori serta identiti tandatangan sendiri. Ruang kerja utama kekal di root untuk keserasian; ruang kerja tambahan terletak di profiles/<id>/. Satu token pemegang mengawal keseluruhan pemasangan; ruang kerja bukan penyewa kebenaran berasingan. Kunci proses melindungi direktori; kunci pangkalan data menyusun selingan peristiwa secara bersiri. Setiap tampalan melakukan komitmen secara serentak ke WAL SQLite dengan mod serentak PENUH. Pencetus kemas kini/pembuangan peristiwa menghalang suntingan aplikasi biasa; pentadbir sistem fail kekal di dalam sempadan kepercayaan.

Autorisasi API adalah token pembawa. Operasi log masuk disusun secara bersiri dan terhad mengikut masa. Pemunggahan akaun menggunakan had khusus 12 MiB untuk badan yang disulitkan dan had 8 MiB untuk fail yang terdekod; permintaan API biasa mengekalkan had 16 KiB. Penukaran dijalankan dalam benang pekerja (worker thread), menyimpan muat naik dalam memori, dan memulangkan input yang dinormalisasi kepada pelayar yang disahkan. Log masuk QR mempunyai calon bagi setiap ruang kerja, pengecam jangka pendek, tugas penanti, dan pembatalan eksplisit. Hanya kebenaran yang diterima akan menjadi klien aktif. Telegram FloodWait dikembalikan dengan nilai Retry-After; kelayakan dan mesej ralat RPC mentah tidak didedahkan dalam ralat API. Eksport dijalankan di luar gelung peristiwa asenkron dan disusun mengikut ruang kerja. Ia menyalurkan snapshot bacaan yang stabil, dan boleh wujud bersama dengan penulisan WAL yang berterusan. Pengumpul ruang kerja berkongsi gelung proses/peristiwa.

Snapshot sejarah semasa dan kemas kini langsung boleh bertindih. Kedua-duanya adalah pemerhatian berasingan, dilabel mengikut sumber; duplikat tidak digabungkan secara senyap. Tiada inferens daripada ID yang hilang, teks yang dipadam tetapi dicipta, penyenaraian paksa ahli, atau penyertaan automatik dalam kumpulan dilaksanakan.

Untuk penjelasan yang ditujukan kepada pengendali, lihat bagaimana pengumpulan berfungsi dan format akaun serta sesi.

Konfigurasi rangkaian disimpan dalam peti keselamatan yang disulitkan. Menggunakan laluan akan menutup klien lama dan membatalkan log masuk yang belum selesai; sambungan kemudian menggunakan laluan tersebut tanpa sebarang ralat balik langsung. Pemasangan kunci luaran baharu menghasilkan kunci Fernet setiap ruang kerja dengan HKDF-SHA256 daripada fail kunci induk dan garam rawak yang disimpan. Ini melindungi rahsia secara berasingan daripada direktori data, bukan kandungan jurnal/media dalam teks biasa.

Kemasukan demo tempatan menggunakan keupayaan proses yang dijana secara berasingan, dan tidak pernah menggunakan token panel yang dikonfigurasikan. Penerbitan dan penerimaan memerlukan mod demo secara eksplisit, root sintetik tanpa ruang kerja tambahan atau sesi yang dibenarkan, rakan sebantal/Host loopback, tiada penanda aras penghalaan proksi, dan tiada permintaan pelayar rentas asal. API langsung mengekalkan pengesahan pembawa dan menolak perubahan pengumpulan dalam mod demo.