mirror of
https://github.com/shlinkio/shlink.git
synced 2026-08-11 05:24:46 -05:00
Converted EnvVars to enum
This commit is contained in:
@@ -7,7 +7,7 @@ namespace Shlinkio\Shlink;
|
|||||||
use Shlinkio\Shlink\Core\Config\EnvVars;
|
use Shlinkio\Shlink\Core\Config\EnvVars;
|
||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$threshold = EnvVars::DELETE_SHORT_URL_THRESHOLD()->loadFromEnv();
|
$threshold = EnvVars::DELETE_SHORT_URL_THRESHOLD->loadFromEnv();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use Shlinkio\Shlink\Core\Config\EnvVars;
|
|||||||
use function Functional\contains;
|
use function Functional\contains;
|
||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$driver = EnvVars::DB_DRIVER()->loadFromEnv();
|
$driver = EnvVars::DB_DRIVER->loadFromEnv();
|
||||||
$isMysqlCompatible = contains(['maria', 'mysql'], $driver);
|
$isMysqlCompatible = contains(['maria', 'mysql'], $driver);
|
||||||
|
|
||||||
$resolveDriver = static fn () => match ($driver) {
|
$resolveDriver = static fn () => match ($driver) {
|
||||||
@@ -35,12 +35,12 @@ return (static function (): array {
|
|||||||
],
|
],
|
||||||
default => [
|
default => [
|
||||||
'driver' => $resolveDriver(),
|
'driver' => $resolveDriver(),
|
||||||
'dbname' => EnvVars::DB_NAME()->loadFromEnv('shlink'),
|
'dbname' => EnvVars::DB_NAME->loadFromEnv('shlink'),
|
||||||
'user' => EnvVars::DB_USER()->loadFromEnv(),
|
'user' => EnvVars::DB_USER->loadFromEnv(),
|
||||||
'password' => EnvVars::DB_PASSWORD()->loadFromEnv(),
|
'password' => EnvVars::DB_PASSWORD->loadFromEnv(),
|
||||||
'host' => EnvVars::DB_HOST()->loadFromEnv(EnvVars::DB_UNIX_SOCKET()->loadFromEnv()),
|
'host' => EnvVars::DB_HOST->loadFromEnv(EnvVars::DB_UNIX_SOCKET->loadFromEnv()),
|
||||||
'port' => EnvVars::DB_PORT()->loadFromEnv($resolveDefaultPort()),
|
'port' => EnvVars::DB_PORT->loadFromEnv($resolveDefaultPort()),
|
||||||
'unix_socket' => $isMysqlCompatible ? EnvVars::DB_UNIX_SOCKET()->loadFromEnv() : null,
|
'unix_socket' => $isMysqlCompatible ? EnvVars::DB_UNIX_SOCKET->loadFromEnv() : null,
|
||||||
'charset' => $resolveCharset(),
|
'charset' => $resolveCharset(),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ return [
|
|||||||
'geolite2' => [
|
'geolite2' => [
|
||||||
'db_location' => __DIR__ . '/../../data/GeoLite2-City.mmdb',
|
'db_location' => __DIR__ . '/../../data/GeoLite2-City.mmdb',
|
||||||
'temp_dir' => __DIR__ . '/../../data',
|
'temp_dir' => __DIR__ . '/../../data',
|
||||||
'license_key' => EnvVars::GEOLITE_LICENSE_KEY()->loadFromEnv(),
|
'license_key' => EnvVars::GEOLITE_LICENSE_KEY->loadFromEnv(),
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return [
|
|||||||
LOCAL_LOCK_FACTORY => ConfigAbstractFactory::class,
|
LOCAL_LOCK_FACTORY => ConfigAbstractFactory::class,
|
||||||
],
|
],
|
||||||
'aliases' => [
|
'aliases' => [
|
||||||
'lock_store' => EnvVars::REDIS_SERVERS()->existsInEnv() ? 'redis_lock_store' : 'local_lock_store',
|
'lock_store' => EnvVars::REDIS_SERVERS->existsInEnv() ? 'redis_lock_store' : 'local_lock_store',
|
||||||
|
|
||||||
'redis_lock_store' => Lock\Store\RedisStore::class,
|
'redis_lock_store' => Lock\Store\RedisStore::class,
|
||||||
'local_lock_store' => Lock\Store\FlockStore::class,
|
'local_lock_store' => Lock\Store\FlockStore::class,
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ use Symfony\Component\Mercure\Hub;
|
|||||||
use Symfony\Component\Mercure\HubInterface;
|
use Symfony\Component\Mercure\HubInterface;
|
||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$publicUrl = EnvVars::MERCURE_PUBLIC_HUB_URL()->loadFromEnv();
|
$publicUrl = EnvVars::MERCURE_PUBLIC_HUB_URL->loadFromEnv();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'mercure' => [
|
'mercure' => [
|
||||||
'public_hub_url' => $publicUrl,
|
'public_hub_url' => $publicUrl,
|
||||||
'internal_hub_url' => EnvVars::MERCURE_INTERNAL_HUB_URL()->loadFromEnv($publicUrl),
|
'internal_hub_url' => EnvVars::MERCURE_INTERNAL_HUB_URL->loadFromEnv($publicUrl),
|
||||||
'jwt_secret' => EnvVars::MERCURE_JWT_SECRET()->loadFromEnv(),
|
'jwt_secret' => EnvVars::MERCURE_JWT_SECRET->loadFromEnv(),
|
||||||
'jwt_issuer' => 'Shlink',
|
'jwt_issuer' => 'Shlink',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ use const Shlinkio\Shlink\DEFAULT_QR_CODE_SIZE;
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
'qr_codes' => [
|
'qr_codes' => [
|
||||||
'size' => (int) EnvVars::DEFAULT_QR_CODE_SIZE()->loadFromEnv(DEFAULT_QR_CODE_SIZE),
|
'size' => (int) EnvVars::DEFAULT_QR_CODE_SIZE->loadFromEnv(DEFAULT_QR_CODE_SIZE),
|
||||||
'margin' => (int) EnvVars::DEFAULT_QR_CODE_MARGIN()->loadFromEnv(DEFAULT_QR_CODE_MARGIN),
|
'margin' => (int) EnvVars::DEFAULT_QR_CODE_MARGIN->loadFromEnv(DEFAULT_QR_CODE_MARGIN),
|
||||||
'format' => EnvVars::DEFAULT_QR_CODE_FORMAT()->loadFromEnv(DEFAULT_QR_CODE_FORMAT),
|
'format' => EnvVars::DEFAULT_QR_CODE_FORMAT->loadFromEnv(DEFAULT_QR_CODE_FORMAT),
|
||||||
'error_correction' => EnvVars::DEFAULT_QR_CODE_ERROR_CORRECTION()->loadFromEnv(
|
'error_correction' => EnvVars::DEFAULT_QR_CODE_ERROR_CORRECTION->loadFromEnv(
|
||||||
DEFAULT_QR_CODE_ERROR_CORRECTION,
|
DEFAULT_QR_CODE_ERROR_CORRECTION,
|
||||||
),
|
),
|
||||||
'round_block_size' => (bool) EnvVars::DEFAULT_QR_CODE_ROUND_BLOCK_SIZE()->loadFromEnv(
|
'round_block_size' => (bool) EnvVars::DEFAULT_QR_CODE_ROUND_BLOCK_SIZE->loadFromEnv(
|
||||||
DEFAULT_QR_CODE_ROUND_BLOCK_SIZE,
|
DEFAULT_QR_CODE_ROUND_BLOCK_SIZE,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ use Shlinkio\Shlink\Core\Config\EnvVars;
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
'rabbitmq' => [
|
'rabbitmq' => [
|
||||||
'enabled' => (bool) EnvVars::RABBITMQ_ENABLED()->loadFromEnv(false),
|
'enabled' => (bool) EnvVars::RABBITMQ_ENABLED->loadFromEnv(false),
|
||||||
'host' => EnvVars::RABBITMQ_HOST()->loadFromEnv(),
|
'host' => EnvVars::RABBITMQ_HOST->loadFromEnv(),
|
||||||
'port' => (int) EnvVars::RABBITMQ_PORT()->loadFromEnv('5672'),
|
'port' => (int) EnvVars::RABBITMQ_PORT->loadFromEnv('5672'),
|
||||||
'user' => EnvVars::RABBITMQ_USER()->loadFromEnv(),
|
'user' => EnvVars::RABBITMQ_USER->loadFromEnv(),
|
||||||
'password' => EnvVars::RABBITMQ_PASSWORD()->loadFromEnv(),
|
'password' => EnvVars::RABBITMQ_PASSWORD->loadFromEnv(),
|
||||||
'vhost' => EnvVars::RABBITMQ_VHOST()->loadFromEnv('/'),
|
'vhost' => EnvVars::RABBITMQ_VHOST->loadFromEnv('/'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'dependencies' => [
|
'dependencies' => [
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ use const Shlinkio\Shlink\DEFAULT_REDIRECT_STATUS_CODE;
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
'not_found_redirects' => [
|
'not_found_redirects' => [
|
||||||
'invalid_short_url' => EnvVars::DEFAULT_INVALID_SHORT_URL_REDIRECT()->loadFromEnv(),
|
'invalid_short_url' => EnvVars::DEFAULT_INVALID_SHORT_URL_REDIRECT->loadFromEnv(),
|
||||||
'regular_404' => EnvVars::DEFAULT_REGULAR_404_REDIRECT()->loadFromEnv(),
|
'regular_404' => EnvVars::DEFAULT_REGULAR_404_REDIRECT->loadFromEnv(),
|
||||||
'base_url' => EnvVars::DEFAULT_BASE_URL_REDIRECT()->loadFromEnv(),
|
'base_url' => EnvVars::DEFAULT_BASE_URL_REDIRECT->loadFromEnv(),
|
||||||
],
|
],
|
||||||
|
|
||||||
'redirects' => [
|
'redirects' => [
|
||||||
'redirect_status_code' => (int) EnvVars::REDIRECT_STATUS_CODE()->loadFromEnv(DEFAULT_REDIRECT_STATUS_CODE),
|
'redirect_status_code' => (int) EnvVars::REDIRECT_STATUS_CODE->loadFromEnv(DEFAULT_REDIRECT_STATUS_CODE),
|
||||||
'redirect_cache_lifetime' => (int) EnvVars::REDIRECT_CACHE_LIFETIME()->loadFromEnv(
|
'redirect_cache_lifetime' => (int) EnvVars::REDIRECT_CACHE_LIFETIME->loadFromEnv(
|
||||||
DEFAULT_REDIRECT_CACHE_LIFETIME,
|
DEFAULT_REDIRECT_CACHE_LIFETIME,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ declare(strict_types=1);
|
|||||||
use Shlinkio\Shlink\Core\Config\EnvVars;
|
use Shlinkio\Shlink\Core\Config\EnvVars;
|
||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$redisServers = EnvVars::REDIS_SERVERS()->loadFromEnv();
|
$redisServers = EnvVars::REDIS_SERVERS->loadFromEnv();
|
||||||
|
|
||||||
return match ($redisServers) {
|
return match ($redisServers) {
|
||||||
null => [],
|
null => [],
|
||||||
@@ -13,7 +13,7 @@ return (static function (): array {
|
|||||||
'cache' => [
|
'cache' => [
|
||||||
'redis' => [
|
'redis' => [
|
||||||
'servers' => $redisServers,
|
'servers' => $redisServers,
|
||||||
'sentinel_service' => EnvVars::REDIS_SENTINEL_SERVICE()->loadFromEnv(),
|
'sentinel_service' => EnvVars::REDIS_SENTINEL_SERVICE->loadFromEnv(),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use Shlinkio\Shlink\Core\Config\EnvVars;
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
'router' => [
|
'router' => [
|
||||||
'base_path' => EnvVars::BASE_PATH()->loadFromEnv(''),
|
'base_path' => EnvVars::BASE_PATH->loadFromEnv(''),
|
||||||
|
|
||||||
'fastroute' => [
|
'fastroute' => [
|
||||||
FastRouteRouter::CONFIG_CACHE_ENABLED => true,
|
FastRouteRouter::CONFIG_CACHE_ENABLED => true,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use Shlinkio\Shlink\Core\Config\EnvVars;
|
|||||||
use const Shlinkio\Shlink\MIN_TASK_WORKERS;
|
use const Shlinkio\Shlink\MIN_TASK_WORKERS;
|
||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$taskWorkers = (int) EnvVars::TASK_WORKER_NUM()->loadFromEnv(16);
|
$taskWorkers = (int) EnvVars::TASK_WORKER_NUM->loadFromEnv(16);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
@@ -17,11 +17,11 @@ return (static function (): array {
|
|||||||
|
|
||||||
'swoole-http-server' => [
|
'swoole-http-server' => [
|
||||||
'host' => '0.0.0.0',
|
'host' => '0.0.0.0',
|
||||||
'port' => (int) EnvVars::PORT()->loadFromEnv(8080),
|
'port' => (int) EnvVars::PORT->loadFromEnv(8080),
|
||||||
'process-name' => 'shlink',
|
'process-name' => 'shlink',
|
||||||
|
|
||||||
'options' => [
|
'options' => [
|
||||||
'worker_num' => (int) EnvVars::WEB_WORKER_NUM()->loadFromEnv(16),
|
'worker_num' => (int) EnvVars::WEB_WORKER_NUM->loadFromEnv(16),
|
||||||
'task_worker_num' => max($taskWorkers, MIN_TASK_WORKERS),
|
'task_worker_num' => max($taskWorkers, MIN_TASK_WORKERS),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -9,28 +9,28 @@ return [
|
|||||||
'tracking' => [
|
'tracking' => [
|
||||||
// Tells if IP addresses should be anonymized before persisting, to fulfil data protection regulations
|
// Tells if IP addresses should be anonymized before persisting, to fulfil data protection regulations
|
||||||
// This applies only if IP address tracking is enabled
|
// This applies only if IP address tracking is enabled
|
||||||
'anonymize_remote_addr' => (bool) EnvVars::ANONYMIZE_REMOTE_ADDR()->loadFromEnv(true),
|
'anonymize_remote_addr' => (bool) EnvVars::ANONYMIZE_REMOTE_ADDR->loadFromEnv(true),
|
||||||
|
|
||||||
// Tells if visits to not-found URLs should be tracked. The disable_tracking option takes precedence
|
// Tells if visits to not-found URLs should be tracked. The disable_tracking option takes precedence
|
||||||
'track_orphan_visits' => (bool) EnvVars::TRACK_ORPHAN_VISITS()->loadFromEnv(true),
|
'track_orphan_visits' => (bool) EnvVars::TRACK_ORPHAN_VISITS->loadFromEnv(true),
|
||||||
|
|
||||||
// A query param that, if provided, will disable tracking of one particular visit. Always takes precedence
|
// A query param that, if provided, will disable tracking of one particular visit. Always takes precedence
|
||||||
'disable_track_param' => EnvVars::DISABLE_TRACK_PARAM()->loadFromEnv(),
|
'disable_track_param' => EnvVars::DISABLE_TRACK_PARAM->loadFromEnv(),
|
||||||
|
|
||||||
// If true, visits will not be tracked at all
|
// If true, visits will not be tracked at all
|
||||||
'disable_tracking' => (bool) EnvVars::DISABLE_TRACKING()->loadFromEnv(false),
|
'disable_tracking' => (bool) EnvVars::DISABLE_TRACKING->loadFromEnv(false),
|
||||||
|
|
||||||
// If true, visits will be tracked, but neither the IP address, nor the location will be resolved
|
// If true, visits will be tracked, but neither the IP address, nor the location will be resolved
|
||||||
'disable_ip_tracking' => (bool) EnvVars::DISABLE_IP_TRACKING()->loadFromEnv(false),
|
'disable_ip_tracking' => (bool) EnvVars::DISABLE_IP_TRACKING->loadFromEnv(false),
|
||||||
|
|
||||||
// If true, the referrer will not be tracked
|
// If true, the referrer will not be tracked
|
||||||
'disable_referrer_tracking' => (bool) EnvVars::DISABLE_REFERRER_TRACKING()->loadFromEnv(false),
|
'disable_referrer_tracking' => (bool) EnvVars::DISABLE_REFERRER_TRACKING->loadFromEnv(false),
|
||||||
|
|
||||||
// If true, the user agent will not be tracked
|
// If true, the user agent will not be tracked
|
||||||
'disable_ua_tracking' => (bool) EnvVars::DISABLE_UA_TRACKING()->loadFromEnv(false),
|
'disable_ua_tracking' => (bool) EnvVars::DISABLE_UA_TRACKING->loadFromEnv(false),
|
||||||
|
|
||||||
// A list of IP addresses, patterns or CIDR blocks from which tracking is disabled by default
|
// A list of IP addresses, patterns or CIDR blocks from which tracking is disabled by default
|
||||||
'disable_tracking_from' => EnvVars::DISABLE_TRACKING_FROM()->loadFromEnv(),
|
'disable_tracking_from' => EnvVars::DISABLE_TRACKING_FROM->loadFromEnv(),
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use const Shlinkio\Shlink\MIN_SHORT_CODES_LENGTH;
|
|||||||
|
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$shortCodesLength = max(
|
$shortCodesLength = max(
|
||||||
(int) EnvVars::DEFAULT_SHORT_CODES_LENGTH()->loadFromEnv(DEFAULT_SHORT_CODES_LENGTH),
|
(int) EnvVars::DEFAULT_SHORT_CODES_LENGTH->loadFromEnv(DEFAULT_SHORT_CODES_LENGTH),
|
||||||
MIN_SHORT_CODES_LENGTH,
|
MIN_SHORT_CODES_LENGTH,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -17,12 +17,12 @@ return (static function (): array {
|
|||||||
|
|
||||||
'url_shortener' => [
|
'url_shortener' => [
|
||||||
'domain' => [ // TODO Refactor this structure to url_shortener.schema and url_shortener.default_domain
|
'domain' => [ // TODO Refactor this structure to url_shortener.schema and url_shortener.default_domain
|
||||||
'schema' => ((bool) EnvVars::IS_HTTPS_ENABLED()->loadFromEnv(true)) ? 'https' : 'http',
|
'schema' => ((bool) EnvVars::IS_HTTPS_ENABLED->loadFromEnv(true)) ? 'https' : 'http',
|
||||||
'hostname' => EnvVars::DEFAULT_DOMAIN()->loadFromEnv(''),
|
'hostname' => EnvVars::DEFAULT_DOMAIN->loadFromEnv(''),
|
||||||
],
|
],
|
||||||
'default_short_codes_length' => $shortCodesLength,
|
'default_short_codes_length' => $shortCodesLength,
|
||||||
'auto_resolve_titles' => (bool) EnvVars::AUTO_RESOLVE_TITLES()->loadFromEnv(false),
|
'auto_resolve_titles' => (bool) EnvVars::AUTO_RESOLVE_TITLES->loadFromEnv(false),
|
||||||
'append_extra_path' => (bool) EnvVars::REDIRECT_APPEND_EXTRA_PATH()->loadFromEnv(false),
|
'append_extra_path' => (bool) EnvVars::REDIRECT_APPEND_EXTRA_PATH->loadFromEnv(false),
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ use Shlinkio\Shlink\Core\Config\EnvVars;
|
|||||||
|
|
||||||
// Deprecated. Webhooks are no longer supported. To be removed in Shlink 4.0.0
|
// Deprecated. Webhooks are no longer supported. To be removed in Shlink 4.0.0
|
||||||
return (static function (): array {
|
return (static function (): array {
|
||||||
$webhooks = EnvVars::VISITS_WEBHOOKS()->loadFromEnv();
|
$webhooks = EnvVars::VISITS_WEBHOOKS->loadFromEnv();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'visits_webhooks' => [
|
'visits_webhooks' => [
|
||||||
'webhooks' => $webhooks === null ? [] : explode(',', $webhooks),
|
'webhooks' => $webhooks === null ? [] : explode(',', $webhooks),
|
||||||
'notify_orphan_visits_to_webhooks' =>
|
'notify_orphan_visits_to_webhooks' =>
|
||||||
(bool) EnvVars::NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS()->loadFromEnv(false),
|
(bool) EnvVars::NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS->loadFromEnv(false),
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ chdir(dirname(__DIR__));
|
|||||||
require 'vendor/autoload.php';
|
require 'vendor/autoload.php';
|
||||||
|
|
||||||
// This is one of the first files loaded. Configure the timezone here
|
// This is one of the first files loaded. Configure the timezone here
|
||||||
date_default_timezone_set(EnvVars::TIMEZONE()->loadFromEnv(date_default_timezone_get()));
|
date_default_timezone_set(EnvVars::TIMEZONE->loadFromEnv(date_default_timezone_get()));
|
||||||
|
|
||||||
// This class alias tricks the ConfigAbstractFactory to return Lock\Factory instances even with a different service name
|
// This class alias tricks the ConfigAbstractFactory to return Lock\Factory instances even with a different service name
|
||||||
// It needs to be placed here as individual config files will not be loaded once config is cached
|
// It needs to be placed here as individual config files will not be loaded once config is cached
|
||||||
|
|||||||
@@ -2,155 +2,70 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
// phpcs:disable
|
||||||
|
// TODO Enable coding style checks again once code sniffer 3.7 is released https://github.com/squizlabs/PHP_CodeSniffer/issues/3474
|
||||||
namespace Shlinkio\Shlink\Core\Config;
|
namespace Shlinkio\Shlink\Core\Config;
|
||||||
|
|
||||||
use ReflectionClass;
|
|
||||||
use ReflectionClassConstant;
|
|
||||||
use Shlinkio\Shlink\Core\Exception\InvalidArgumentException;
|
|
||||||
|
|
||||||
use function array_values;
|
|
||||||
use function Functional\contains;
|
|
||||||
use function Shlinkio\Shlink\Config\env;
|
use function Shlinkio\Shlink\Config\env;
|
||||||
|
|
||||||
// TODO Convert to enum after dropping PHP 8.0 support
|
enum EnvVars: string
|
||||||
|
|
||||||
/**
|
|
||||||
* @method static EnvVars DELETE_SHORT_URL_THRESHOLD()
|
|
||||||
* @method static EnvVars DB_DRIVER()
|
|
||||||
* @method static EnvVars DB_NAME()
|
|
||||||
* @method static EnvVars DB_USER()
|
|
||||||
* @method static EnvVars DB_PASSWORD()
|
|
||||||
* @method static EnvVars DB_HOST()
|
|
||||||
* @method static EnvVars DB_UNIX_SOCKET()
|
|
||||||
* @method static EnvVars DB_PORT()
|
|
||||||
* @method static EnvVars GEOLITE_LICENSE_KEY()
|
|
||||||
* @method static EnvVars REDIS_SERVERS()
|
|
||||||
* @method static EnvVars REDIS_SENTINEL_SERVICE()
|
|
||||||
* @method static EnvVars MERCURE_PUBLIC_HUB_URL()
|
|
||||||
* @method static EnvVars MERCURE_INTERNAL_HUB_URL()
|
|
||||||
* @method static EnvVars MERCURE_JWT_SECRET()
|
|
||||||
* @method static EnvVars DEFAULT_QR_CODE_SIZE()
|
|
||||||
* @method static EnvVars DEFAULT_QR_CODE_MARGIN()
|
|
||||||
* @method static EnvVars DEFAULT_QR_CODE_FORMAT()
|
|
||||||
* @method static EnvVars DEFAULT_QR_CODE_ERROR_CORRECTION()
|
|
||||||
* @method static EnvVars DEFAULT_QR_CODE_ROUND_BLOCK_SIZE()
|
|
||||||
* @method static EnvVars RABBITMQ_ENABLED()
|
|
||||||
* @method static EnvVars RABBITMQ_HOST()
|
|
||||||
* @method static EnvVars RABBITMQ_PORT()
|
|
||||||
* @method static EnvVars RABBITMQ_USER()
|
|
||||||
* @method static EnvVars RABBITMQ_PASSWORD()
|
|
||||||
* @method static EnvVars RABBITMQ_VHOST()
|
|
||||||
* @method static EnvVars DEFAULT_INVALID_SHORT_URL_REDIRECT()
|
|
||||||
* @method static EnvVars DEFAULT_REGULAR_404_REDIRECT()
|
|
||||||
* @method static EnvVars DEFAULT_BASE_URL_REDIRECT()
|
|
||||||
* @method static EnvVars REDIRECT_STATUS_CODE()
|
|
||||||
* @method static EnvVars REDIRECT_CACHE_LIFETIME()
|
|
||||||
* @method static EnvVars BASE_PATH()
|
|
||||||
* @method static EnvVars PORT()
|
|
||||||
* @method static EnvVars TASK_WORKER_NUM()
|
|
||||||
* @method static EnvVars WEB_WORKER_NUM()
|
|
||||||
* @method static EnvVars ANONYMIZE_REMOTE_ADDR()
|
|
||||||
* @method static EnvVars TRACK_ORPHAN_VISITS()
|
|
||||||
* @method static EnvVars DISABLE_TRACK_PARAM()
|
|
||||||
* @method static EnvVars DISABLE_TRACKING()
|
|
||||||
* @method static EnvVars DISABLE_IP_TRACKING()
|
|
||||||
* @method static EnvVars DISABLE_REFERRER_TRACKING()
|
|
||||||
* @method static EnvVars DISABLE_UA_TRACKING()
|
|
||||||
* @method static EnvVars DISABLE_TRACKING_FROM()
|
|
||||||
* @method static EnvVars DEFAULT_SHORT_CODES_LENGTH()
|
|
||||||
* @method static EnvVars IS_HTTPS_ENABLED()
|
|
||||||
* @method static EnvVars DEFAULT_DOMAIN()
|
|
||||||
* @method static EnvVars AUTO_RESOLVE_TITLES()
|
|
||||||
* @method static EnvVars REDIRECT_APPEND_EXTRA_PATH()
|
|
||||||
* @method static EnvVars TIMEZONE()
|
|
||||||
* @method static EnvVars VISITS_WEBHOOKS()
|
|
||||||
* @method static EnvVars NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS()
|
|
||||||
*/
|
|
||||||
final class EnvVars
|
|
||||||
{
|
{
|
||||||
public const DELETE_SHORT_URL_THRESHOLD = 'DELETE_SHORT_URL_THRESHOLD';
|
case DELETE_SHORT_URL_THRESHOLD = 'DELETE_SHORT_URL_THRESHOLD';
|
||||||
public const DB_DRIVER = 'DB_DRIVER';
|
case DB_DRIVER = 'DB_DRIVER';
|
||||||
public const DB_NAME = 'DB_NAME';
|
case DB_NAME = 'DB_NAME';
|
||||||
public const DB_USER = 'DB_USER';
|
case DB_USER = 'DB_USER';
|
||||||
public const DB_PASSWORD = 'DB_PASSWORD';
|
case DB_PASSWORD = 'DB_PASSWORD';
|
||||||
public const DB_HOST = 'DB_HOST';
|
case DB_HOST = 'DB_HOST';
|
||||||
public const DB_UNIX_SOCKET = 'DB_UNIX_SOCKET';
|
case DB_UNIX_SOCKET = 'DB_UNIX_SOCKET';
|
||||||
public const DB_PORT = 'DB_PORT';
|
case DB_PORT = 'DB_PORT';
|
||||||
public const GEOLITE_LICENSE_KEY = 'GEOLITE_LICENSE_KEY';
|
case GEOLITE_LICENSE_KEY = 'GEOLITE_LICENSE_KEY';
|
||||||
public const REDIS_SERVERS = 'REDIS_SERVERS';
|
case REDIS_SERVERS = 'REDIS_SERVERS';
|
||||||
public const REDIS_SENTINEL_SERVICE = 'REDIS_SENTINEL_SERVICE';
|
case REDIS_SENTINEL_SERVICE = 'REDIS_SENTINEL_SERVICE';
|
||||||
public const MERCURE_PUBLIC_HUB_URL = 'MERCURE_PUBLIC_HUB_URL';
|
case MERCURE_PUBLIC_HUB_URL = 'MERCURE_PUBLIC_HUB_URL';
|
||||||
public const MERCURE_INTERNAL_HUB_URL = 'MERCURE_INTERNAL_HUB_URL';
|
case MERCURE_INTERNAL_HUB_URL = 'MERCURE_INTERNAL_HUB_URL';
|
||||||
public const MERCURE_JWT_SECRET = 'MERCURE_JWT_SECRET';
|
case MERCURE_JWT_SECRET = 'MERCURE_JWT_SECRET';
|
||||||
public const DEFAULT_QR_CODE_SIZE = 'DEFAULT_QR_CODE_SIZE';
|
case DEFAULT_QR_CODE_SIZE = 'DEFAULT_QR_CODE_SIZE';
|
||||||
public const DEFAULT_QR_CODE_MARGIN = 'DEFAULT_QR_CODE_MARGIN';
|
case DEFAULT_QR_CODE_MARGIN = 'DEFAULT_QR_CODE_MARGIN';
|
||||||
public const DEFAULT_QR_CODE_FORMAT = 'DEFAULT_QR_CODE_FORMAT';
|
case DEFAULT_QR_CODE_FORMAT = 'DEFAULT_QR_CODE_FORMAT';
|
||||||
public const DEFAULT_QR_CODE_ERROR_CORRECTION = 'DEFAULT_QR_CODE_ERROR_CORRECTION';
|
case DEFAULT_QR_CODE_ERROR_CORRECTION = 'DEFAULT_QR_CODE_ERROR_CORRECTION';
|
||||||
public const DEFAULT_QR_CODE_ROUND_BLOCK_SIZE = 'DEFAULT_QR_CODE_ROUND_BLOCK_SIZE';
|
case DEFAULT_QR_CODE_ROUND_BLOCK_SIZE = 'DEFAULT_QR_CODE_ROUND_BLOCK_SIZE';
|
||||||
public const RABBITMQ_ENABLED = 'RABBITMQ_ENABLED';
|
case RABBITMQ_ENABLED = 'RABBITMQ_ENABLED';
|
||||||
public const RABBITMQ_HOST = 'RABBITMQ_HOST';
|
case RABBITMQ_HOST = 'RABBITMQ_HOST';
|
||||||
public const RABBITMQ_PORT = 'RABBITMQ_PORT';
|
case RABBITMQ_PORT = 'RABBITMQ_PORT';
|
||||||
public const RABBITMQ_USER = 'RABBITMQ_USER';
|
case RABBITMQ_USER = 'RABBITMQ_USER';
|
||||||
public const RABBITMQ_PASSWORD = 'RABBITMQ_PASSWORD';
|
case RABBITMQ_PASSWORD = 'RABBITMQ_PASSWORD';
|
||||||
public const RABBITMQ_VHOST = 'RABBITMQ_VHOST';
|
case RABBITMQ_VHOST = 'RABBITMQ_VHOST';
|
||||||
public const DEFAULT_INVALID_SHORT_URL_REDIRECT = 'DEFAULT_INVALID_SHORT_URL_REDIRECT';
|
case DEFAULT_INVALID_SHORT_URL_REDIRECT = 'DEFAULT_INVALID_SHORT_URL_REDIRECT';
|
||||||
public const DEFAULT_REGULAR_404_REDIRECT = 'DEFAULT_REGULAR_404_REDIRECT';
|
case DEFAULT_REGULAR_404_REDIRECT = 'DEFAULT_REGULAR_404_REDIRECT';
|
||||||
public const DEFAULT_BASE_URL_REDIRECT = 'DEFAULT_BASE_URL_REDIRECT';
|
case DEFAULT_BASE_URL_REDIRECT = 'DEFAULT_BASE_URL_REDIRECT';
|
||||||
public const REDIRECT_STATUS_CODE = 'REDIRECT_STATUS_CODE';
|
case REDIRECT_STATUS_CODE = 'REDIRECT_STATUS_CODE';
|
||||||
public const REDIRECT_CACHE_LIFETIME = 'REDIRECT_CACHE_LIFETIME';
|
case REDIRECT_CACHE_LIFETIME = 'REDIRECT_CACHE_LIFETIME';
|
||||||
public const BASE_PATH = 'BASE_PATH';
|
case BASE_PATH = 'BASE_PATH';
|
||||||
public const PORT = 'PORT';
|
case PORT = 'PORT';
|
||||||
public const TASK_WORKER_NUM = 'TASK_WORKER_NUM';
|
case TASK_WORKER_NUM = 'TASK_WORKER_NUM';
|
||||||
public const WEB_WORKER_NUM = 'WEB_WORKER_NUM';
|
case WEB_WORKER_NUM = 'WEB_WORKER_NUM';
|
||||||
public const ANONYMIZE_REMOTE_ADDR = 'ANONYMIZE_REMOTE_ADDR';
|
case ANONYMIZE_REMOTE_ADDR = 'ANONYMIZE_REMOTE_ADDR';
|
||||||
public const TRACK_ORPHAN_VISITS = 'TRACK_ORPHAN_VISITS';
|
case TRACK_ORPHAN_VISITS = 'TRACK_ORPHAN_VISITS';
|
||||||
public const DISABLE_TRACK_PARAM = 'DISABLE_TRACK_PARAM';
|
case DISABLE_TRACK_PARAM = 'DISABLE_TRACK_PARAM';
|
||||||
public const DISABLE_TRACKING = 'DISABLE_TRACKING';
|
case DISABLE_TRACKING = 'DISABLE_TRACKING';
|
||||||
public const DISABLE_IP_TRACKING = 'DISABLE_IP_TRACKING';
|
case DISABLE_IP_TRACKING = 'DISABLE_IP_TRACKING';
|
||||||
public const DISABLE_REFERRER_TRACKING = 'DISABLE_REFERRER_TRACKING';
|
case DISABLE_REFERRER_TRACKING = 'DISABLE_REFERRER_TRACKING';
|
||||||
public const DISABLE_UA_TRACKING = 'DISABLE_UA_TRACKING';
|
case DISABLE_UA_TRACKING = 'DISABLE_UA_TRACKING';
|
||||||
public const DISABLE_TRACKING_FROM = 'DISABLE_TRACKING_FROM';
|
case DISABLE_TRACKING_FROM = 'DISABLE_TRACKING_FROM';
|
||||||
public const DEFAULT_SHORT_CODES_LENGTH = 'DEFAULT_SHORT_CODES_LENGTH';
|
case DEFAULT_SHORT_CODES_LENGTH = 'DEFAULT_SHORT_CODES_LENGTH';
|
||||||
public const IS_HTTPS_ENABLED = 'IS_HTTPS_ENABLED';
|
case IS_HTTPS_ENABLED = 'IS_HTTPS_ENABLED';
|
||||||
public const DEFAULT_DOMAIN = 'DEFAULT_DOMAIN';
|
case DEFAULT_DOMAIN = 'DEFAULT_DOMAIN';
|
||||||
public const AUTO_RESOLVE_TITLES = 'AUTO_RESOLVE_TITLES';
|
case AUTO_RESOLVE_TITLES = 'AUTO_RESOLVE_TITLES';
|
||||||
public const REDIRECT_APPEND_EXTRA_PATH = 'REDIRECT_APPEND_EXTRA_PATH';
|
case REDIRECT_APPEND_EXTRA_PATH = 'REDIRECT_APPEND_EXTRA_PATH';
|
||||||
public const TIMEZONE = 'TIMEZONE';
|
case TIMEZONE = 'TIMEZONE';
|
||||||
/** @deprecated */
|
/** @deprecated */
|
||||||
public const VISITS_WEBHOOKS = 'VISITS_WEBHOOKS';
|
case VISITS_WEBHOOKS = 'VISITS_WEBHOOKS';
|
||||||
/** @deprecated */
|
/** @deprecated */
|
||||||
public const NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS = 'NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS';
|
case NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS = 'NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS';
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public static function cases(): array
|
|
||||||
{
|
|
||||||
static $constants;
|
|
||||||
if ($constants !== null) {
|
|
||||||
return $constants;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ref = new ReflectionClass(self::class);
|
|
||||||
return $constants = array_values($ref->getConstants(ReflectionClassConstant::IS_PUBLIC));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function __construct(private string $envVar)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function __callStatic(string $name, array $arguments): self
|
|
||||||
{
|
|
||||||
if (! contains(self::cases(), $name)) {
|
|
||||||
throw new InvalidArgumentException('Invalid env var: "' . $name . '"');
|
|
||||||
}
|
|
||||||
|
|
||||||
return new self($name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loadFromEnv(mixed $default = null): mixed
|
public function loadFromEnv(mixed $default = null): mixed
|
||||||
{
|
{
|
||||||
return env($this->envVar, $default);
|
return env($this->value, $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function existsInEnv(): bool
|
public function existsInEnv(): bool
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ use function Shlinkio\Shlink\Core\isCrawler;
|
|||||||
|
|
||||||
class Visit extends AbstractEntity implements JsonSerializable
|
class Visit extends AbstractEntity implements JsonSerializable
|
||||||
{
|
{
|
||||||
|
// TODO Convert to enum
|
||||||
public const TYPE_VALID_SHORT_URL = 'valid_short_url';
|
public const TYPE_VALID_SHORT_URL = 'valid_short_url';
|
||||||
public const TYPE_IMPORTED = 'imported';
|
public const TYPE_IMPORTED = 'imported';
|
||||||
public const TYPE_INVALID_SHORT_URL = 'invalid_short_url';
|
public const TYPE_INVALID_SHORT_URL = 'invalid_short_url';
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ final class ShortUrlsParams
|
|||||||
{
|
{
|
||||||
public const ORDERABLE_FIELDS = ['longUrl', 'shortCode', 'dateCreated', 'title', 'visits'];
|
public const ORDERABLE_FIELDS = ['longUrl', 'shortCode', 'dateCreated', 'title', 'visits'];
|
||||||
public const DEFAULT_ITEMS_PER_PAGE = 10;
|
public const DEFAULT_ITEMS_PER_PAGE = 10;
|
||||||
|
|
||||||
|
// TODO Convert to enum
|
||||||
public const TAGS_MODE_ANY = 'any';
|
public const TAGS_MODE_ANY = 'any';
|
||||||
public const TAGS_MODE_ALL = 'all';
|
public const TAGS_MODE_ALL = 'all';
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ namespace ShlinkioTest\Shlink\Core\Config;
|
|||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Shlinkio\Shlink\Core\Config\EnvVars;
|
use Shlinkio\Shlink\Core\Config\EnvVars;
|
||||||
use Shlinkio\Shlink\Core\Exception\InvalidArgumentException;
|
|
||||||
|
|
||||||
use function putenv;
|
use function putenv;
|
||||||
|
|
||||||
@@ -14,92 +13,14 @@ class EnvVarsTest extends TestCase
|
|||||||
{
|
{
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
putenv(EnvVars::BASE_PATH . '=the_base_path');
|
putenv(EnvVars::BASE_PATH->value . '=the_base_path');
|
||||||
putenv(EnvVars::DB_NAME . '=shlink');
|
putenv(EnvVars::DB_NAME->value . '=shlink');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown(): void
|
protected function tearDown(): void
|
||||||
{
|
{
|
||||||
putenv(EnvVars::BASE_PATH . '=');
|
putenv(EnvVars::BASE_PATH->value . '=');
|
||||||
putenv(EnvVars::DB_NAME . '=');
|
putenv(EnvVars::DB_NAME->value . '=');
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function casesReturnsTheSameListEveryTime(): void
|
|
||||||
{
|
|
||||||
$list = EnvVars::cases();
|
|
||||||
self::assertSame($list, EnvVars::cases());
|
|
||||||
self::assertSame([
|
|
||||||
EnvVars::DELETE_SHORT_URL_THRESHOLD,
|
|
||||||
EnvVars::DB_DRIVER,
|
|
||||||
EnvVars::DB_NAME,
|
|
||||||
EnvVars::DB_USER,
|
|
||||||
EnvVars::DB_PASSWORD,
|
|
||||||
EnvVars::DB_HOST,
|
|
||||||
EnvVars::DB_UNIX_SOCKET,
|
|
||||||
EnvVars::DB_PORT,
|
|
||||||
EnvVars::GEOLITE_LICENSE_KEY,
|
|
||||||
EnvVars::REDIS_SERVERS,
|
|
||||||
EnvVars::REDIS_SENTINEL_SERVICE,
|
|
||||||
EnvVars::MERCURE_PUBLIC_HUB_URL,
|
|
||||||
EnvVars::MERCURE_INTERNAL_HUB_URL,
|
|
||||||
EnvVars::MERCURE_JWT_SECRET,
|
|
||||||
EnvVars::DEFAULT_QR_CODE_SIZE,
|
|
||||||
EnvVars::DEFAULT_QR_CODE_MARGIN,
|
|
||||||
EnvVars::DEFAULT_QR_CODE_FORMAT,
|
|
||||||
EnvVars::DEFAULT_QR_CODE_ERROR_CORRECTION,
|
|
||||||
EnvVars::DEFAULT_QR_CODE_ROUND_BLOCK_SIZE,
|
|
||||||
EnvVars::RABBITMQ_ENABLED,
|
|
||||||
EnvVars::RABBITMQ_HOST,
|
|
||||||
EnvVars::RABBITMQ_PORT,
|
|
||||||
EnvVars::RABBITMQ_USER,
|
|
||||||
EnvVars::RABBITMQ_PASSWORD,
|
|
||||||
EnvVars::RABBITMQ_VHOST,
|
|
||||||
EnvVars::DEFAULT_INVALID_SHORT_URL_REDIRECT,
|
|
||||||
EnvVars::DEFAULT_REGULAR_404_REDIRECT,
|
|
||||||
EnvVars::DEFAULT_BASE_URL_REDIRECT,
|
|
||||||
EnvVars::REDIRECT_STATUS_CODE,
|
|
||||||
EnvVars::REDIRECT_CACHE_LIFETIME,
|
|
||||||
EnvVars::BASE_PATH,
|
|
||||||
EnvVars::PORT,
|
|
||||||
EnvVars::TASK_WORKER_NUM,
|
|
||||||
EnvVars::WEB_WORKER_NUM,
|
|
||||||
EnvVars::ANONYMIZE_REMOTE_ADDR,
|
|
||||||
EnvVars::TRACK_ORPHAN_VISITS,
|
|
||||||
EnvVars::DISABLE_TRACK_PARAM,
|
|
||||||
EnvVars::DISABLE_TRACKING,
|
|
||||||
EnvVars::DISABLE_IP_TRACKING,
|
|
||||||
EnvVars::DISABLE_REFERRER_TRACKING,
|
|
||||||
EnvVars::DISABLE_UA_TRACKING,
|
|
||||||
EnvVars::DISABLE_TRACKING_FROM,
|
|
||||||
EnvVars::DEFAULT_SHORT_CODES_LENGTH,
|
|
||||||
EnvVars::IS_HTTPS_ENABLED,
|
|
||||||
EnvVars::DEFAULT_DOMAIN,
|
|
||||||
EnvVars::AUTO_RESOLVE_TITLES,
|
|
||||||
EnvVars::REDIRECT_APPEND_EXTRA_PATH,
|
|
||||||
EnvVars::TIMEZONE,
|
|
||||||
EnvVars::VISITS_WEBHOOKS,
|
|
||||||
EnvVars::NOTIFY_ORPHAN_VISITS_TO_WEBHOOKS,
|
|
||||||
], $list);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @test
|
|
||||||
* @dataProvider provideInvalidEnvVars
|
|
||||||
*/
|
|
||||||
public function exceptionIsThrownWhenTryingToLoadInvalidEnvVar(string $envVar): void
|
|
||||||
{
|
|
||||||
$this->expectException(InvalidArgumentException::class);
|
|
||||||
$this->expectExceptionMessage('Invalid env var: "' . $envVar . '"');
|
|
||||||
|
|
||||||
EnvVars::{$envVar}();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function provideInvalidEnvVars(): iterable
|
|
||||||
{
|
|
||||||
yield 'foo' => ['foo'];
|
|
||||||
yield 'bar' => ['bar'];
|
|
||||||
yield 'invalid' => ['invalid'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,10 +34,10 @@ class EnvVarsTest extends TestCase
|
|||||||
|
|
||||||
public function provideExistingEnvVars(): iterable
|
public function provideExistingEnvVars(): iterable
|
||||||
{
|
{
|
||||||
yield 'DB_NAME' => [EnvVars::DB_NAME(), true];
|
yield 'DB_NAME' => [EnvVars::DB_NAME, true];
|
||||||
yield 'BASE_PATH' => [EnvVars::BASE_PATH(), true];
|
yield 'BASE_PATH' => [EnvVars::BASE_PATH, true];
|
||||||
yield 'DB_DRIVER' => [EnvVars::DB_DRIVER(), false];
|
yield 'DB_DRIVER' => [EnvVars::DB_DRIVER, false];
|
||||||
yield 'DEFAULT_REGULAR_404_REDIRECT' => [EnvVars::DEFAULT_REGULAR_404_REDIRECT(), false];
|
yield 'DEFAULT_REGULAR_404_REDIRECT' => [EnvVars::DEFAULT_REGULAR_404_REDIRECT, false];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -130,11 +51,11 @@ class EnvVarsTest extends TestCase
|
|||||||
|
|
||||||
public function provideEnvVarsValues(): iterable
|
public function provideEnvVarsValues(): iterable
|
||||||
{
|
{
|
||||||
yield 'DB_NAME without default' => [EnvVars::DB_NAME(), 'shlink', null];
|
yield 'DB_NAME without default' => [EnvVars::DB_NAME, 'shlink', null];
|
||||||
yield 'DB_NAME with default' => [EnvVars::DB_NAME(), 'shlink', 'foobar'];
|
yield 'DB_NAME with default' => [EnvVars::DB_NAME, 'shlink', 'foobar'];
|
||||||
yield 'BASE_PATH without default' => [EnvVars::BASE_PATH(), 'the_base_path', null];
|
yield 'BASE_PATH without default' => [EnvVars::BASE_PATH, 'the_base_path', null];
|
||||||
yield 'BASE_PATH with default' => [EnvVars::BASE_PATH(), 'the_base_path', 'foobar'];
|
yield 'BASE_PATH with default' => [EnvVars::BASE_PATH, 'the_base_path', 'foobar'];
|
||||||
yield 'DB_DRIVER without default' => [EnvVars::DB_DRIVER(), null, null];
|
yield 'DB_DRIVER without default' => [EnvVars::DB_DRIVER, null, null];
|
||||||
yield 'DB_DRIVER with default' => [EnvVars::DB_DRIVER(), 'foobar', 'foobar'];
|
yield 'DB_DRIVER with default' => [EnvVars::DB_DRIVER, 'foobar', 'foobar'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ use Shlinkio\Shlink\Core\ShortUrl\Spec\BelongsToDomain;
|
|||||||
use Shlinkio\Shlink\Core\ShortUrl\Spec\BelongsToDomainInlined;
|
use Shlinkio\Shlink\Core\ShortUrl\Spec\BelongsToDomainInlined;
|
||||||
use Shlinkio\Shlink\Rest\Entity\ApiKeyRole;
|
use Shlinkio\Shlink\Rest\Entity\ApiKeyRole;
|
||||||
|
|
||||||
|
// TODO Convert to enum
|
||||||
class Role
|
class Role
|
||||||
{
|
{
|
||||||
public const AUTHORED_SHORT_URLS = 'AUTHORED_SHORT_URLS';
|
public const AUTHORED_SHORT_URLS = 'AUTHORED_SHORT_URLS';
|
||||||
|
|||||||
Reference in New Issue
Block a user