<?php namespace SGalinski\SgNews\Service; /*************************************************************** * Copyright notice * * (c) sgalinski Internet Services (https://www.sgalinski.de) * * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project 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 3 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script 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. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use SGalinski\SgNews\Utility\ExtensionUtility; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; use TYPO3\CMS\Core\Http\NullResponse; use TYPO3\CMS\Core\Utility\GeneralUtility; /** * Class SGalinski\SgNews\Service\LicensingService */ class LicensingService { /** * Licensing Service Url */ const URL = 'https://www.sgalinski.de/?eID=sgLicensing'; /** * Licensing Service Url */ const EXTENSION_KEY = 'sg_news'; /** @var bool|NULL */ private static $isLicenseKeyValid; /** * @return boolean */ public static function checkKey(): bool { if (static::$isLicenseKeyValid === NULL) { static::$isLicenseKeyValid = FALSE; $configuration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][self::EXTENSION_KEY] ?? []; if (isset($configuration['key']) && $key = trim($configuration['key'])) { static::$isLicenseKeyValid = (bool) preg_match('/^([A-Z\d]{6}-?){4}$/', $key); } } return static::$isLicenseKeyValid; } /** * Licensing Service ping * * @param boolean $returnUrl * @return string */ public static function ping($returnUrl = FALSE): string { try { $configuration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][self::EXTENSION_KEY] ?? []; $key = ''; if (isset($configuration['key'])) { $key = trim($configuration['key']); } $params = [ 'extension' => self::EXTENSION_KEY, 'host' => GeneralUtility::getIndpEnv('HTTP_HOST'), 'key' => $key ]; $params = http_build_query($params); $pingUrl = self::URL; $pingUrl .= $params !== '' ? (strpos($pingUrl, '?') === FALSE ? '?' : '&') . $params : ''; if ($returnUrl) { return $pingUrl; } GeneralUtility::getUrl($pingUrl); } catch (\Exception $exception) { } return ''; } /** * Generates a random password string based on the configured password policies. * * @param ServerRequestInterface $request * @param ResponseInterface $response * @return ResponseInterface * @throws \InvalidArgumentException */ public function ajaxPing(ServerRequestInterface $request, ResponseInterface $response = NULL): ResponseInterface { /** @var BackendUserAuthentication $backendUser */ $backendUser = $GLOBALS['BE_USER']; if ($backendUser && !$backendUser->getModuleData('tools_beuser/index.php/web_SgNewsNews_pinged', 'ses')) { $backendUser->pushModuleData('tools_beuser/index.php/web_SgNewsNews_pinged', TRUE); self::ping(); } return $response ?? new NullResponse(); } }