مدیریت مجوز نرم افزار با Polar.sh

این مقاله فقط یک ماه پیش برای من بسیار مفید خواهد بود-بنابراین در اینجا ، در درجه اول برای سایر توسعه دهندگان که مانند من معمولاً نرم افزاری را نمی نویسند که به معنای اجرای آن در محیط های غیر سرور است.
من فقط مجوزها را به یکی از برنامه های خود معرفی کردم – DEVTUI. یک برنامه دیگر وجود دارد که از کد من ، poshtui رنج می برد ، و ممکن است به زودی به چیزی مشابه نیاز داشته باشد. من گمان می کنم که همه اینها در آینده دوباره مفید خواهد بود.
الزام
با شروع ، من فقط می دانستم که چه چیزی باید ساخته شود: یک راه حل مجوز برای یک محصول پرداخت یک بار. یک راه حل باید از الزامات زیر پشتیبانی کند:
- امکان صدور مجوزهای رایگان برای هواداران اولیه Poshtui
- امکان محدود کردن هر مجوز به سه دستگاه (یا کمتر)
- به مشتریان اجازه دهید مجوزهای خود را بدون نیاز به تماس با پشتیبانی (به عنوان مثال غیرفعال کردن مجوزها یا مشاهده رسید) مدیریت کنند
- باید به صورت آفلاین کار کند اعتبار سنجی مجوز نباید هر بار که برنامه شروع می شود اجرا شود
سرور صدور مجوز
من از Polar.sh به عنوان ارائه دهنده پرداخت و مجوز استفاده می کنم. من در مورد چگونگی پایان دادن به آنها ، بخشی از آن را رد می کنم – علاقه ای به بدی برای هر رقابتی ندارم.
چرخاندن راه حل خود در بالای نوار نیز امکان پذیر است. اما این گزینه ای نبود که ارزش من را دنبال کند. کاهش 4 درصدی درآمد آینده به نظر می رسید یک تجارت عادلانه برای جلوگیری از برخورد با پرداخت پرداخت و زیرساخت های مجوز است.
تیم قطبی فوق العاده مفید بوده است. هنگامی که من برای اولین بار با آنها تماس گرفتم ، آنها حتی یک SDK Go هم نداشتند ، اما آنها طی دو روز یکی را منتشر کردند. آنها همچنین با نکات مفید و اصلاحات ارسال شده پاسخ دادند – دوباره ، در طی 48 ساعت از ایمیل اولیه من.
Polar.sh تمام موارد سرور را برای من فراهم می کند.
- راهی برای تعریف محصولی ارائه دهید که یک بار قابل پرداخت باشد
- همچنین برای آن طرفداران و دوستان اولیه تخفیف هایی وجود دارد
- درگاه مشتری
-
پیوندهای پرداخت برای یک محصول ، حتی یکی با 100 ٪ تخفیف
اما اجرای سمت مشتری به من بستگی دارد.
فعال سازی مجوز
برنامه می تواند سه اقدام مربوط به مجوز انجام دهد – فعالبا معتبر وت بی اثر کردنبشر همه این اقدامات در حال حاضر در یک رابط CLI اجرا شده است.
Commands for activating, validating, and deactivating licenses
Usage:
devtui license [command]
Available Commands:
activate Activate a license
deactivate Deactivate a license
validate Validate a license
فعال کردن
اما من انتظار دارم که بیشتر کاربران احتمالاً فقط یک دستور را فراخوانی کنند – activate
بشر
devtui license activate --key=DEVTUI-2CA57A34-E191-4290-A394-XXXXXX
من عمداً از هیچ متغیرهای ENV استفاده نمی کنم – این به یک کتابخانه اضافی نیاز دارد ، و من نمی خواهم کاربران آنها را آلوده کنند .zshrc
یا .bashrc
با متغیرهای اضافی
پس از فعال سازی ، کلید و اطلاعات مرتبط با آن در یک ذخیره می شوند license.json
پرونده
در حین فعال سازی ، فراهم کردن “شرایط” امکان پذیر است. در مورد ما ، ما از آدرس MAC برای ارتباط مجوز با یک دستگاه خاص استفاده می کنیم. سرور مجوز حداکثر 3 دستگاه در هر مجوز را اعمال می کند.
معتبر
این عمل از license.json
پرونده ایجاد شده در هنگام فعال سازی. در حالی که دستور CLI به سادگی بررسی می کند که مجوز فعال است ، این منطق اعتبار سنجی نیز مستقیماً در برنامه تعبیه شده است.
در اینجا یک طرح خشن از منطق اعتبارسنجی آورده شده است:
- این بررسی می کند که مبلغ هش انتظارات را مطابقت می دهد
- اگر مطابقت نداشته باشد -> ما مجوز را با سرور دوباره تأیید می کنیم
- اگر مطابقت داشته باشد -> ما بررسی می کنیم که آیا وقت آن رسیده است که مجوز را با سرور بررسی کنیم.
- در حین بررسی مجوز با سرور ، اگر آدرس MAC شبیه به نمونه ای نباشد که در هنگام فعال سازی از آن استفاده کردیم – اعتبارسنجی شکست خواهد خورد. این باعث می شود افراد فقط حرکت کنند
license.json
پرونده به دستگاه دیگری.
این نرم افزار سعی می کند هر هفته مجوز را با سرور تأیید کند ، این بازه زمانی کاملاً دلخواه است.
بی اثر کردن
این همچنین از license.json
پرونده ایجاد شده در هنگام فعال سازی.
در حالی که در حال حاضر امکان غیرفعال کردن مجوز از طریق پورتال مشتری امکان پذیر است ، در دسترس بودن آن در CLI احساس اهمیت می کند. دو مورد استفاده به ذهن خطور می کند:
- اجرای برنامه در محیط های CI که ماشین ها به طور مداوم بازیافت می شوند
- تغییر از یک دستگاه به دستگاه دیگر
شناسایی یک ماشین
به دانش من ، بیشتر نرم افزار به طور منحصر به فرد دستگاه را با آدرس MAC خود شناسایی می کند. مهم است که آدرس MAC فیزیکی و سازنده را پیدا کنید ، از آن در هنگام فعال سازی مجوز استفاده کنید و بعداً در هنگام اعتبارسنجی به آن اعتماد کنید.
با این حال ، همه آدرس های MAC برابر نیستند. همچنین آدرس های محلی (LAAS) وجود دارد ، اینها یکسان نیستند زیرا می توانند باشند:
- به صورت دستی توسط یک مدیر شبکه اختصاص داده شده است
- اغلب در ماشینهای مجازی استفاده می شود
- مشترک در سناریوهای مجازی سازی شبکه
شناسایی این موارد با بررسی دومین حداقل مهمترین Octet اول:
- اگر بیت 1 باشد ، بصورت محلی اداره می شود
- اگر 0 باشد ، به صورت جهانی اداره می شود
مثالها:
- 02: 00: 00: 00: 00: 00 → محلی اداره می شود
- 00: 1a: 2b: 3c: 4d: 5e → به صورت جهانی اداره می شود
پرونده مجوز
ما از کتابخانه github.com/adrg/xdg استفاده می کنیم تا تعیین کنیم که پرونده مجوز را در کجا ذخیره کنیم.
این کتابخانه مشخصات دایرکتوری XDG Base و XDG Directory Directory را پیاده سازی می کند و یک مکانیزم استاندارد برای ذخیره وضعیت برنامه ، داده ها یا پیکربندی در چندین سیستم عامل – Windows ، Linux ، Plan 9 و MacOS ارائه می دهد.
در مورد برنامه ، ما به XDG_DATA_HOME
، یا برگه ها طبق سیستم عامل:
یونیکس | مگس | برنامه 9 | ویندوز |
---|---|---|---|
~/. local/اشتراک | ~/پشتیبانی از کتابخانه/برنامه | $ home/lib | محلی |
مثال “مجوز. json”:
{
"hash": "7394991a704a054096f4484d8a19f9ac66e3e8c98b68603652feadc785a364f2",
"license_key_id": "DEVTUI-2CA57A34-E191-4290-A394-XXXXXX",
"activation_id": "2ee71107-2ecb-4172-aff7-ceaa6b2f7cef",
"next_check_time": "2025-05-12T23:18:12.7724912+02:00",
"last_verified_at": "2025-05-05T23:18:12.772488825+02:00"
}
هش از مقادیر مختلفی تولید می شود و برای تأیید اینکه داده های مجوز با آن دستکاری نشده است ، استفاده می شود. اگر هش مطابقت نداشته باشد ، برنامه مجوز را نامعتبر می کند.
من به جزئیات کامل آنچه در هش می رود ، نمی روم ، اما به طور کلی:
- آدرس MAC
- کلید مجوز
- زمان فعال سازی
- Timestamp بررسی بعدی
- مقدار نمک (رشته تصادفی)
این مکانیسم ضد هکر نیست ، اما تلاش لازم برای شکستن آن باید از برچسب قیمت 40 دلار یک بار پیشی بگیرد.
یادداشت های نهایی
این اولین بار است که من منطق مجوز مشتری را برای یک برنامه اجرا می کنم ، بنابراین احتمالاً موارد لبه ای را از دست داده ام. اما اگر کسی بازخورد یا توصیه ای دارد ، لطفاً به این نتیجه برسید.