From 4ee0032c2aa7bf8a67baea7b516a09154b493a54 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Mon, 23 Jan 2023 20:30:12 +0100 Subject: [PATCH] Deprecated validateUrl option on short URL creation/edition --- CHANGELOG.md | 3 ++- docs/swagger/definitions/ShortUrlEdition.json | 3 ++- docs/swagger/paths/v1_short-urls.json | 4 ---- module/CLI/src/Command/ShortUrl/CreateShortUrlCommand.php | 2 +- .../src/ShortUrl/Helper/ShortUrlTitleResolutionHelper.php | 2 ++ .../Helper/ShortUrlTitleResolutionHelperInterface.php | 1 + .../src/ShortUrl/Helper/TitleResolutionModelInterface.php | 1 + module/Core/src/ShortUrl/Model/ShortUrlCreation.php | 2 ++ module/Core/src/ShortUrl/Model/ShortUrlEdition.php | 2 ++ .../src/ShortUrl/Model/Validation/ShortUrlInputFilter.php | 1 + module/Core/src/Util/UrlValidator.php | 6 ++++++ module/Core/src/Util/UrlValidatorInterface.php | 3 +++ 12 files changed, 23 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58031200..5384703e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this * *Nothing* ### Deprecated -* [#1676](https://github.com/shlinkio/shlink/issues/1676) Deprecated `GET /short-urls/shorten` endpoint. Use `POST /short-urls` to create short URLs instead +* [#1676](https://github.com/shlinkio/shlink/issues/1676) Deprecated `GET /short-urls/shorten` endpoint. Use `POST /short-urls` to create short URLs instead. +* [#1678](https://github.com/shlinkio/shlink/issues/1678) Deprecated `validateUrl` option on URL creation/edition. ### Removed * *Nothing* diff --git a/docs/swagger/definitions/ShortUrlEdition.json b/docs/swagger/definitions/ShortUrlEdition.json index 28fa71bc..ed3c3929 100644 --- a/docs/swagger/definitions/ShortUrlEdition.json +++ b/docs/swagger/definitions/ShortUrlEdition.json @@ -24,7 +24,8 @@ "nullable": true }, "validateUrl": { - "description": "Tells if the long URL (if provided) should or should not be validated as a reachable URL. If not provided, it will fall back to app-level config", + "deprecated": true, + "description": "**[DEPRECATED]** Tells if the long URL should or should not be validated as a reachable URL. Defaults to `false`", "type": "boolean" }, "tags": { diff --git a/docs/swagger/paths/v1_short-urls.json b/docs/swagger/paths/v1_short-urls.json index 76d87659..c226046f 100644 --- a/docs/swagger/paths/v1_short-urls.json +++ b/docs/swagger/paths/v1_short-urls.json @@ -314,10 +314,6 @@ "shortCodeLength": { "description": "The length for generated short code. It has to be at least 4 and defaults to 5. It will be ignored when customSlug is provided", "type": "number" - }, - "validateUrl": { - "description": "Tells if the long URL should or should not be validated as a reachable URL. If not provided, it will fall back to app-level config", - "type": "boolean" } } } diff --git a/module/CLI/src/Command/ShortUrl/CreateShortUrlCommand.php b/module/CLI/src/Command/ShortUrl/CreateShortUrlCommand.php index f4cfc58a..71ab5fa7 100644 --- a/module/CLI/src/Command/ShortUrl/CreateShortUrlCommand.php +++ b/module/CLI/src/Command/ShortUrl/CreateShortUrlCommand.php @@ -103,7 +103,7 @@ class CreateShortUrlCommand extends Command 'validate-url', null, InputOption::VALUE_NONE, - 'Forces the long URL to be validated, regardless what is globally configured.', + '[DEPRECATED] Makes the URL to be validated as publicly accessible.', ) ->addOption( 'crawlable', diff --git a/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelper.php b/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelper.php index a4920cdd..71963437 100644 --- a/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelper.php +++ b/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelper.php @@ -14,6 +14,8 @@ class ShortUrlTitleResolutionHelper implements ShortUrlTitleResolutionHelperInte } /** + * @deprecated TODO Rename to processTitle once URL validation is removed with Shlink 4.0.0 + * Move relevant logic from URL validator here. * @template T of TitleResolutionModelInterface * @param T $data * @return T diff --git a/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelperInterface.php b/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelperInterface.php index 6989140a..1861b451 100644 --- a/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelperInterface.php +++ b/module/Core/src/ShortUrl/Helper/ShortUrlTitleResolutionHelperInterface.php @@ -9,6 +9,7 @@ use Shlinkio\Shlink\Core\Exception\InvalidUrlException; interface ShortUrlTitleResolutionHelperInterface { /** + * @deprecated TODO Rename to processTitle once URL validation is removed with Shlink 4.0.0 * @template T of TitleResolutionModelInterface * @param T $data * @return T diff --git a/module/Core/src/ShortUrl/Helper/TitleResolutionModelInterface.php b/module/Core/src/ShortUrl/Helper/TitleResolutionModelInterface.php index 1c834331..4c56bfc1 100644 --- a/module/Core/src/ShortUrl/Helper/TitleResolutionModelInterface.php +++ b/module/Core/src/ShortUrl/Helper/TitleResolutionModelInterface.php @@ -10,6 +10,7 @@ interface TitleResolutionModelInterface public function getLongUrl(): string; + /** @deprecated */ public function doValidateUrl(): bool; public function withResolvedTitle(string $title): static; diff --git a/module/Core/src/ShortUrl/Model/ShortUrlCreation.php b/module/Core/src/ShortUrl/Model/ShortUrlCreation.php index d5078f7b..c29817b6 100644 --- a/module/Core/src/ShortUrl/Model/ShortUrlCreation.php +++ b/module/Core/src/ShortUrl/Model/ShortUrlCreation.php @@ -33,6 +33,7 @@ final class ShortUrlCreation implements TitleResolutionModelInterface public readonly bool $findIfExists = false, public readonly ?string $domain = null, public readonly int $shortCodeLength = 5, + /** @deprecated */ public readonly bool $validateUrl = false, public readonly ?ApiKey $apiKey = null, public readonly array $tags = [], @@ -131,6 +132,7 @@ final class ShortUrlCreation implements TitleResolutionModelInterface return $this->domain !== null; } + /** @deprecated */ public function doValidateUrl(): bool { return $this->validateUrl; diff --git a/module/Core/src/ShortUrl/Model/ShortUrlEdition.php b/module/Core/src/ShortUrl/Model/ShortUrlEdition.php index 6bc157c7..fe92fae8 100644 --- a/module/Core/src/ShortUrl/Model/ShortUrlEdition.php +++ b/module/Core/src/ShortUrl/Model/ShortUrlEdition.php @@ -38,6 +38,7 @@ final class ShortUrlEdition implements TitleResolutionModelInterface private readonly bool $titlePropWasProvided = false, public readonly ?string $title = null, public readonly bool $titleWasAutoResolved = false, + /** @deprecated */ public readonly bool $validateUrl = false, private readonly bool $crawlablePropWasProvided = false, public readonly bool $crawlable = false, @@ -154,6 +155,7 @@ final class ShortUrlEdition implements TitleResolutionModelInterface return $this->titleWasAutoResolved; } + /** @deprecated */ public function doValidateUrl(): bool { return $this->validateUrl; diff --git a/module/Core/src/ShortUrl/Model/Validation/ShortUrlInputFilter.php b/module/Core/src/ShortUrl/Model/Validation/ShortUrlInputFilter.php index 4a0e2d7b..68b87158 100644 --- a/module/Core/src/ShortUrl/Model/Validation/ShortUrlInputFilter.php +++ b/module/Core/src/ShortUrl/Model/Validation/ShortUrlInputFilter.php @@ -32,6 +32,7 @@ class ShortUrlInputFilter extends InputFilter public const SHORT_CODE_LENGTH = 'shortCodeLength'; public const LONG_URL = 'longUrl'; public const DEVICE_LONG_URLS = 'deviceLongUrls'; + /** @deprecated */ public const VALIDATE_URL = 'validateUrl'; public const API_KEY = 'apiKey'; public const TAGS = 'tags'; diff --git a/module/Core/src/Util/UrlValidator.php b/module/Core/src/Util/UrlValidator.php index 8a7d0b89..762fdd9f 100644 --- a/module/Core/src/Util/UrlValidator.php +++ b/module/Core/src/Util/UrlValidator.php @@ -22,6 +22,7 @@ use function trim; use const Shlinkio\Shlink\TITLE_TAG_VALUE; +/** @deprecated */ class UrlValidator implements UrlValidatorInterface, RequestMethodInterface { private const MAX_REDIRECTS = 15; @@ -33,6 +34,7 @@ class UrlValidator implements UrlValidatorInterface, RequestMethodInterface } /** + * @deprecated * @throws InvalidUrlException */ public function validateUrl(string $url, bool $doValidate): void @@ -44,6 +46,10 @@ class UrlValidator implements UrlValidatorInterface, RequestMethodInterface $this->validateUrlAndGetResponse($url); } + /** + * @deprecated + * @throws InvalidUrlException + */ public function validateUrlWithTitle(string $url, bool $doValidate): ?string { if (! $doValidate && ! $this->options->autoResolveTitles) { diff --git a/module/Core/src/Util/UrlValidatorInterface.php b/module/Core/src/Util/UrlValidatorInterface.php index 299bd22a..cb38dc42 100644 --- a/module/Core/src/Util/UrlValidatorInterface.php +++ b/module/Core/src/Util/UrlValidatorInterface.php @@ -6,14 +6,17 @@ namespace Shlinkio\Shlink\Core\Util; use Shlinkio\Shlink\Core\Exception\InvalidUrlException; +/** @deprecated */ interface UrlValidatorInterface { /** + * @deprecated * @throws InvalidUrlException */ public function validateUrl(string $url, bool $doValidate): void; /** + * @deprecated * @throws InvalidUrlException */ public function validateUrlWithTitle(string $url, bool $doValidate): ?string;