Skip to content

Latest commit

 

History

History
99 lines (67 loc) · 5.01 KB

File metadata and controls

99 lines (67 loc) · 5.01 KB

وار چت (War Chat)

سرور چت رمزنگاری‌شده از سرتاسر به سرتاسر (E2E). فقط HTTP و WebSocket. رمزنگاری بین کاربران؛ سرور فقط نام کاربری→کلید عمومی و صف آفلاین موقت (پس از تحویل حذف می‌شود) را ذخیره می‌کند. بقیه روی کلاینت است. کاملاً آفلاین کار می‌کند—بدون اسکریپت یا CDN خارجی.

چرا وار چت؟

برای کاربران ایرانی که به ابزار چت امن و خصوصی نیاز دارند—بدون وابستگی به سرویس‌های خارجی، بدون نیاز به اینترنت برای بارگذاری، و با امکان اجرا روی سرور داخلی یا شبکه محلی.

امکانات

  • رمزنگاری سرتاسر — پیام‌ها بین کلاینت‌ها رمز می‌شوند؛ سرور هرگز متن ساده را نمی‌بیند
  • کلید عبور یا عبارت بازیابی — ورود با پاسکی (WebAuthn) یا عبارت ۱۲ کلمه‌ای
  • ذخیره‌سازی رمزشده محلی — پیام‌ها در IndexedDB با کلید مشتق‌شده از اعتبار شما رمز می‌شوند
  • لیست کاربران — مرور و جستجوی کاربران ثبت‌شده برای شروع چت
  • چت گروهی — ساخت گروه، دعوت کاربران، قبول یا رد دعوت؛ پیام‌های گروهی رمزنگاری E2E
  • لینک قابل اشتراک — اشتراک /u/username تا دیگران مستقیماً به شما پیام دهند
  • QR کد — QR پروفایل برای اشتراک آسان (همه چیز داخلی، بدون اینترنت)
  • سازگار با موبایل — چیدمان واکنش‌گرا، اعلان‌ها
  • چند حساب — چند حساب در هر مرورگر؛ پیام‌ها به تفکیک کاربر
  • آفلاین‌محور — همه دارایی‌ها داخلی؛ در شبکه‌های ایزوله یا محدود کار می‌کند

نصب سریع

داکر

docker compose up -d

باز کنید: http://localhost:8080

محلی

go run ./cmd/server

نحوه استفاده

  1. راه‌اندازی — با پاسکی وارد شوید یا عبارت ۱۲ کلمه‌ای را وارد کنید (یا بسازید) و ادامه دهید
  2. ثبت‌نام — نام کاربری انتخاب کنید و ثبت‌نام کنید
  3. چت جدید — روی «چت جدید» کلیک کنید، کاربران را مرور و جستجو کنید و گفتگو را شروع کنید
  4. اشتراک — لینک چت خود را کپی کنید (مثلاً http://localhost:8080/u/alice) یا QR کد را از پروفایل به اشتراک بگذارید
  5. چت — پیام‌ها رمزنگاری E2E هستند؛ فقط شما و گیرنده می‌توانید بخوانید. از گروه جدید برای ساخت چت گروهی و دعوت دیگران استفاده کنید.

تست‌ها

  • تست واحد (Vitest): npm test
  • تست E2E (Playwright، چت گروهی): ساخت گروه، دعوت کاربر، قبول/رد دعوت، ارسال پیام در گروه.
# یک‌بار: نصب وابستگی‌های Node و مرورگر Playwright
npm install
npm run e2e:install

# اجرای E2E (سرور به‌صورت خودکار راه می‌افتد، یا از سرور در حال اجرا استفاده می‌شود)
npm run e2e

برای استفاده از سرور در حال اجرا روی پورت 8080: SKIP_WEB_SERVER=1 npm run e2e.

پیکربندی

  • PORT (پیش‌فرض: 8080)
  • DATA_DIR (پیش‌فرض: ./data یا /data در داکر)

داکر

ساخت چندپلتفرمی (AMD64 + ARM64)

# ساخت و ارسال هر دو پلتفرم (برای K8s، Docker Hub و غیره)
./scripts/build-docker.sh YOUR_USERNAME/war-chat:latest

# ساخت محلی (فقط amd64، بارگذاری در داکر)
./scripts/build-docker.sh war-chat:latest --load

Docker Hub

# ابتدا وارد شوید (یک‌بار)
docker login

# ساخت و ارسال (YOUR_USERNAME را با نام کاربری Docker Hub خود جایگزین کنید)
./scripts/build-docker.sh YOUR_USERNAME/war-chat:latest

دانلود و اجرا:

docker run -d -p 8080:8080 -v war-chat-data:/data YOUR_USERNAME/war-chat:latest

Kubernetes: ساخت از --provenance=false استفاده می‌کند تا manifest فقط تصاویر amd64 و arm64 را داشته باشد. این از خطای "exec format error" در K8s جلوگیری می‌کند.

امنیت

تصویر از base حداقلی scratch استفاده می‌کند (بدون OS، بدون پکیج) برای صفر آسیب‌پذیری. برای تأیید اجرا کنید: docker scout quickview war-chat:latest.