From e87d594106c956eba73cc1d43dd21dd84b466450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Thu, 23 Aug 2018 17:18:29 +0200 Subject: [PATCH] Custom validator for urls --- app/coffee/app.coffee | 39 +++++++++++++++++++ app/partials/admin/admin-project-modules.jade | 4 +- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index e50a2f8d..8829ef25 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -777,6 +777,45 @@ init = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $na pikaday: (val) -> prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") return moment(val, prettyDate).isValid() + url: (val) -> + re_weburl = new RegExp( + "^" + + # protocol identifier + "(?:(?:https?|ftp)://)" + + # user:pass authentication + "(?:\\S+(?::\\S*)?@)?" + + "(?:" + + # IP address exclusion + # private & local networks + "(?!(?:10|127)(?:\\.\\d{1,3}){3})" + + "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" + + "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" + + # IP address dotted notation octets + # excludes loopback network 0.0.0.0 + # excludes reserved space >= 224.0.0.0 + # excludes network & broacast addresses + # (first & last IP address of each class) + "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + + "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + + "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + + "|" + + # host name + "(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)" + + # domain name + "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*" + + # TLD identifier + "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" + + # TLD may end with dot + "\\.?" + + ")" + + # port number + "(?::\\d{2,5})?" + + # resource path + "(?:[/?#]\\S*)?" + + "$", "i" + ) + return re_weburl.test(val) + } checksley.updateValidators(validators) diff --git a/app/partials/admin/admin-project-modules.jade b/app/partials/admin/admin-project-modules.jade index 037a231e..6065a1d2 100644 --- a/app/partials/admin/admin-project-modules.jade +++ b/app/partials/admin/admin-project-modules.jade @@ -164,11 +164,11 @@ div.wrapper( input( id="videoconference-url" name="videoconference-url" - type="url" + type="text" ng-model="project.videoconferences_extra_data" data-maxlength="250" placeholder="{{'ADMIN.MODULES.URL_CHAT_ROOM' | translate}}" - data-type="url" + data-url data-required="true" ) fieldset.options