Changeset 3466286
- Timestamp:
- 02/21/2026 07:37:06 AM (3 weeks ago)
- File:
-
- 1 edited
-
licenshield/trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
licenshield/trunk/readme.txt
r3466156 r3466286 1 === LicenShield ===1 === LicenShield — Software License Manager === 2 2 Contributors: parthinian1 3 3 Donate link: https://licenshield.com 4 Tags: license, software license, license manager, license key, woocommerce4 Tags: license, license key, license manager, software license, stripe 5 5 Requires at least: 6.2 6 6 Tested up to: 6.9 … … 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Protect your WordPress plugins and themes with powerful software license management. Generate, validate, and manage license keys with ease.12 Sell and protect your WordPress plugins, themes, desktop apps, and SaaS tools with professional license key management, Stripe payments, piracy detection, and multi-language SDKs. 13 13 14 14 == Description == 15 15 16 **LicenShield** is a complete software license management solution for WordPress developers. Sell your plugins and themes with confidence using secure license key validation, activation limits, and Stripe payments. 17 18 = Free Features = 19 20 * **Unlimited Products & Licenses** - No artificial limits 21 * **License Key Generation** - Create secure, unique license keys automatically or manually 22 * **Activation Management** - Control how many sites can use each license 23 * **Expiration Dates** - Set license validity periods 24 * **Stripe Payments** - Accept one-time payments and auto-generate licenses 25 * **REST API** - Integrate license validation into any WordPress plugin or theme 26 * **Email Notifications** - Automatic emails for purchases 27 * **Rate Limiting** - Protect your API from abuse 28 * **Setup Wizard** - Get started in minutes 29 30 = Use Cases = 31 32 * Sell premium WordPress plugins with license protection 33 * Manage theme licenses with activation limits 34 * Protect any digital product with license validation 35 36 = Developer Friendly = 37 38 LicenShield provides a simple REST API for license validation: 39 40 `POST https://yoursite.com/wp-json/ls/v1/validate 41 { 42 "license_key": "LS-XXXX-XXXX-XXXX-XXXX", 43 "site_url": "https://customer-site.com" 44 }` 16 **LicenShield** is a complete, self-hosted software license management system built for WordPress developers. Install it on your own WordPress site, connect your own Stripe account, and start selling and protecting your plugins, themes, desktop apps, CLI tools, or any other software — with zero monthly fees, zero transaction fees beyond Stripe's standard rate, and no third-party platform owning your data. 17 18 Whether you are a solo developer selling your first plugin or an agency managing an entire portfolio of products, LicenShield gives you a professional licensing backend without the ongoing cost of a SaaS platform. Built in the United States. Designed to be the only licensing tool you will ever need. 19 20 [Visit licenshield.com](https://licenshield.com) | [Documentation](https://licenshield.com/docs) | [API Reference](https://licenshield.com/docs/api) | [Pricing](https://licenshield.com/pricing) 21 22 --- 23 24 = The Premier WordPress Licensing Suite = 25 26 LicenShield handles the complete licensing lifecycle from first purchase through renewal, update delivery, and piracy protection. Your customers pay through Stripe, receive their license key instantly by email, install your software, and get automatic updates — all without you lifting a finger after the initial setup. 27 28 > **Up and running in minutes.** The guided setup wizard walks through Stripe connection, first product creation, and API integration step by step. No developer required beyond adding a shortcode to a page. 29 30 --- 31 32 = Free Features — Forever Free, No Artificial Limits = 33 34 **License Key Management** 35 36 * Unlimited products — sell as many plugins, themes, or software products as you want 37 * Unlimited licenses — generate as many keys as your business demands, on every plan including free 38 * Cryptographically secure license key generation in a clean `PREFIX-XXXX-XXXX-XXXX-XXXX` format 39 * Customizable license key prefix — brand your keys (e.g. `MYPLUGIN-XXXX`, `ACME-XXXX`) 40 * Per-license activation limits — control exactly how many sites each key can be used on 41 * Set activation limit to 0 for unlimited activations on enterprise or agency licenses 42 * Expiration dates — set fixed validity periods per license (annual, monthly, or lifetime) 43 * License status management — active, suspended, expired, or cancelled 44 * Manual license creation with full control over product, customer name, email, activation limit, and expiry 45 * Revoke individual site activations without affecting the rest of the license 46 * Full activation history per license — site URL, IP address, user agent, and activation timestamp 47 * Search and filter licenses by status, product, customer email, or key fragment 48 * Bulk license management from the admin list view 49 50 **Staging and Development Environment Detection** 51 52 Your customers should never burn an activation limit testing on a staging server. LicenShield automatically detects development and staging environments and skips counting them against the activation limit — no customer support ticket required. 53 54 Detected automatically: 55 56 * Localhost and loopback addresses (127.0.0.1, ::1, localhost) 57 * Local TLDs — `.local`, `.test`, `.localhost`, `.dev`, `.example`, `.invalid` 58 * Staging subdomains — `staging.`, `stage.`, `dev.`, `develop.`, `test.`, `sandbox.`, `uat.`, `qa.` 59 * Inline staging patterns anywhere in the URL — `.staging.`, `.stage.`, `.dev.`, `.test.`, `.sandbox.` 60 * Private and reserved IP ranges — 192.168.x.x, 10.x.x.x, 172.16-31.x.x 61 * WP Engine staging environments — `*.wpengine.com` 62 * Kinsta staging environments — `*.kinsta.cloud` 63 * Flywheel staging environments — `*.flywheelsites.com` 64 65 **Stripe Payments** 66 67 * Accept credit cards, Apple Pay, Google Pay, and all Stripe-supported payment methods 68 * Stripe Checkout hosted payment page — PCI compliant, no card data ever touches your server 69 * Automatic license key generation the moment a payment is confirmed via Stripe webhook 70 * Stripe webhook endpoint with HMAC signature verification (`checkout.session.completed`) 71 * Test mode and live mode switching from the admin settings panel 72 * Separate test and live API key storage — develop safely without risking real charges 73 * Configurable success and cancellation redirect URLs after checkout 74 * Admin email notification on every new purchase 75 76 **Automatic Software Updates** 77 78 * Customers see "Update Available" in their WordPress dashboard and click Update — exactly like any WordPress.org plugin 79 * Store version number, changelog notes, and download URL directly in each product record 80 * REST endpoint for update checks (`/ls/v1/update-check`) — WordPress queries this automatically 81 * Secure download endpoint (`/ls/v1/download`) validates the license before serving any file 82 * Path traversal protection and file type validation on all download requests 83 84 **Analytics Dashboard** 85 86 * Revenue this month with month-over-month growth percentage and up/down trend indicator 87 * Revenue last month and all-time totals 88 * Active license count — all time 89 * Licenses expiring in the next 30 days — catch renewals before they lapse 90 * Recent orders list — customer name, product, and amount 91 * Recently issued licenses 92 * Top-selling products by revenue 93 * Revenue and activation trend charts over selectable time periods 94 95 **REST API** 96 97 LicenShield exposes a clean REST API under `ls/v1` that your plugins, themes, scripts, and applications call to manage licenses in real time. All endpoints are rate limited to 10 failed attempts per 15-minute window per IP address to block brute-force attacks. 98 99 * `POST /ls/v1/validate` — validate a license key, returns status, expiry date, activation count, and product details 100 * `POST /ls/v1/activate` — activate a license on a new site, respects limits and staging detection 101 * `POST /ls/v1/deactivate` — remove a site activation from a license 102 * `POST /ls/v1/check` — lightweight status check that does not require a site URL 103 * `POST /ls/v1/update-check` — check for available software updates, used by WordPress's built-in update system 104 * `GET /ls/v1/download` — securely serve a plugin or theme ZIP after validating the license 105 106 All responses return JSON with a `success` boolean, a human-readable `message`, and relevant license data. 107 108 **Shortcodes** 109 110 Embed your entire purchasing flow on any WordPress page with three built-in shortcodes: 111 112 * `[licenshield_buy_button product="your-slug" text="Buy Now"]` — renders a styled purchase button linked to Stripe Checkout for the specified product. Accepts numeric product ID or slug. 113 * `[licenshield_pricing_table products="1,2,3"]` — renders a complete pricing table for one or more products with name, price, billing cycle, and a customizable feature list per product. 114 * `[licenshield_license_success]` — renders the post-purchase confirmation page displaying the customer's license key after a completed Stripe payment. 115 116 **Customer Email Notifications** 117 118 * Branded purchase confirmation email sent immediately after payment with no delay 119 * Email includes the license key displayed prominently, product name, activation limit, expiry date, download button (if a URL is configured), and step-by-step activation instructions 120 * Configurable company name, support email address, and reply-to for all outgoing emails 121 * Admin notification email on every purchase so you never miss a sale 122 123 **Setup, Onboarding and Usability** 124 125 * Guided setup wizard covering Stripe connection, first product creation, and API integration — with auto-detection of completed steps and a visual progress sidebar 126 * Context-sensitive tooltips on every admin field across Dashboard, Licenses, Products, Orders, and Settings — hover any field to see an explanation 127 * First-use guided tours on each admin page — replay at any time via the Take Tour button 128 * Copy-to-clipboard buttons on webhook URLs, API endpoint URLs, and code snippets throughout the admin 129 * Suggestions page — submit and vote on feature ideas directly from your admin panel 130 131 --- 45 132 46 133 = LicenShield Pro = 47 134 48 Take your license business to the next level with Pro features: 49 50 * **Subscription Billing** - Monthly and yearly recurring payments 51 * **Discount Codes** - Create coupons for promotions and sales 52 * **Slack Notifications** - Get instant alerts for sales and activations 53 * **Piracy Detection** - Monitor and protect against unauthorized use 54 * **Advanced Analytics** - Revenue charts, trends, and insights 55 * **Webhook Integrations** - Connect to Zapier, CRMs, and more 56 * **Priority Support** - Get help when you need it 57 58 Visit [licenshield.com](https://licenshield.com/pricing) for Pro pricing and details. 59 60 == Installation == 61 62 1. Upload the `licenshield` folder to the `/wp-content/plugins/` directory 63 2. Activate the plugin through the 'Plugins' menu in WordPress 64 3. Go to **LicenShield → Settings** to configure your options 65 4. Create your first product under **LicenShield → Products** 66 5. Start generating licenses under **LicenShield → Licenses** 67 68 = Stripe Setup = 69 70 1. Go to **LicenShield → Settings → Stripe** 71 2. Enter your Stripe API keys (test or live mode) 72 3. Configure your webhook endpoint in your Stripe dashboard 73 4. Payments will automatically generate licenses 74 75 == Frequently Asked Questions == 76 77 = How do I validate licenses in my plugin? = 78 79 Use the REST API endpoint to validate licenses. Example PHP code: 80 81 `$response = wp_remote_post('https://yoursite.com/wp-json/ls/v1/validate', [ 135 Upgrade to [LicenShield Pro](https://licenshield.com/pricing) for subscription billing, piracy protection, real-time Slack alerts, outbound webhooks, expiration reminders, and multi-language SDKs. **All paid plans include a 30-day money-back guarantee — no questions asked.** 136 137 Paid plans are billed annually. Upgrade at any time and pay only the prorated difference for the remainder of your year. Downgrade at renewal if your needs change. 138 139 --- 140 141 **Subscription Billing — Starter, Pro and Agency** 142 143 The fastest way to build predictable, recurring revenue from your plugins and software: 144 145 * Accept monthly and yearly recurring payments through Stripe Subscriptions 146 * Stripe handles the entire subscription lifecycle — creation, renewal, failed payment retries, and cancellation 147 * License expiry date extended automatically on every successful renewal payment 148 * License suspended automatically when a subscription is cancelled or a payment permanently fails 149 * Customers can choose monthly or yearly depending on the billing options you configure per product 150 151 **Discount Codes — Starter, Pro and Agency** 152 153 * Create percent-off (e.g. SUMMER25 = 25% off) or fixed-amount discount codes 154 * Set per-code usage limits — e.g. valid for the first 100 customers only 155 * Set expiry dates on individual codes for time-limited promotions 156 * Restrict a code to specific products or leave it open for all products 157 * Real-time discount validation at checkout via the `/ls/v1/discount/validate` REST endpoint 158 * Full usage tracking in the admin panel — see redemption count and remaining uses at a glance 159 160 **Slack Notifications — Starter, Pro and Agency** 161 162 Get instant Slack messages for every business event that matters. No more checking dashboards throughout the day: 163 164 * New sale — product name, customer email, and amount paid 165 * License activation — which key was activated and on which site URL 166 * Subscription renewal — when a recurring payment succeeds 167 * License expiry — configurable, off by default 168 * Piracy alert — fires with severity level and a direct link to the alert panel 169 * Individual toggle for each event type — enable only the notifications your team needs 170 * Test button in settings — verify your Slack webhook URL works before going live 171 172 **Outbound Webhooks — Starter, Pro and Agency** 173 174 Connect LicenShield to Zapier, Make, HubSpot, Salesforce, your own API, or any external service: 175 176 Seven supported events: 177 178 * `license.created` — a new license was issued after purchase 179 * `license.activated` — a license was activated on a site 180 * `license.deactivated` — an activation was removed from a site 181 * `license.renewed` — a subscription successfully renewed and the license was extended 182 * `license.expired` — a license reached its expiry date 183 * `license.suspended` — a license was suspended, manually or by piracy detection 184 * `order.completed` — a Stripe payment was successfully completed 185 186 Every outgoing webhook POST includes an `X-LicenShield-Sig` header containing an HMAC-SHA256 signature of the request body using your webhook secret. Your receiving endpoint can verify this header to confirm the request is genuine and has not been tampered with. 187 188 * Subscribe each endpoint to only the specific events it needs 189 * Auto-generated webhook secret if you leave the field blank 190 * Webhook delivery log for debugging and confirming successful deliveries 191 * Add multiple webhook endpoints — connect different URLs to different services simultaneously 192 193 **Expiration Reminder Emails — Starter, Pro and Agency** 194 195 * Automatically emails customers at 30 days, 14 days, and 7 days before their license expires 196 * Each email includes the license key, product name, expiry date, and a renewal link 197 * Deduplication logic prevents sending the same reminder twice to the same customer 198 * Daily background cron job automatically expires licenses past their expiry date and updates their status 199 200 **Piracy Detection — Starter, Pro and Agency** 201 202 LicenShield Pro monitors every API call in real time and runs three detection algorithms silently in the background. Alerts fire the moment suspicious activity is detected — giving you time to act before significant damage is done. Detects nulled software distribution, multi-domain key abuse, and brute-force validation attempts. 203 204 Algorithm 1 — Activation Overflow (High Severity) 205 206 Fires when a license key attempts to register on a new site after already reaching its activation limit. The clearest signal that a key is being shared between multiple users. Example: a single-site license suddenly appearing across three different production domains. 207 208 Algorithm 2 — Domain Spread (Medium Severity) 209 210 Fires when a single license key has been validated from an abnormally high number of distinct domains within a rolling 30-day window. The threshold is set dynamically to 3 times the activation limit with a minimum of 8 domains, preventing false positives on legitimate high-traffic or multi-site setups. Catches keys posted to forums or shared in Facebook groups and Discord servers. 211 212 Algorithm 3 — IP Flood (High Severity) 213 214 Fires when a license key hits the validation API from 10 or more unique IP addresses within a single hour. The clearest signal of automated key distribution — bots downloading nulled software using a shared key at scale. 215 216 Each alert in the Piracy Alerts admin panel includes: 217 218 * Severity badge — High or Medium 219 * Plain-English description of what triggered the alert 220 * The license key, product name, customer email, and the raw triggering data 221 * One-click action buttons — Mark Resolved, Dismiss, or Suspend License immediately 222 * Slack notification option so your team knows the moment an alert fires 223 * 7-day deduplication cooldown — the same alert type for the same license is suppressed to prevent flooding 224 225 --- 226 227 **Multi-Language SDKs — Pro and Agency** 228 229 LicenShield Pro and Agency include official SDKs that connect to your existing LicenShield installation. License any type of software from the same WordPress admin dashboard you already use — one backend for your entire product portfolio. 230 231 * JavaScript SDK — validate licenses in Node.js services, Electron desktop apps, browser extensions, Chrome extensions, CLI tools, and web backends. Install via npm. 232 * Python SDK — protect Python scripts, automation tools, data pipelines, FastAPI and Django applications, and desktop apps. Install via pip. 233 * .NET SDK — integrate license validation into C# Windows apps, WPF and WinForms applications, .NET web services, and Visual Studio extensions. Available via NuGet. 234 * Go SDK — embed license checks in Go binaries, CLI utilities, microservices, and server-side tools. Install via go get. 235 * REST Client SDK — a universal reference client with complete code samples for any language or platform not listed above, including Ruby, Rust, Swift, PHP, shell scripts, and more. 236 237 All SDKs include a 24-hour local validation cache and a 7-day offline grace period. Your customers' software continues working without an internet connection — no false "license invalid" errors on flights, in remote locations, or during temporary server outages. 238 239 Use cases unlocked by the SDKs: 240 241 * WordPress plugins and themes (also work without an SDK via the REST API directly) 242 * Chrome and browser extensions 243 * Windows desktop apps and WPF or WinForms applications 244 * Unity games and Unity editor tools 245 * Electron apps including VS Code extensions and Obsidian plugins 246 * Node.js CLI tools and npm packages 247 * Python data science tools, Jupyter notebooks, and automation scripts 248 * C#/.NET utilities and enterprise applications 249 * Go microservices, binary utilities, and DevOps tools 250 * SaaS backends and API-first products 251 252 --- 253 254 = How It Works = 255 256 1. Install — upload LicenShield to your WordPress site, activate it, and open the setup wizard 257 2. Connect Stripe — paste your Stripe API keys and copy the webhook URL into your Stripe dashboard 258 3. Create Products — add your plugin, theme, or software with a price, activation limit, billing cycle, version number, and download URL 259 4. Sell — embed a buy button or pricing table shortcode on any WordPress page 260 5. Automatic — Stripe processes the payment, LicenShield generates and emails the license key, and your customer is running immediately 261 262 No complicated server setup. No monthly SaaS subscription. Your data stays on your server. 263 264 --- 265 266 = REST API Quick Reference = 267 268 Validate a license in your WordPress plugin: 269 270 `$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/validate', [ 82 271 'body' => [ 83 272 'license_key' => $license_key, 84 'site_url' => home_url() 85 ] 86 ]);` 87 88 = Can I migrate from other license managers? = 89 90 Yes, you can import licenses via CSV or create them manually in the dashboard. 91 92 = Does it work with WooCommerce? = 93 94 LicenShield works alongside WooCommerce but uses Stripe directly for payments. WooCommerce integration is planned for a future release. 95 96 = How are license keys generated? = 97 98 Keys use a secure format: `LS-XXXX-XXXX-XXXX-XXXX` with cryptographically random characters. 99 100 = Can customers manage their own licenses? = 101 102 Customers receive their license key by email after purchase. They can share the key with you to manage activations from the admin dashboard. 273 'site_url' => home_url(), 274 ], 275 ] ); 276 $data = json_decode( wp_remote_retrieve_body( $response ) ); 277 if ( $data->success ) { 278 // License is valid — proceed 279 }` 280 281 Activate on first use: 282 283 `$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/activate', [ 284 'body' => [ 285 'license_key' => $license_key, 286 'site_url' => home_url(), 287 'site_name' => get_bloginfo( 'name' ), 288 ], 289 ] );` 290 291 Check for software updates (used by the WordPress update system): 292 293 `$response = wp_remote_post( 'https://yoursite.com/wp-json/ls/v1/update-check', [ 294 'body' => [ 295 'license_key' => $license_key, 296 'site_url' => home_url(), 297 'current_version' => MY_PLUGIN_VERSION, 298 'plugin_slug' => 'my-plugin/my-plugin.php', 299 ], 300 ] );` 301 302 Full integration guides and SDK documentation are at [licenshield.com/docs](https://licenshield.com/docs). 303 304 --- 305 306 == Installation == 307 308 1. Upload the `licenshield` folder to `/wp-content/plugins/` or install via the WordPress plugin uploader 309 2. Activate through the Plugins menu in WordPress 310 3. Go to **LicenShield → Setup Wizard** for a guided configuration walkthrough, or configure manually: 311 4. Go to **LicenShield → Settings → Stripe** — enter your Stripe API keys (test or live) 312 5. Copy the webhook URL shown and add it as a new endpoint in your Stripe Dashboard under Developers → Webhooks. Select `checkout.session.completed` for one-time purchases. Add `invoice.payment_succeeded` and `customer.subscription.deleted` if using Pro subscription billing. 313 6. Go to **LicenShield → Products → Add New** — create your first product with a name, slug, price, activation limit, billing cycle, and optional download URL 314 7. Add `[licenshield_buy_button product="your-product-slug"]` to any WordPress page 315 8. Create a success page with the `[licenshield_license_success]` shortcode and set its URL in **Settings → General → Success Redirect** 316 9. Run a test purchase in Stripe test mode, confirm the license key is generated and emailed, then switch to live mode 317 318 == Frequently Asked Questions == 319 320 = Is the free version really unlimited? = 321 322 Yes. The free version has no limits on the number of products or licenses you can create, no expiry date on the free plan, and no paywalls on core functionality. You only need a paid plan when you want features like subscription billing, piracy detection, Slack notifications, webhooks, expiration reminder emails, or multi-language SDKs. 323 324 = What is the main reason to upgrade to Starter? = 325 326 Subscription billing — it is the fastest way to build predictable, recurring revenue from your plugins. Instead of one-time sales, customers pay monthly or yearly and their license renews automatically through Stripe. Starter also adds discount codes, Slack notifications, webhooks, piracy detection, and automated expiration reminder emails. 327 328 = How do customers receive their license key? = 329 330 Immediately after a successful Stripe payment, LicenShield automatically sends a branded confirmation email containing the license key, product name, activation limit, expiry date if applicable, a download button if a download URL is configured, and step-by-step activation instructions. No manual work on your end. 331 332 = Does LicenShield charge transaction fees? = 333 334 No. LicenShield charges no platform fee or per-transaction fee of any kind. You pay your annual plan fee and Stripe's standard payment processing rate. Every dollar beyond that goes directly to you. 335 336 = How does billing work for paid plans? = 337 338 Paid plans are billed annually. You can upgrade at any time and pay only the prorated difference for the remaining portion of your billing year. If your needs change, you can downgrade at renewal. 339 340 = Is there a money-back guarantee? = 341 342 Yes. All paid plans include a 30-day money-back guarantee. If you are not satisfied for any reason within 30 days of purchase, contact support for a full refund — no questions asked. 343 344 = What payment methods does Stripe support? = 345 346 LicenShield's Stripe Checkout supports credit and debit cards, Apple Pay, Google Pay, and all other payment methods enabled in your Stripe account. Customers complete payment on a secure Stripe-hosted page. 347 348 = What is staging detection and why does it matter? = 349 350 When a customer develops or tests their site on a staging URL, LicenShield detects it automatically and does not count that activation against their limit. Customers can freely develop on staging and push to production without burning activations or contacting you for help. LicenShield detects over a dozen staging environments out of the box, including WP Engine, Kinsta, and Flywheel. 351 352 = How does piracy detection work? = 353 354 LicenShield Pro monitors every API call and silently runs three algorithms. An alert is created when: a license tries to activate on a new site after hitting its limit (catching key sharing), a license is validated from an abnormally high number of distinct domains in 30 days (catching publicly posted keys), or a license hits the API from 10 or more unique IPs in one hour (catching automated distribution). Each alert includes the triggering data and a one-click Suspend License button. 355 356 = Do webhooks support request signature verification? = 357 358 Yes. Every outgoing webhook POST includes an `X-LicenShield-Sig` header containing an HMAC-SHA256 signature of the request body, computed using your webhook secret key. Your receiving endpoint verifies this header to confirm the request came from your LicenShield installation and has not been modified in transit. 359 360 = What are the SDKs and what do they actually do? = 361 362 The SDKs are official client libraries for JavaScript, Python, .NET, and Go that call the same LicenShield REST API your WordPress plugins already use. They handle license validation, activation, a 24-hour local validation cache, and a 7-day offline grace period automatically. This lets you protect a Windows app, a Python tool, a Chrome extension, or a Node.js CLI from the same admin dashboard where you manage your WordPress plugin licenses — one platform for everything. 363 364 = Can I use LicenShield for non-WordPress software? = 365 366 Yes, with a Pro or Agency plan. The JavaScript, Python, .NET, Go, and REST Client SDKs let you protect any software — desktop apps, CLI tools, browser extensions, Electron apps, Unity editor tools, SaaS backends, and more — all managed from a single LicenShield WordPress installation. 367 368 = Can I migrate licenses from another license manager? = 369 370 You can create licenses manually with any custom details through the admin panel. Bulk CSV import is on the public roadmap — vote for it via the Suggestions page inside your LicenShield admin. 371 372 = Does it work alongside WooCommerce? = 373 374 Yes. LicenShield uses Stripe directly for payments and runs independently of WooCommerce. Both plugins can be active on the same site. Native WooCommerce integration is planned for a future release. 375 376 = What happens to my data if I cancel a paid plan? = 377 378 All your licenses, products, orders, customers, and settings remain intact in your WordPress database. You keep full access to all free features. Only the paid features become inactive until you renew. 379 380 = Is my customer data private and secure? = 381 382 LicenShield is 100% self-hosted. All license data, customer data, and order records live in your own WordPress database on your own server. Nothing is sent to external servers except Stripe for payment processing and your optionally configured Slack and webhook endpoints. You own your data completely. 383 384 = Can I customize the license key format? = 385 386 Yes. Set a custom prefix up to 10 characters in **Settings → General → License Key Prefix**. All new keys are then generated as `YOURPREFIX-XXXX-XXXX-XXXX-XXXX`. The key body is always cryptographically random regardless of prefix. 387 388 = How do automatic plugin updates work for my customers? = 389 390 Set a version number, changelog, and download URL in your product settings. LicenShield's update-check endpoint integrates with WordPress's built-in update system. When you upload a new version and increment the version number, customers with your plugin installed see a standard "Update Available" notice in their WordPress dashboard and can update with one click — exactly like a WordPress.org plugin. 103 391 104 392 == Screenshots == 105 393 106 1. Dashboard overview showing license statistics107 2. License management with search and filtering108 3. Product configuration with activation limits109 4. S ettings page with Stripe integration110 5. License activation in your protected plugin111 6. Customer email notification394 1. Dashboard — real-time revenue stats, month-over-month growth trend, active license counts, licenses expiring soon, recent orders, and top products 395 2. License management — searchable list view with status badges, activation counts, expiry dates, and a per-license action menu 396 3. Product configuration — name, slug, price, billing cycle (monthly, yearly, or lifetime), activation limit, version number, changelog, and download URL 397 4. Stripe settings — test and live mode toggle, separate API key fields for each mode, and an auto-generated webhook URL with a one-click copy button 398 5. Piracy Detection alerts — severity badges, alert type descriptions, triggering data, and one-click Resolve, Dismiss, or Suspend License actions 399 6. Orders — full transaction history with customer name, product, amount paid, payment status, and a direct link to the associated license 112 400 113 401 == Changelog == … … 115 403 = 1.7.14 = 116 404 * Fix: Removed auto-install Pro feature — users install Pro manually per WordPress.org guidelines 117 * Fix: Renamed all PHP prefixes from ls_ to licenshield_ for WordPress.org compliance118 * Fix: Renamed classprefixes from LS_ to LICENSHIELD_ for WordPress.org compliance119 * Fix: Download handler now correctly serves files fromabsolute server paths405 * Fix: Renamed all PHP function prefixes from ls_ to licenshield_ for WordPress.org compliance 406 * Fix: Renamed all class name prefixes from LS_ to LICENSHIELD_ for WordPress.org compliance 407 * Fix: Download handler now correctly serves files using absolute server paths 120 408 121 409 = 1.7.7 = 122 * Fix: [l s_buy_button] now accepts product slug (e.g. product="licenshield-pro") in addition to numericID410 * Fix: [licenshield_buy_button] shortcode now accepts a product slug in addition to a numeric product ID 123 411 124 412 = 1.7.6 = 125 * Fix: Pro tab now correctly shows the Pro settings panel (license status, Slack config) after Pro is activated,instead of the installer form126 * Fix: LS_Adminno longer double-initializes when LicenShield Pro is active413 * Fix: Pro settings tab now correctly displays the Pro panel after Pro is activated instead of the installer form 414 * Fix: Admin class no longer double-initializes when LicenShield Pro is active 127 415 128 416 = 1.7.3 = 129 * Fix: Removed "expiration reminders" from feature list — not yet implemented 130 * Fix: Corrected REST API namespace in FAQ example from licenshield/v1 to ls/v1 131 * Fix: Removed inaccurate customer portal claim from FAQ 417 * Fix: Corrected REST API namespace in all documentation examples — ls/v1, not licenshield/v1 418 * Fix: Removed inaccurate customer portal reference from FAQ 132 419 133 420 = 1.7.2 = 134 * Fix: Resolved 3 PHPCS errors — unescaped $upgrade_url outputs in class-ls-upsell.php now use esc_url() 135 * Fix: Resolved UnescapedDBParameter warnings in class-ls-tier.php — table names now passed via wpdb->prepare() with %i placeholder 136 * Fix: Added phpcs:ignore with justification comments to unavoidable direct DB queries in class-ls-stripe.php and class-ls-api.php (webhook handlers and transactional inserts have no WP API equivalent) 137 * Fix: Added file-level phpcs:disable in class-ls-analytics.php — all queries are real-time aggregations where caching would produce stale reports 421 * Fix: Resolved 3 PHPCS errors — unescaped $upgrade_url outputs in upsell class now use esc_url() 422 * Fix: Resolved UnescapedDBParameter warnings — table names now pass through wpdb->prepare() using the %i placeholder 423 * Fix: Added justified phpcs:ignore comments to unavoidable direct DB queries in webhook handlers and transactional inserts where WordPress has no equivalent API 138 424 139 425 = 1.7.1 = 140 * Fix: Dashboard revenue and license charts now render correctly (scripts were not enqueued) 141 * Fix: Removed stale "LicenShield API (Optional)" section from readme — self-licensing was removed in 1.7.0 142 * Fix: Removed orphan discount database table that had no corresponding UI or code 143 * Fix: Removed duplicate /checkout/create REST endpoint (use /checkout instead) 144 * Fix: Removed stale license_key_input tooltip referencing removed license tab 145 * Improved: REST API endpoints now have inline comments explaining why __return_true is intentional 146 * Improved: Get Pro button on dashboard now shows what Pro features include 426 * Fix: Dashboard revenue and license charts now render correctly — missing scripts added to enqueue 427 * Fix: Removed duplicate /checkout/create REST endpoint 428 * Fix: Removed stale tooltip referencing the removed license activation tab 429 * Improved: REST API endpoints now include inline justification comments for intentional __return_true permission callbacks 430 * Improved: Get Pro button on dashboard lists the features included in each Pro tier 147 431 148 432 = 1.7.0 = 149 * Redesign: Pro features now displayed as WPForms-style muted cards — clearly visible but not functional in the free version 150 * Removed: Self-licensing system (LS_Self_License) — no longer gating any features behind a license key 151 * Removed: License settings tab with key activation form 152 * Removed: Upsell modal and all JavaScript gating 153 * Added: Dedicated "Pro Features" settings tab showing all Pro capabilities with links to licenshield.com 154 * Simplified: LS_Tier is now a pure display helper with no feature blocking 155 * Free plan: Unlimited products and licenses — no artificial limits 433 * Redesign: Pro features now displayed as muted cards in the free plugin — clearly visible but not active 434 * Removed: Self-licensing system and the license key activation tab — no longer required 435 * Removed: Upsell modal and all JavaScript feature gating 436 * Added: Dedicated Pro Features settings tab with descriptions and links to licenshield.com 437 * Free plan: Unlimited products and licenses with zero artificial caps of any kind 156 438 157 439 = 1.6.1 = 158 * Fix: Removed subscription billing restriction — all billing cycles now available to all users 159 * Fix: Added missing LS_Tier helper methods (format_limit, get_usage_percentage, can_activate) 160 * Fix: Updated constant prefix to LICENSHIELD_ for WordPress.org compliance 161 * Fix: Replaced locked UI elements with plain Pro feature callouts 162 * Fix: Slack settings tab now links to licenshield.com/pricing instead of opening a modal 440 * Fix: Removed subscription billing restriction — all billing cycles available with Pro 441 * Fix: Added missing Tier helper methods including format_limit, get_usage_percentage, and can_activate 442 * Fix: Updated all constant prefixes to LICENSHIELD_ for WordPress.org compliance 443 * Fix: Replaced locked UI elements with plain Pro feature callout links 163 444 164 445 = 1.5.1 = 165 * Fixed: Version constant mismatch issue 166 * Fixed: SQL injection vulnerabilities in analytics queries 167 * Fixed: Path traversal security vulnerability in download endpoint 168 * Improved: Rate limiting now enforced on all validation endpoints 169 * Improved: Download endpoint security with file type validation 170 * Improved: Added security headers to download responses 171 * Security: Enhanced input validation and sanitization 446 * Security: Fixed SQL injection vulnerabilities in analytics queries 447 * Security: Fixed path traversal vulnerability in the download endpoint 448 * Security: Enhanced input sanitization and validation across all API endpoints 449 * Improved: IP-based rate limiting enforced on all validate, activate, and deactivate endpoints 450 * Improved: Download endpoint validates file type before serving any file 172 451 173 452 = 1.4.3 = 174 * New: Hover tooltips on all admin pages 175 * New: Guided tour system for first-time users 176 * Tooltips explain field labels, stats, table columns, and settings 177 * Tours auto-start on first visit, can be replayed via "Take Tour" button 178 * Dashboard, Licenses, Products, Orders, and Settings pages all supported 453 * New: Context-sensitive hover tooltips on every field, stat, and setting across all admin pages 454 * New: Guided tour system for first-time users with step-by-step walkthroughs on each page 455 * Tours auto-start on first visit and can be replayed at any time via the Take Tour button 179 456 180 457 = 1.4.2 = 181 * New: Setup Wizard for easy onboarding 182 * Wizard guides through Stripe setup, product creation, and SDK integration 183 * Auto-detection of completed setup steps 184 * Progress tracking sidebar 185 * Copy-to-clipboard for API URLs and code snippets 458 * New: Setup Wizard for streamlined onboarding 459 * Wizard guides through Stripe connection, first product creation, and REST API integration 460 * Auto-detection of completed steps and visual progress tracking sidebar 461 * Copy-to-clipboard for all API URLs and integration code snippets 186 462 187 463 = 1.4.1 = 188 464 * Added self-licensing capability 189 * Improved license verification UI 190 * Enhanced plan limits display 191 * Security improvements 465 * Improved license verification UI and plan limits display 466 * Security hardening 192 467 193 468 = 1.4.0 = 194 * Stripe Payment Sheet integration 195 * HTML email templates 196 * Rate limiting for API endpoints 197 * Contact form on website 469 * Stripe Payment Sheet checkout integration 470 * Branded HTML email templates for purchase confirmations 471 * IP-based rate limiting on all public API endpoints 198 472 199 473 = 1.3.0 = 200 * REST API for license validation 201 * Webhook support 202 * Improved dashboard UI 203 204 = 1.2.0 = 205 * Email notifications for purchases and expirations 206 * Customer portal improvements 207 * Bug fixes 208 209 = 1.1.0 = 210 * Stripe integration 211 * Automatic license generation on purchase 212 * Expiration date management 213 214 = 1.0.0 = 215 * Initial release 216 * License key generation 217 * Activation management 218 * Basic dashboard 474 * REST API for license validation, activation, and deactivation 475 * Automatic license key generation on confirmed Stripe payment 476 * Admin dashboard with revenue statistics and license counts 477 478 == Privacy Policy == 479 480 LicenShield stores license keys, customer email addresses, customer names, and activated site URLs in your WordPress database for the purpose of license validation and management. This data is not shared with any third party except Stripe for payment processing and your optionally configured Slack and webhook endpoints. 481 482 For full details, visit [licenshield.com/privacy](https://licenshield.com/privacy). 483 484 == External Services == 485 486 LicenShield connects to the following third-party service to provide payment functionality: 487 488 = Stripe = 489 490 LicenShield integrates with [Stripe](https://stripe.com) for payment processing. When a customer purchases a license through your site: 491 492 * **What is sent:** Customer email address, purchase amount, product details, and payment information (card data is handled directly by Stripe — it is never stored on your server or passed through WordPress) 493 * **When it is sent:** During checkout when a customer initiates a purchase, and when Stripe sends webhook events to confirm order fulfillment 494 * **Why it is needed:** To process payments securely and automatically generate and deliver a license key upon successful payment 495 496 Stripe is a PCI-compliant payment processor. All payment data is handled entirely by Stripe's servers. By using LicenShield with Stripe payments enabled, your customers are subject to [Stripe's Privacy Policy](https://stripe.com/privacy) and [Stripe's Terms of Service](https://stripe.com/legal). 497 498 No other external service connections are made by the free plugin. Pro features that send data externally — Slack notifications and outbound webhooks — only transmit data to endpoints you explicitly configure in the plugin settings. 219 499 220 500 == Upgrade Notice == 221 501 222 = 1.4.2 = 223 New Setup Wizard for easy onboarding! Guides you through Stripe, products, and SDK integration step by step. 224 225 = 1.4.1 = 226 This version adds self-licensing capability and improved UI. Recommended for all users. 227 228 == Privacy Policy == 229 230 LicenShield stores license keys, customer emails, and site URLs for license validation purposes. This data is stored in your WordPress database and is not shared with third parties except for payment processing via Stripe. 231 232 For more information, visit [licenshield.com/privacy](https://licenshield.com/privacy). 233 234 == External Services == 235 236 This plugin connects to third-party services to provide payment functionality: 237 238 = Stripe = 239 240 LicenShield integrates with [Stripe](https://stripe.com) for payment processing. When a customer purchases a license through your site: 241 242 * **What is sent:** Customer email, purchase amount, product details, and payment card information (handled directly by Stripe, never stored locally) 243 * **When it is sent:** During checkout when a customer initiates a purchase, and when processing webhooks for order fulfillment 244 * **Why it is needed:** To process credit card payments and automatically generate license keys upon successful payment 245 246 Stripe is a PCI-compliant payment processor. All payment data is handled securely by Stripe's servers. 247 248 * [Stripe Terms of Service](https://stripe.com/legal) 249 * [Stripe Privacy Policy](https://stripe.com/privacy) 250 251 502 = 1.7.14 = 503 WordPress.org compliance release. All PHP prefixes updated from ls_ to licenshield_ and all class prefixes from LS_ to LICENSHIELD_. Update recommended for all users.
Note: See TracChangeset
for help on using the changeset viewer.