From 934fa937b5ba92131a4261e595635ca03aeb698e Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 12 Apr 2020 20:41:23 +0200 Subject: [PATCH] Updated config parsers for docker image to accept new mercure env vars and configs --- docker/README.md | 20 +++++++++---------- docker/config/shlink_in_docker.local.php | 13 ++++++++++++ .../src/Config/SimplifiedConfigParser.php | 3 +++ .../Config/SimplifiedConfigParserTest.php | 9 +++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/docker/README.md b/docker/README.md index 3240f3d0..7cb4fb54 100644 --- a/docker/README.md +++ b/docker/README.md @@ -121,8 +121,8 @@ If you do that, Shlink will publish updates and other clients can subscribe to t There are three env vars you need to provide if you want to enable this: -* `MERCURE_HUB_PUBLIC_URL`: **[Mandatory]**. The public URL of a mercure hub server to which Shlink will sent updates. This URL will also be served to consumers that want to subscribe to those updates. -* `MERCURE_HUB_INTERNAL_URL`: **[Optional]**. An internal URL for a mercure hub. Will be used only when publishing updates to mercure, and does not need to be public. If this is not provided, the `MERCURE_HUB_PUBLIC_URL` one will be used to publish updates. +* `MERCURE_PUBLIC_HUB_URL`: **[Mandatory]**. The public URL of a mercure hub server to which Shlink will sent updates. This URL will also be served to consumers that want to subscribe to those updates. +* `MERCURE_INTERNAL_HUB_URL`: **[Optional]**. An internal URL for a mercure hub. Will be used only when publishing updates to mercure, and does not need to be public. If this is not provided, the `MERCURE_PUBLIC_HUB_URL` one will be used to publish updates. * `MERCURE_JWT_SECRET`: **[Mandatory]**. The secret key that was provided to the mercure hub server, in order to be able to generate valid JWTs for publishing/subscribing to that server. So in order to run shlink with mercure integration, you would do it like this: @@ -133,8 +133,8 @@ docker run \ -p 8080:8080 \ -e SHORT_DOMAIN_HOST=doma.in \ -e SHORT_DOMAIN_SCHEMA=https \ - -e "MERCURE_HUB_PUBLIC_URL=https://example.com" - -e "MERCURE_HUB_INTERNAL_URL=http://my-mercure-hub.prod.svc.cluster.local" + -e "MERCURE_PUBLIC_HUB_URL=https://example.com" + -e "MERCURE_INTERNAL_HUB_URL=http://my-mercure-hub.prod.svc.cluster.local" -e MERCURE_JWT_SECRET=super_secret_key shlinkio/shlink:stable ``` @@ -169,8 +169,8 @@ This is the complete list of supported env vars: * `VISITS_WEBHOOKS`: A comma-separated list of URLs that will receive a `POST` request when a short URL receives a visit. * `DEFAULT_SHORT_CODES_LENGTH`: The length you want generated short codes to have. It defaults to 5 and has to be at least 4, so any value smaller than that will fall back to 4. * `REDIS_SERVERS`: A comma-separated list of redis servers where Shlink locks are stored (locks are used to prevent some operations to be run more than once in parallel). -* `MERCURE_HUB_PUBLIC_URL`: The public URL of a mercure hub server to which Shlink will sent updates. This URL will also be served to consumers that want to subscribe to those updates. -* `MERCURE_HUB_INTERNAL_URL`: An internal URL for a mercure hub. Will be used only when publishing updates to mercure, and does not need to be public. If this is not provided but `MERCURE_HUB_PUBLIC_URL` was, the former one will be used to publish updates. +* `MERCURE_PUBLIC_HUB_URL`: The public URL of a mercure hub server to which Shlink will sent updates. This URL will also be served to consumers that want to subscribe to those updates. +* `MERCURE_INTERNAL_HUB_URL`: An internal URL for a mercure hub. Will be used only when publishing updates to mercure, and does not need to be public. If this is not provided but `MERCURE_PUBLIC_HUB_URL` was, the former one will be used to publish updates. * `MERCURE_JWT_SECRET`: The secret key that was provided to the mercure hub server, in order to be able to generate valid JWTs for publishing/subscribing to that server. An example using all env vars could look like this: @@ -199,8 +199,8 @@ docker run \ -e TASK_WORKER_NUM=32 \ -e "VISITS_WEBHOOKS=http://my-api.com/api/v2.3/notify,https://third-party.io/foo" \ -e DEFAULT_SHORT_CODES_LENGTH=6 \ - -e "MERCURE_HUB_PUBLIC_URL=https://example.com" - -e "MERCURE_HUB_INTERNAL_URL=http://my-mercure-hub.prod.svc.cluster.local" + -e "MERCURE_PUBLIC_HUB_URL=https://example.com" + -e "MERCURE_INTERNAL_HUB_URL=http://my-mercure-hub.prod.svc.cluster.local" -e MERCURE_JWT_SECRET=super_secret_key shlinkio/shlink:stable ``` @@ -243,8 +243,8 @@ The whole configuration should have this format, but it can be split into multip "host": "something.rds.amazonaws.com", "port": "3306" }, - "mercure_hub_public_url": "https://example.com", - "mercure_hub_internal_url": "http://my-mercure-hub.prod.svc.cluster.local", + "mercure_public_hub_url": "https://example.com", + "mercure_internal_hub_url": "http://my-mercure-hub.prod.svc.cluster.local", "mercure_jwt_secret": "super_secret_key" } ``` diff --git a/docker/config/shlink_in_docker.local.php b/docker/config/shlink_in_docker.local.php index 6cf86434..f1842de2 100644 --- a/docker/config/shlink_in_docker.local.php +++ b/docker/config/shlink_in_docker.local.php @@ -79,6 +79,17 @@ $helper = new class { $value = (int) env('DEFAULT_SHORT_CODES_LENGTH', DEFAULT_SHORT_CODES_LENGTH); return $value < MIN_SHORT_CODES_LENGTH ? MIN_SHORT_CODES_LENGTH : $value; } + + public function getMercureConfig(): array + { + $publicUrl = env('MERCURE_PUBLIC_HUB_URL'); + + return [ + 'public_hub_url' => $publicUrl, + 'internal_hub_url' => env('MERCURE_INTERNAL_HUB_URL', $publicUrl), + 'jwt_secret' => env('MERCURE_JWT_SECRET'), + ]; + } }; return [ @@ -147,4 +158,6 @@ return [ ], ], + 'mercure' => $helper->getMercureConfig(), + ]; diff --git a/module/Core/src/Config/SimplifiedConfigParser.php b/module/Core/src/Config/SimplifiedConfigParser.php index ee29d195..439a931a 100644 --- a/module/Core/src/Config/SimplifiedConfigParser.php +++ b/module/Core/src/Config/SimplifiedConfigParser.php @@ -33,6 +33,9 @@ class SimplifiedConfigParser 'task_worker_num' => ['mezzio-swoole', 'swoole-http-server', 'options', 'task_worker_num'], 'visits_webhooks' => ['url_shortener', 'visits_webhooks'], 'default_short_codes_length' => ['url_shortener', 'default_short_codes_length'], + 'mercure_public_hub_url' => ['mercure', 'public_hub_url'], + 'mercure_internal_hub_url' => ['mercure', 'internal_hub_url'], + 'mercure_jwt_secret' => ['mercure', 'jwt_secret'], ]; private const SIMPLIFIED_CONFIG_SIDE_EFFECTS = [ 'delete_short_url_threshold' => [ diff --git a/module/Core/test/Config/SimplifiedConfigParserTest.php b/module/Core/test/Config/SimplifiedConfigParserTest.php index 02f96423..6eee6737 100644 --- a/module/Core/test/Config/SimplifiedConfigParserTest.php +++ b/module/Core/test/Config/SimplifiedConfigParserTest.php @@ -60,6 +60,9 @@ class SimplifiedConfigParserTest extends TestCase 'https://third-party.io/foo', ], 'default_short_codes_length' => 8, + 'mercure_public_hub_url' => 'public_url', + 'mercure_internal_hub_url' => 'internal_url', + 'mercure_jwt_secret' => 'super_secret_value', ]; $expected = [ 'app_options' => [ @@ -127,6 +130,12 @@ class SimplifiedConfigParserTest extends TestCase ], ], ], + + 'mercure' => [ + 'public_hub_url' => 'public_url', + 'internal_hub_url' => 'internal_url', + 'jwt_secret' => 'super_secret_value', + ], ]; $result = ($this->postProcessor)(array_merge($config, $simplified));