Add support for additional protocols in Link field definition

Created on 29 June 2013, over 11 years ago
Updated 3 June 2024, 6 months ago

Problem/Motivation

The link module only validates http and https, but not other scheme names such as git or ftp.

In Drupal 7, the validation can be turned off, thereby allowing the input of other scheme names. D7 sites could use this to use other scheme names, which will then not be valid in D8 any more.

Even better would be a option in the field configuration to set which scheme names are valid for this field.

Proposed resolution

  • Allow custom protocols.
  • Let's do this in a follow-up issue.

Remaining tasks

  1. To be handled in the follow-up issue.
  2. Done.
  3. Done.
  4. Add tests.

User interface changes

A new text field added to the Link field configuration form, empty by default, that accepts a comma-separated list of protocols that will be allowed in addition to the hard-coded ones.

API changes

+++ b/core/lib/Drupal/Component/Utility/UrlHelper.php
@@ -209,11 +209,13 @@ public static function encodePath($path) {
-  public static function isExternal($path) {
+  public static function isExternal($path, $protocol_whitelist = []) {
+++ b/core/lib/Drupal/Component/Utility/UrlHelper.php
@@ -353,8 +357,8 @@ public static function setAllowedProtocols(array $protocols = []) {
-  public static function stripDangerousProtocols($uri) {
+  public static function stripDangerousProtocols($uri, $whitelist = []) {
+++ b/core/lib/Drupal/Core/Utility/UnroutedUrlAssemblerInterface.php
@@ -40,6 +40,8 @@ interface UnroutedUrlAssemblerInterface {
+   *   - 'protocol_whitelist': An explicit whitelist of protocols to be allowed
+   *     in addition to those traditionally allowed. Defaults to an empty array.

This adds a new option to the $options array.

Data model changes

Added to the Link field configuration schema:

+++ b/core/modules/link/config/schema/link.schema.yml
@@ -49,6 +49,9 @@ field.field_settings.link:
+    protocol_whitelist:
+      type: string
+      label: 'Protocol whitelist'
πŸ“Œ Task
Status

Needs work

Version

11.0 πŸ”₯

Component
LinkΒ  β†’

Last updated about 3 hours ago

Created by

πŸ‡³πŸ‡±Netherlands ifrik

Live updates comments and jobs are added and updated live.
  • Needs tests

    The change is currently missing an automated test that fails when run with the original code, and succeeds when the bug has been fixed.

  • Needs issue summary update

    Issue summaries save everyone time if they are kept up-to-date. See Update issue summary task instructions.

  • Needs screenshots

    The change alters the user interface, so before and after screenshots should be added to document the UI change. Make sure to capture the relevant region only. Use a tool such as Aviary on Windows or Skitch on Mac OS X.

Sign in to follow issues

Merge Requests

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.71.5 2024