⚡ Lightweight E2EE Web Chat — документация

✍️ Технически преглед 🔒 криптиране от край до край

Еднофайлово, вграждаемо (embeddable) уеб чат приложение с незабавни съобщения и опционално криптиране от край до край (E2EE). Не изисква собствен бекенд сървър – използва изцяло клиентска архитектура, подпомогната от Supabase.

✨ Основни функционалности

🏗️ Как работи (Архитектура)

Приложението е изградено изцяло на клиентската страна (Single-Page Application в един index.html файл). То комуникира директно със Supabase (PostgreSQL база данни, Storage и Realtime).

Създаване и присъединяване към стаи

Чат стаите са ефимерни (не изискват регистрация). Генерира се случаен Room ID, който се добавя към URL параметъра (?room=abc123). Връзката може да бъде споделена. Ако създателят на стаята е задал парола (ключ), системата превключва в режим E2EE и изисква ключа при влизане.

Криптография (E2EE Flow)

Когато стаята е криптирана, се използва вградения Web Crypto API на браузъра. Паролата се обработва чрез алгоритъм PBKDF2 заедно със сол (Salt), базирана на ID-то на стаята, за да се генерира 256-битов AES ключ. Текстовете се криптират с AES-GCM, като за всяко съобщение се генерира случаен вектор (IV). Файловете се криптират по същия начин преди качване в Storage. При получаване, клиентът дешифрира данните локално.

Realtime и Синхронизация

Приложението отваря Supabase Realtime канал за конкретната стая:

Telegram Известия

Потребителят натиска бутон за свързване с Telegram. Приложението генерира Base64 payload (RoomID:Nickname) и отваря бота със /start параметър. Supabase Edge Function (telegram-webhook) приема командата, записва Chat ID-то на потребителя в таблицата telegram_subs и управлява статусите (/stop, /status). Когато пристигне ново съобщение, друга Edge Function (check-notifications), въртяща се по график (Cron), проверява дали потребителят е офлайн и му изпраща известие през Telegram API.

⚡ Криптиране от край до край – Паролата никога не напуска браузъра. Сървърът (Supabase) вижда само криптирани байтове. Дори файловете се съхраняват шифровани в Storage.

🛠️ Технологии

Frontend: HTML5, CSS3, Vanilla JS (ES6+) Бекенд/База: Supabase (PostgreSQL, Realtime, Storage, Edge Functions) Криптография: Web Crypto API (Browser Native) UI: emoji-picker-element, Iconify

Структура на данните: Всяко съобщение съдържа id, room_id, username, content (текст или метаданни за файл), iv, file_url, reply_to, created_at. При криптирани стаи, content и file_url са криптирани низове.

Сигурност: Ключът се генерира на базата на парола + сол (room ID), което гарантира уникалност за всяка стая. Използва се 256-битов AES-GCM с произволен IV за всяко съобщение – устойчивост срещу атаки с избран шифротекст.

📄 Лиценз: Свободен за ползване и модифициране.

— край на документацията —