🦁 لاین ویپیان (Lion VPN) یک کلاینت گرافیکی (GUI) مدرن، زیبا و با کارایی بالا برای سیستم پراکسی رله مبتنی بر دامین فرانتینگ (Domain Fronting) است که با استفاده از Compose Multiplatform ساخته شده است.
این کلاینت یک رابط کاربری بصری و تککلیکی فراهم میکند که سرور پراکسی پایتون محلی را بهطور خودکار روی پلتفرمهای مختلف بستهبندی، اجرا و مدیریت میکند.
زبان: English | فارسی
Note
این مخزن یک فورک از پروژه فوقالعاده masterking32/MasterHttpRelayVPN است.
هسته اصلی موتور رله پراکسی توسط کدهای پایتون بالادستی (Upstream) اجرا میشود. تمامی کدهای مربوط به رابط کاربری گرافیکی چندسکویی، ادغامهای بومی پلتفرمها (سرویس VPN اندروید، بستهبندی دسکتاپ، پلهای واکنشی State-Flow و بهینهسازیهای کارایی JNI) در پوشه /cmp قرار دارند و به عنوان یک پوسته گرافیکی چندسکویی اختصاصی توسعه داده شدهاند.
graph TD
subgraph "Lion VPN GUI Client (Compose Multiplatform)"
UI[Compose Multiplatform UI]
AndroidApp[Android Client /com.darius.lionvpn]
DesktopApp[Desktop Client /desktopApp]
IosApp[iOS Client UI Preview]
end
subgraph "Local Python Proxy (Upstream Engine)"
ProxyServer[Proxy Server /src/proxy]
MITM[MITM Cert Manager /src/proxy/mitm]
Fronter[Domain Fronter /src/relay]
end
subgraph "Google Apps Script Relay (Cloud)"
GAS[Apps Script Web App]
Target[Destination Site]
end
UI --> AndroidApp
UI --> DesktopApp
UI --> IosApp
AndroidApp -->|Chaquopy JNI Bridge| ProxyServer
DesktopApp -->|Embedded Executable| ProxyServer
ProxyServer -->|Domain Fronted HTTPS| GAS
GAS -->|Fetch Request| Target
- 🎨 طراحی و ظاهر پرمیوم (UI/UX): ساخته شده با آخرین استانداردهای طراحی Compose Multiplatform، پشتیبانی کامل از حالت تاریک (Dark Mode)، میکرواِنیمیشنهای روان و رنگهای گرادیانت هارمونیک.
- 🔌 اتصال تککلیکی: دکمه اتصال ساده و زیبا با نشانگر وضعیت تپنده که سرور پراکسی را بهصورت خودکار در پسزمینه راهاندازی و متوقف میکند.
- 📱 ادغام بومی اندروید (
VpnService): پوسته اختصاصی اندروید برای هدایت ترافیک کل سیستم به پراکسی محلی SOCKS5/HTTP بدون نیاز به تنظیم دستی پراکسی در تنظیمات وایفای. - 💻 خروجی تککلیکی دسکتاپ: سیستم ساخت بهینهشده برای دسکتاپ که سرور پایتون را با استفاده از PyInstaller به یک فایل اجرایی مستقل بستهبندی میکند.
- 🔒 تولیدکننده خودکار گواهی HTTPS MITM: تولید، خروجی گرفتن و نصب گواهی محلی CA برای عبور امن از ترافیک رمزنگاریشده HTTPS مستقیماً از داخل برنامه.
- ⚡ کارایی بالا بدون قفل شدن رابط کاربری: مکانیزم ورود لاگ بسیار سریع JNI برای جلوگیری از کندی برنامه در حین انتقال دادهها به همراه ترد پسزمینه آسنکرون برای سرعت حداکثری.
برای شروع، ابتدا رله Google Apps Script خود را مستقر (Deploy) کنید. این بخش کاملاً مشابه پروژه اصلی است:
۱. وارد Google Apps Script شوید و با اکانت گوگل خود ورود کنید.
۲. روی New project کلیک کنید.
۳. محتوای پیشفرض ادیتور را کاملاً پاک کنید.
۴. فایل apps_script/Code.gs را باز کرده، تمامی کدهای آن را کپی کنید و در ادیتور Apps Script قرار دهید.
۵. مقدار AUTH_KEY را با یک رمز طولانی و مخصوص به خود جایگزین کنید:
javascript const AUTH_KEY = "your-secret-password-here";
۶. روی Deploy -> New deployment -> Web app کلیک کنید.
۷. گزینه Execute as را روی Me و Who has access را روی Anyone تنظیم کرده و دکمه Deploy را بزنید.
۸. شناسه Deployment ID و رمز AUTH_KEY را یادداشت کنید.
تمام کدهای منبع برنامههای رابط کاربری و دستورات ساخت آنها در پوشه /cmp قرار دارند.
Tip
تفاوت نسخههای پرتابل پوشهای با فایلهای نصبی:
- دستور
cd cmp && ./gradlew :desktopApp:createReleaseDistributableرا برای ساخت سریع یک پوشه مستقل، پرتابل و بهینهسازیشده که بدون نیاز به نصب قابل اجراست اجرا کنید. - دستور
cd cmp && ./gradlew :desktopApp:packageDistributionForCurrentOSرا برای ساخت و تولید یک فایل نصبی بومی (مانند DMG، MSI یا DEB) مخصوص سیستمعامل خود اجرا کنید.
قبل از شروع، در ترمینال خود به پوشه /cmp بروید:
cd cmpسیستم ساخت دسکتاپ بهطور خودکار موتور پراکسی پایتون را کامپایل کرده و در منابع برنامه قرار میدهد.
- اجرا در حالت توسعه (Dev Mode):
./gradlew :desktopApp:run
- ساخت نسخه پرتابل/پوشهای غیرنصبی (سریع):
این دستور یک پوشه حاوی فایل اجرایی غیرنصبی و پیشکامپایلشده به همراه تمامی نیازمندیهایش را در مسیر
./gradlew :desktopApp:createDistributable
cmp/desktopApp/build/compose/binaries/main/appایجاد میکند که بدون نیاز به نصب قابل اجراست. - ساخت نسخه پرتابل بهینهشده نهایی (Release Distributable):
این دستور پوشه مستقل و بهینهسازیشده (پروگارد شده) نهایی را در مسیر
./gradlew :desktopApp:createReleaseDistributable
cmp/desktopApp/build/compose/binaries/main-release/appآماده میکند. - خروجی گرفتن نسخه نصبی نهایی (Native OS Installer):
این دستور فایل نصبی بومی (مانند
./gradlew :desktopApp:packageDistributionForCurrentOS
.dmgروی مک،.msiروی ویندوز و.debروی لینوکس) را در مسیرcmp/desktopApp/build/compose/binariesایجاد میکند.
- نصب مستقیم نسخه دیباگ روی گوشی یا شبیهساز:
مطمئن شوید گوشی اندرویدی یا شبیهساز روشن و متصل به ADB است:
./gradlew :androidApp:installDebug
- کامپایل فایل APK نهایی:
فایلهای APK خروجی در مسیر
./gradlew :androidApp:assembleRelease
cmp/androidApp/build/outputs/apk/ذخیره میشوند.
- پروژه
/cmp/iosApp/iosApp.xcodeprojرا در Xcode باز کنید تا بتوانید پیشنمایش رابط کاربری آن را روی شبیهساز یا دستگاههای iOS اجرا کنید. (قابلیتهای شبکه در حال حاضر بهصورت شبیهسازیشده است).
- فریمورک رابط کاربری: Compose Multiplatform (توسط JetBrains)
- تزریق وابستگی: Koin (تزریق وابستگی چندسکویی)
- محیطهای پایتون داخلی:
- اندروید: Chaquopy (اجرای پایتون بهصورت بومی درون اندروید)
- دسکتاپ: PyInstaller (کامپایلر مستقل پایتون)
- مسیریابی: Jetpack Navigation Compose Multiplatform
- برای گزارش مشکلات مربوط به سرور و موتور پراکسی اصلی و کدهای پایتون، به مخزن اصلی مراجعه کنید: masterking32/MasterHttpRelayVPN.
- برای گزارش باگهای رابط کاربری، درخواستهای بهینهسازی کارایی و بهبود کلاینتهای موبایل، خوشحال میشویم یک Issue یا Pull Request روی این فورک ثبت کنید!
برای حفظ نظم، تمیزی و مقیاسپذیری کدها در این پروژه فورک، تمامی مشارکتها (بهویژه در پوشه /cmp) باید به طور دقیق از دستورالعملهای توسعه ما پیروی کنند.
برای جزئیات کامل، لطفاً سند مربوطه را مطالعه فرمایید:
- دستورالعملها و قوانین توسعه CMP
اصول کلیدی عبارتند از:
۱. تفکیک از پروژه اصلی: تمام کدهای سفارشی را فقط در پوشه /cmp قرار دهید و کدهای اصلی بالادستی (upstream) را به هیچ وجه تغییر ندهید.
۲. کامپوزبلهای کوچک و مجزا: از ایجاد فایلهای کامپوزر بزرگ خودداری کنید. کامپوزبلها را به توابع کوچکتر شکسته و در فایلها یا پکیجهای مجزا سازماندهی کنید. همچنین پارامتر modifier: Modifier = Modifier باید آخرین پارامتر در هر کامپوزبل باشد.
۳. عدم تزریق Context به ViewModelها: برای جلوگیری از نشت حافظه (Memory Leak)، هرگز کلاس Context اندروید را به ViewModelها پاس ندهید.
۴. معماری ماژولار و مستقل: منطق برنامه را کپسولهسازی کرده و از دیزاینپترنهای Delegate، Manager و Provider استفاده کنید.
۵. عدم هاردکد کردن منابع: از هاردکد کردن رشتهها یا رنگها خودداری کرده و همیشه از منابع استاندارد (Resources) استفاده کنید.
۶. منظمسازی Importها: هرگز از ایمپورتهای ستارهدار (*) استفاده نکنید و همیشه پس از هر تغییر ایمپورتهای فایل را بهینهسازی کنید.
۷. محدودیت تعداد خطوط فایل: فایلهای منبع را ساده و خوانا نگهدارید (ترجیحاً کمتر از ۵۰۰ خط).
۸. استاندارد پولریکوئستها (Pull Requests): عنوان PR باید با شماره ایشو در براکت شروع شود (مثال: [45] Title) و خط اول توضیحات PR حتماً باید شامل # #<issue_number> باشد (مثال: # #45).
این پروژه تحت مجوز MIT منتشر شده است — برای اطلاعات بیشتر فایل LICENSE را مطالعه کنید.