Files
conservatorio-tomadini/plugins/system/osmylicensesmanager/library/Free/PluginHelper.php
2024-12-17 17:34:10 +01:00

145 lines
4.0 KiB
PHP

<?php
/**
* @package ShackExtensionSupport
* @contact www.joomlashack.com, help@joomlashack.com
* @copyright 2016-2024 Joomlashack.com. All rights reserved
* @license https://www.gnu.org/licenses/gpl.html GNU/GPL
*
* This file is part of ShackExtensionSupport.
*
* ShackExtensionSupport is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* ShackExtensionSupport is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ShackExtensionSupport. If not, see <https://www.gnu.org/licenses/>.
*/
namespace Alledia\OSMyLicensesManager\Free;
use Alledia\Framework\Joomla\Extension\Licensed;
// phpcs:disable PSR1.Files.SideEffects
defined('_JEXEC') or die();
// phpcs:enable PSR1.Files.SideEffects
/**
* PluginHelper class
*/
abstract class PluginHelper
{
/**
* @var string
*/
protected static $downloadBaseURL = 'https://deploy.ostraining.com/client/download/';
/**
* Update the license key on the plugin params
*
* @param ?string $licenseKeys
*
* @return bool
*/
public static function updateLicenseKeys(?string $licenseKeys = ''): bool
{
$licenseKeys = PluginHelper::sanitizeKey($licenseKeys);
// Update the extension params
$extension = new Licensed('osmylicensesmanager', 'plugin', 'system');
$extension->params->set('license-keys', $licenseKeys);
$extension->storeParams();
return true;
}
/**
* Detects if the passed URL is our download URL, returning a boolean value.
*
* @param string $url
*
* @return bool
*/
public static function isOurDownloadURL(string $url): bool
{
return preg_match('#^' . static::$downloadBaseURL . '#', $url) === 1;
}
/**
* Removes the license key from the URL and returns it.
*
* @param string $url
*
* @return string
*/
public static function getURLWithoutLicenseKey(string $url): string
{
if (static::isOurDownloadURL($url)) {
$url = preg_replace('#^(' . static::$downloadBaseURL . '(free|pro|paid)/[^/]+/[^/]+).*$#i', '$1', $url);
$url .= '/';
}
return $url;
}
/**
* Sanitizes the license key, making sure we have only valid chars.
*
* @param string $key
*
* @return string
*/
public static function sanitizeKey(string $key): string
{
return preg_replace('/[^a-z0-9,]/i', '', $key);
}
/**
* Appends the license key to the URL and returns it. We recognize the url
* for designated generic extensions using a default license key to allow
* legacy customers to download updates.
*
* @param string $url
* @param string $keys
*
* @return string
*/
public static function appendLicenseKeyToURL(string $url, string $keys): string
{
if (static::isOurDownloadURL($url)) {
$url = PluginHelper::getURLWithoutLicenseKey($url);
$sanitizedKeys = static::sanitizeKey($keys);
if ($keys) {
$encodedKeys = base64_encode($sanitizedKeys);
$url .= $encodedKeys;
}
}
return $url;
}
/**
* Detects the license type based on the URL. If no license is detected,
* returns false
*
* @param string $url
*
* @return ?string
*/
public static function getLicenseTypeFromURL(string $url): ?string
{
if (preg_match('#^' . static::$downloadBaseURL . '(free|pro)/#', $url, $matches)) {
return $matches[1];
}
return null;
}
}