سیستم لایسنس اختصاصی تیم موازی

سیستم لایسنس نرم‌افزار با Python در تیم موازی (امن، ساده، قابل گسترش)

ما توی تیم موازی تصمیم گرفتیم که یه راهکار ساده اما مؤثر برای فروش امن‌تر نرم‌افزار‌هامون پیاده‌سازی کنیم. هدفمون این بود که اگر کدی رو به مشتری می‌فروشیم، بتونیم محدودش کنیم که برای همیشه و هرجایی ازش استفاده نکنه.

چرا سیستم لایسنس؟

وقتی کد رو به کسی می‌دی، عملاً کنترل از دستت خارج می‌شه. برای اینکه مطمئن بشیم فقط افراد مجاز، اون هم برای مدت زمان مشخص، بتونن از سیستم استفاده کنن، یه سیستم لایسنس طراحی کردیم.


ساختار کلی لایسنس

ما سیستم رو به ۳ مرحله اصلی تقسیم کردیم:

مرحله اول: ساخت شناسه یکتای سخت‌افزاری (Unique ID)

اول باید مشخص می‌کردیم که چطوری بفهمیم یه سیستم خاص داره از برنامه استفاده می‌کنه یا نه. برای اینکار یه شناسه منحصر به فرد ساختیم با استفاده از اطلاعات سیستم.


import platform
import uuid
import hashlib
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
PERSISTENT_UID_FILE = BASE_DIR / ".project_uid"

def get_unique_id():
    if PERSISTENT_UID_FILE.exists():
        with open(PERSISTENT_UID_FILE, 'r') as f:
            return f.read().strip()
    
    system_info = platform.uname()
    mac_address = uuid.getnode()
    raw_data = f"{system_info.system}-{system_info.machine}-{mac_address}"
    uid = hashlib.sha256(raw_data.encode()).hexdigest()

    with open(PERSISTENT_UID_FILE, 'w') as f:
        f.write(uid)

    return uid
  

توضیح:
ما یه فایل .project_uid می‌سازیم که فقط بار اول ساخته می‌شه. بعدش همیشه از روی اون می‌خونه تا اطمینان حاصل کنیم UID تغییر نکنه، حتی داخل داکر.

مرحله دوم: درخواست لایسنس از سرور

وقتی UID آماده شد، می‌فرستیمش به سرور لایسنس تا یه API Key و تاریخ انقضا برگردونه.


import requests
import json

LICENSE_FILE = BASE_DIR / 'license.json'

def request_license():
    uid = get_unique_id()
    response = requests.post('https:/your_url/get-license/', json={'unique_id': uid})
    if response.status_code == 200:
        data = response.json()
        license_data = {
            "unique_id": uid,
            "api_key": data.get("api_key"),
            "expiry": data.get("expiry")
        }
        with open(LICENSE_FILE, 'w') as f:
            json.dump(license_data, f)
        return True
    return False
  

توضیح:
فایل license.json شامل اطلاعات لایسنس ذخیره می‌شه. این فایل هم توی سیستم باقی می‌مونه.

مرحله سوم: اعتبارسنجی لایسنس

قبل از اجرای برنامه، بررسی می‌کنیم لایسنس معتبره یا نه.


from datetime import datetime

def is_license_valid():
    if not LICENSE_FILE.exists():
        return False
    try:
        with open(LICENSE_FILE, 'r') as f:
            data = json.load(f)
        uid = data.get("unique_id")
        expiry = data.get("expiry")
        if uid != get_unique_id():
            return False
        expiry_date = datetime.strptime(expiry, "%Y-%m-%d %H:%M:%S")
        return expiry_date > datetime.now()
    except:
        return False
  

توضیح:
اگر UID با چیزی که داخل فایل لایسنس هست فرق داشته باشه یا تاریخ انقضا گذشته باشه، اجازه اجرا نمی‌دیم.


نتیجه‌گیری

  • می‌تونیم کنترل کنیم چه کسی از برنامه استفاده کنه.
  • جلوی استفاده مادام‌العمر و بدون مجوز گرفته می‌شه.
  • حتی اگه کد به بیرون نشت کنه، بدون لایسنس معتبر، بی‌استفاده‌ست.

این سیستم رو می‌شه خیلی راحت گسترش داد، مثلاً بررسی آنلاین، تمدید خودکار یا پنل مدیریت لایسنس‌ها.

نظرت چیه؟ برام کامنت بذار تا با هم بهترش کنیم 💬

دیدگاه خود را بنویسید:

آدرس ایمیل شما نمایش داده نخواهد شد.

فوتر سایت