This is an old revision of the document!
Table of Contents
ThemeLicenseService
Layer: Service · Source: lib/service/ThemeLicenseService.php:21 (lines 21–321)
class ThemeLicenseService
ThemeLicenseService
HTTP client that validates premium theme licenses against the MyBlog license API (https://myblog.local/api/v2/licenses/*). Requests are HMAC-signed using the per-product license_secret embedded in the theme's theme.ini file.
Docblock Metadata
^ Tag ^ Value ^ | ''@category'' | Class ThemeLicenseService | | ''@author'' | MyBlog | | ''@license'' | MIT | | ''@version'' | 1.0.0 | | ''@since'' | Since Release 1.0.0 |
Inheritance
No parent, interface or trait. This is a root type.
Constants (0)
None.
Properties (0)
None declared.
Methods (10)
^ Visibility ^ Method ^ Summary ^ Line ^ | public | ''__construct()'' | Constructor | 43 | | public | ''readThemeConfig()'' | Read the theme.ini configuration for a given theme directory. | 55 | | public | ''isPremiumTheme()'' | Determine whether a theme is a premium theme. | 74 | | public | ''activate()'' | Activate a license key against the MyBlog license API. | 97 | | public | ''validate()'' | Validate an already-activated license. | 120 | | public | ''deactivate()'' | Deactivate a theme license, releasing one activation slot. | 143 | | protected | ''post()'' | Send an HMAC-signed POST request to the license API. | 167 | | private | ''postCurl()'' | Send the request using cURL. | 198 | | private | ''postStream()'' | Send the request using stream context (fallback when cURL is absent). | 234 | | protected | ''parseResponse()'' | Parse the JSON response from the license API. | 278 |
__construct()
public function __construct($apiBaseUrl = null, $timeout = 10)
lines 43–47 (5)
Constructor
^ Parameter ^ Type ^ Default ^ Description ^ | ''$apiBaseUrl'' | ''(untyped)'' | ''null'' | Override the license API base URL. | | ''$timeout'' | ''(untyped)'' | ''10'' | Request timeout in seconds. |
readThemeConfig()
public function readThemeConfig($themeDirectory)
lines 55–66 (12)
Read the theme.ini configuration for a given theme directory.
^ Parameter ^ Type ^ Default ^ Description ^ | ''$themeDirectory'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — array
isPremiumTheme()
public function isPremiumTheme($themeDirectory)
lines 74–83 (10)
Determine whether a theme is a premium theme.
^ Parameter ^ Type ^ Default ^ Description ^ | ''$themeDirectory'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — bool
activate()
public function activate($licenseKey, $domain, $productSecret, $productId)
lines 97–107 (11)
Activate a license key against the MyBlog license API.
POST /api/v2/licenses/activate/{product_id} Body: {“license_key”: “…”, “domain”: “…”}
^ Parameter ^ Type ^ Default ^ Description ^ | ''$licenseKey'' | ''(untyped)'' | //required// | The license key entered by the admin. | | ''$domain'' | ''(untyped)'' | //required// | The domain where the theme is installed. | | ''$productSecret'' | ''(untyped)'' | //required// | Per-product license_secret embedded in the theme. | | ''$productId'' | ''(untyped)'' | //required// | MyBlog store product ID for this theme. |
Returns: (none declared) — array{success: bool, message: string, data?: array}
validate()
public function validate($licenseKey, $productId, $productSecret)
lines 120–130 (11)
Validate an already-activated license.
POST /api/v2/licenses/validate Body: {“license_key”: “…”, “product_id”: N}
^ Parameter ^ Type ^ Default ^ Description ^ | ''$licenseKey'' | ''(untyped)'' | //required// | //none// | | ''$productId'' | ''(untyped)'' | //required// | //none// | | ''$productSecret'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — array{success: bool, message: string, data?: array}
deactivate()
public function deactivate($licenseKey, $productId, $productSecret)
lines 143–153 (11)
Deactivate a theme license, releasing one activation slot.
POST /api/v2/licenses/deactivate Body: {“license_key”: “…”, “product_id”: N}
^ Parameter ^ Type ^ Default ^ Description ^ | ''$licenseKey'' | ''(untyped)'' | //required// | //none// | | ''$productId'' | ''(untyped)'' | //required// | //none// | | ''$productSecret'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — array{success: bool, message: string, data?: array}
post()
protected function post($url, $body, $secret)
lines 167–188 (22)
Send an HMAC-signed POST request to the license API.
Signature scheme (mirrors MyBlog ApiAuthService::verifyHmacSignature):
payload = "{timestamp}.{nonce}.{body}"
signature = hash_hmac('sha256', payload, secret)
^ Parameter ^ Type ^ Default ^ Description ^ | ''$url'' | ''(untyped)'' | //required// | //none// | | ''$body'' | ''(untyped)'' | //required// | //none// | | ''$secret'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — array{success: bool, message: string, data?: array}
postCurl()
private function postCurl($url, $body, array $headers)
lines 198–224 (27)
Send the request using cURL.
^ Parameter ^ Type ^ Default ^ Description ^ | ''$url'' | ''(untyped)'' | //required// | //none// | | ''$body'' | ''(untyped)'' | //required// | //none// | | ''$headers'' | ''array'' | //required// | //none// |
Returns: (none declared) — array
postStream()
private function postStream($url, $body, array $headers)
lines 234–269 (36)
Send the request using stream context (fallback when cURL is absent).
^ Parameter ^ Type ^ Default ^ Description ^ | ''$url'' | ''(untyped)'' | //required// | //none// | | ''$body'' | ''(untyped)'' | //required// | //none// | | ''$headers'' | ''array'' | //required// | //none// |
Returns: (none declared) — array
parseResponse()
protected function parseResponse($response, $httpCode)
lines 278–320 (43)
Parse the JSON response from the license API.
^ Parameter ^ Type ^ Default ^ Description ^ | ''$response'' | ''(untyped)'' | //required// | //none// | | ''$httpCode'' | ''(untyped)'' | //required// | //none// |
Returns: (none declared) — array
This page is generated from source by 'tools/gendoc'. Edits will be overwritten.
