diff --git a/composer.json b/composer.json index 7a84c886..22c75221 100644 --- a/composer.json +++ b/composer.json @@ -52,7 +52,7 @@ "shlinkio/shlink-event-dispatcher": "^2.1", "shlinkio/shlink-importer": "^2.3", "shlinkio/shlink-installer": "^6.0", - "shlinkio/shlink-ip-geolocation": "^1.5", + "shlinkio/shlink-ip-geolocation": "^2.0", "symfony/console": "^5.1", "symfony/filesystem": "^5.1", "symfony/lock": "^5.1", diff --git a/docker/config/shlink_in_docker.local.php b/docker/config/shlink_in_docker.local.php index 2a8369d7..2f1c9499 100644 --- a/docker/config/shlink_in_docker.local.php +++ b/docker/config/shlink_in_docker.local.php @@ -167,7 +167,7 @@ return [ ], 'geolite2' => [ - 'license_key' => env('GEOLITE_LICENSE_KEY', 'G4Lm0C60yJsnkdPi'), // Deprecated. Remove the default value + 'license_key' => env('GEOLITE_LICENSE_KEY', 'G4Lm0C60yJsnkdPi'), // Deprecated. Remove hardcoded license on v3 ], 'mercure' => $helper->getMercureConfig(), diff --git a/module/CLI/config/dependencies.config.php b/module/CLI/config/dependencies.config.php index 7d7e2865..5f51d6c2 100644 --- a/module/CLI/config/dependencies.config.php +++ b/module/CLI/config/dependencies.config.php @@ -10,6 +10,7 @@ use Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory; use Laminas\ServiceManager\Factory\InvokableFactory; use Shlinkio\Shlink\Common\Doctrine\NoDbNameConnectionFactory; use Shlinkio\Shlink\Core\Domain\DomainService; +use Shlinkio\Shlink\Core\Options\TrackingOptions; use Shlinkio\Shlink\Core\Service; use Shlinkio\Shlink\Core\ShortUrl\Helper\ShortUrlStringifier; use Shlinkio\Shlink\Core\ShortUrl\Transformer\ShortUrlDataTransformer; @@ -64,7 +65,12 @@ return [ ], ConfigAbstractFactory::class => [ - Util\GeolocationDbUpdater::class => [DbUpdater::class, Reader::class, LOCAL_LOCK_FACTORY], + Util\GeolocationDbUpdater::class => [ + DbUpdater::class, + Reader::class, + LOCAL_LOCK_FACTORY, + TrackingOptions::class, + ], Util\ProcessRunner::class => [SymfonyCli\Helper\ProcessHelper::class], ApiKey\RoleResolver::class => [DomainService::class], diff --git a/module/CLI/src/Util/GeolocationDbUpdater.php b/module/CLI/src/Util/GeolocationDbUpdater.php index 6e7c2da2..2c4ef0e2 100644 --- a/module/CLI/src/Util/GeolocationDbUpdater.php +++ b/module/CLI/src/Util/GeolocationDbUpdater.php @@ -8,6 +8,7 @@ use Cake\Chronos\Chronos; use GeoIp2\Database\Reader; use MaxMind\Db\Reader\Metadata; use Shlinkio\Shlink\CLI\Exception\GeolocationDbUpdateFailedException; +use Shlinkio\Shlink\Core\Options\TrackingOptions; use Shlinkio\Shlink\IpGeolocation\Exception\RuntimeException; use Shlinkio\Shlink\IpGeolocation\GeoLite2\DbUpdaterInterface; use Symfony\Component\Lock\LockFactory; @@ -21,12 +22,18 @@ class GeolocationDbUpdater implements GeolocationDbUpdaterInterface private DbUpdaterInterface $dbUpdater; private Reader $geoLiteDbReader; private LockFactory $locker; + private TrackingOptions $trackingOptions; - public function __construct(DbUpdaterInterface $dbUpdater, Reader $geoLiteDbReader, LockFactory $locker) - { + public function __construct( + DbUpdaterInterface $dbUpdater, + Reader $geoLiteDbReader, + LockFactory $locker, + TrackingOptions $trackingOptions + ) { $this->dbUpdater = $dbUpdater; $this->geoLiteDbReader = $geoLiteDbReader; $this->locker = $locker; + $this->trackingOptions = $trackingOptions; } /** @@ -34,6 +41,10 @@ class GeolocationDbUpdater implements GeolocationDbUpdaterInterface */ public function checkDbUpdate(?callable $beforeDownload = null, ?callable $handleProgress = null): void { + if ($this->trackingOptions->disableTracking() || $this->trackingOptions->disableIpTracking()) { + return; + } + $lock = $this->locker->createLock(self::LOCK_NAME); $lock->acquire(true); // Block until lock is released diff --git a/module/CLI/test/Util/GeolocationDbUpdaterTest.php b/module/CLI/test/Util/GeolocationDbUpdaterTest.php index 54b07f1f..c3897175 100644 --- a/module/CLI/test/Util/GeolocationDbUpdaterTest.php +++ b/module/CLI/test/Util/GeolocationDbUpdaterTest.php @@ -13,6 +13,7 @@ use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\Prophecy\ObjectProphecy; use Shlinkio\Shlink\CLI\Exception\GeolocationDbUpdateFailedException; use Shlinkio\Shlink\CLI\Util\GeolocationDbUpdater; +use Shlinkio\Shlink\Core\Options\TrackingOptions; use Shlinkio\Shlink\IpGeolocation\Exception\RuntimeException; use Shlinkio\Shlink\IpGeolocation\GeoLite2\DbUpdaterInterface; use Symfony\Component\Lock; @@ -45,6 +46,7 @@ class GeolocationDbUpdaterTest extends TestCase $this->dbUpdater->reveal(), $this->geoLiteDbReader->reveal(), $locker->reveal(), + new TrackingOptions(), ); }