========================================================
লাইসেন্স সিস্টেম ইনস্টল গাইড (বাংলা)
========================================================

এই জিপে ২টি অংশ আছে:

1) license-server/   → এটি আপনার নিজের মূল সার্ভারে (bd-hoster.com) বসবে।
   এটিই "সব ওয়েবসাইট কোড চলবে কিনা" তা নিয়ন্ত্রণ করে, এবং এর ভেতরেই
   আপনার জন্য আলাদা অ্যাডমিন প্যানেল (admin.php) আছে।

2) shop-patch/       → এই ফাইলগুলো প্রতিটি কাস্টমার সাইটের Laravel কোডে বসবে
   (যে কাস্টমার আপনার হোস্টিং থেকে এই শপ কোড কিনবে)।

--------------------------------------------------------
ধাপ ১ — লাইসেন্স সার্ভার সেটআপ (আপনার মূল সার্ভারে, একবারই)
--------------------------------------------------------
১. bd-hoster.com এ cPanel থেকে একটি নতুন MySQL ডাটাবেস ও ইউজার বানান।
২. license-server/config.php খুলে DB_NAME, DB_USER, DB_PASS বসান।
৩. ADMIN_USER ও ADMIN_PASS বদলে শক্ত কিছু দিন (এটিই আপনার অ্যাডমিন লগইন)।
৪. পুরো license-server ফোল্ডারটি https://bd-hoster.com/license/ এর ভেতরে আপলোড করুন
   (public_html এর বাইরে বা .htaccess-প্রোটেক্টেড কোনো সাবডোমেইনে রাখলে আরও ভালো)।
৫. https://bd-hoster.com/license/api.php খুললেই টেবিলগুলো অটো তৈরি হয়ে যাবে
   (প্রথমবার যেকোনো একটি সাইট কানেক্ট করলেই)।
৬. https://bd-hoster.com/license/admin.php -এ গিয়ে লগইন করুন — এটাই আপনার কন্ট্রোল প্যানেল।
   এখান থেকেই আপনি:
   - অনুমোদিত সার্ভার IP যোগ/বাদ/পরিবর্তন করতে পারবেন (IP বদলালে সব সাইট সাথে সাথে আপডেট হবে)
   - কোন কোন ডোমেইন কানেক্ট হচ্ছে, কয়টা allowed / কয়টা blocked তা দেখতে পারবেন
   - প্রতিটি ডোমেইনকে ম্যানুয়ালি allow / block / auto করতে পারবেন
   - সাম্প্রতিক অ্যাক্টিভিটি লগ দেখতে পারবেন

--------------------------------------------------------
ধাপ ২ — প্রতিটি কাস্টমার শপে প্যাচ বসানো
--------------------------------------------------------
shop-patch ফোল্ডারের ভেতরের ফাইলগুলো শপের একই পাথে কপি করুন (merge/overwrite):

  app/Support/Runtime.php                 → নতুন ফাইল
  app/Http/Middleware/LicenseGuard.php    → নতুন ফাইল
  resources/views/errors/license.blade.php → নতুন ফাইল

তারপর app/Http/Kernel.php এর $middleware অ্যারের ভেতরে এই লাইনটি যোগ করুন
(অন্য সব গ্লোবাল মিডলওয়্যারের সাথে, একদম উপরে বা নিচে, ক্রম গুরুত্বপূর্ণ না):

    \App\Http\Middleware\LicenseGuard::class,

ব্যাস — এখন থেকে এই শপ কোড শুধু আপনার দেওয়া অনুমোদিত সার্ভার IP-তে চললে
স্বাভাবিকভাবে কাজ করবে। অন্য কোনো হোস্টিং-এ আপলোড করলে ইউজার সাইট খুললেই
"এই সাইটটি আপনার ওয়েবসাইটের জন্য উপলব্ধ নয়" পেইজ দেখবে।

--------------------------------------------------------
কিভাবে কাজ করে (সংক্ষেপে)
--------------------------------------------------------
- প্রতিটি রিকোয়েস্টে LicenseGuard মিডলওয়্যার শপের ডোমেইন ও সার্ভার IP
  HMAC-sha256 সিক্রেট দিয়ে সাইন করে license-server/api.php তে পাঠায়।
- api.php শুধু signature মিলিয়ে, allowed_ips লিস্টের সাথে মিলিয়ে জবাব দেয়,
  জবাবও সাইন করা থাকে (কেউ জবাব জাল বানাতে পারবে না)।
- শপের দিকে ফলাফল সংক্ষিপ্ত সময়ের জন্য ক্যাশে হয়, তাই প্রতি রিকোয়েস্টে
  বাড়তি লোড পড়ে না এবং সাইট স্লো হয় না।
- সিক্রেট কী ছাড়া কেউ নিজের জবাব বানিয়ে চেক পাস করাতে পারবে না; সোর্স কোড
  থেকে Runtime.php মুছে ফেললেও মিডলওয়্যার না থাকলে পুরো অ্যাপ লোড হবে না
  (কারণ এটা গ্লোবাল মিডলওয়্যার)।

এটি কোনো প্রফেশনাল DRM সিস্টেমের মতো ১০০% আনব্রেকেবল না (সোর্স কোড যার হাতে
আছে, সে থিওরিতে মিডলওয়্যার লাইনটা কেটে ফেলতে পারে) — কিন্তু সাধারণ কাস্টমার
এটা ব্রেক করতে পারবে না, কোড অবফাসকেট/এনকোডেড না থাকায় ভবিষ্যতে আপনি নিজেই
সহজে মেইনটেইন করতে পারবেন।
