Browse Source

Merge pull request #3633 from chrisi51/autolink-settings

Added autolinking settings in admin backend - tbc
Lauri Ojansivu 4 years ago
parent
commit
0ccdbdcbe9

+ 4 - 0
client/components/settings/settingBody.jade

@@ -211,6 +211,10 @@ template(name='layoutSettings')
       .title {{_ 'custom-top-left-corner-logo-height'}}
       .form-group
         input.wekan-form-control#custom-top-left-corner-logo-height(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoHeight}}")
+    li.layout-form
+      .title {{_ 'automatic-linked-url-schemes'}}
+      .form-group
+        textarea#automatic-linked-url-schemes.wekan-form-control= currentSetting.automaticLinkedUrlSchemes
     li
       button.js-save-layout.primary {{_ 'save'}}
 

+ 4 - 0
client/components/settings/settingBody.js

@@ -176,6 +176,9 @@ BlazeComponent.extendComponent({
     const textBelowCustomLoginLogo = $('#text-below-custom-login-logo')
       .val()
       .trim();
+    const automaticLinkedUrlSchemes = $('#automatic-linked-url-schemes')
+      .val()
+      .trim();
     const customTopLeftCornerLogoImageUrl = $(
       '#custom-top-left-corner-logo-image-url',
     )
@@ -209,6 +212,7 @@ BlazeComponent.extendComponent({
           customTopLeftCornerLogoHeight,
           displayAuthenticationMethod,
           defaultAuthenticationMethod,
+          automaticLinkedUrlSchemes,
         },
       });
     } catch (e) {

+ 1 - 0
i18n/en.i18n.json

@@ -532,6 +532,7 @@
   "custom-login-logo-image-url": "Custom Login Logo Image URL",
   "custom-login-logo-link-url": "Custom Login Logo Link URL",
   "text-below-custom-login-logo": "Text below Custom Login Logo",
+  "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
   "username": "Username",
   "import-usernames": "Import Usernames",
   "view-it": "View it",

+ 4 - 0
models/settings.js

@@ -62,6 +62,10 @@ Settings.attachSchema(
       type: String,
       optional: true,
     },
+    automaticLinkedUrlSchemes: {
+      type: String,
+      optional: true,
+    },
     customTopLeftCornerLogoImageUrl: {
       type: String,
       optional: true,

+ 28 - 11
packages/markdown/src/template-integration.js

@@ -6,23 +6,40 @@ var Markdown = require('markdown-it')({
   breaks: true,
 });
 
+
+// Static URL Scheme Listing
+var urlschemes = [
+  "aodroplink",
+  "thunderlink",
+  "cbthunderlink",
+  "onenote",
+  "file",
+  "abasurl",
+  "conisio",
+  "mailspring"
+];
+
+// Better would be a field in the admin backend to set this dynamically 
+// instead of putting all known or wanted url schemes here hard into code
+// but i was not able to access those settings
+// var urlschemes = currentSetting.automaticLinkedUrlSchemes.split('\n');
+
+// put all url schemes into the linkify configuration to automatically make it clickable
+for(var i=0; i<urlschemes.length;i++){
+  //console.log("adding autolink for "+urlschemes[i]);
+  Markdown.linkify.add(urlschemes[i]+":",'http:');
+}
+
 // Additional  safeAttrValue function to allow for other specific protocols
 // See https://github.com/leizongmin/js-xss/issues/52#issuecomment-241354114
 function mySafeAttrValue(tag, name, value, cssFilter) {
   // only when the tag is 'a' and attribute is 'href'
   // then use your custom function
   if (tag === 'a' && name === 'href') {
-    // only filter the value if starts with 'cbthunderlink:' or 'aodroplink'
-    if (/^thunderlink:/ig.test(value) ||
-        /^cbthunderlink:/ig.test(value) ||
-        /^aodroplink:/ig.test(value) ||
-        /^onenote:/ig.test(value) ||
-        /^file:/ig.test(value) ||
-        /^abasurl:/ig.test(value) ||
-        /^conisio:/ig.test(value) ||
-        /^mailspring:/ig.test(value)) {
-      return value;
-    }
+    // only filter the value if starts with an registered url scheme
+    urlscheme = value.split(/:\/\//);
+    //console.log("validating "+urlscheme[0]);
+    if(urlschemes.includes(urlscheme[0])) return value;
     else {
       // use the default safeAttrValue function to process all non cbthunderlinks
       return sanitizeXss.safeAttrValue(tag, name, value, cssFilter);

+ 1 - 0
server/publications/settings.js

@@ -15,6 +15,7 @@ Meteor.publish('setting', () => {
         customLoginLogoImageUrl: 1,
         customLoginLogoLinkUrl: 1,
         textBelowCustomLoginLogo: 1,
+        automaticLinkedUrlSchemes: 1,
         customTopLeftCornerLogoImageUrl: 1,
         customTopLeftCornerLogoLinkUrl: 1,
         customTopLeftCornerLogoHeight: 1,