custom/plugins/SwagCommercial/src/Licensing/Subscriber/LicenseHostChangedListener.php line 36

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Commercial\Licensing\Subscriber;
  3. use Shopware\Commercial\Licensing\License;
  4. use Shopware\Commercial\Licensing\LicenseUpdater;
  5. use Shopware\Core\Framework\Store\Authentication\StoreRequestOptionsProvider;
  6. use Shopware\Core\System\SystemConfig\Event\SystemConfigChangedEvent;
  7. use Shopware\Core\System\SystemConfig\Event\SystemConfigDomainLoadedEvent;
  8. use Shopware\Core\System\SystemConfig\SystemConfigService;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. /**
  11.  * @internal
  12.  */
  13. class LicenseHostChangedListener implements EventSubscriberInterface
  14. {
  15.     private SystemConfigService $configService;
  16.     private LicenseUpdater $licenseUpdater;
  17.     public function __construct(SystemConfigService $configServiceLicenseUpdater $licenseUpdater)
  18.     {
  19.         $this->configService $configService;
  20.         $this->licenseUpdater $licenseUpdater;
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             SystemConfigChangedEvent::class => 'syncLicenseKey',
  26.             SystemConfigDomainLoadedEvent::class => 'removeLicenseKeyFromDomain',
  27.         ];
  28.     }
  29.     public function syncLicenseKey(SystemConfigChangedEvent $event): void
  30.     {
  31.         if ($event->getKey() === StoreRequestOptionsProvider::CONFIG_KEY_STORE_LICENSE_DOMAIN) {
  32.             // remove old license key, as it won't match the new license host anymore
  33.             $this->configService->delete(License::CONFIG_STORE_LICENSE_KEY);
  34.         }
  35.         if ($event->getKey() === StoreRequestOptionsProvider::CONFIG_KEY_STORE_SHOP_SECRET && $event->getValue() !== null) {
  36.             try {
  37.                 // try to fetch a new license key after account re-authentication
  38.                 $this->licenseUpdater->sync();
  39.             } catch (\Throwable $e) {
  40.                 // ignore any errors, as there probably is no license key for the account
  41.             }
  42.         }
  43.     }
  44.     /**
  45.      * We have to remove the license key from the system config domain,
  46.      * otherwise it is exposed in the admin and the admin will overwrite it automatically,
  47.      * thus circumventing our reset logic on license host change.
  48.      */
  49.     public function removeLicenseKeyFromDomain(SystemConfigDomainLoadedEvent $event): void
  50.     {
  51.         if ($event->getDomain() !== 'core.store.') {
  52.             return;
  53.         }
  54.         $config $event->getConfig();
  55.         unset($config[License::CONFIG_STORE_LICENSE_KEY]);
  56.         $event->setConfig($config);
  57.     }
  58. }