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 (2)

Visibility Type Name Default Line
protected (untyped) $apiBaseUrl 28
private (untyped) $timeout 35

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.