From 0b60442e97dcf8a785bb4f4cd5d860f7f3d06ce9 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Sat, 19 Jan 2019 17:38:46 -0200 Subject: [PATCH] Improve the way the app detail screen shows support emails (#13129) --- .../client/admin/appManage.html | 6 ++++- .../rocketchat-apps/client/admin/appManage.js | 2 ++ .../client/views/mailMessagesInstructions.js | 26 +------------------ packages/rocketchat-utils/client/index.js | 2 ++ packages/rocketchat-utils/lib/isEmail.js | 23 ++++++++++++++++ 5 files changed, 33 insertions(+), 26 deletions(-) create mode 100644 packages/rocketchat-utils/lib/isEmail.js diff --git a/packages/rocketchat-apps/client/admin/appManage.html b/packages/rocketchat-apps/client/admin/appManage.html index c4cd79c91e4..0b08aff6667 100644 --- a/packages/rocketchat-apps/client/admin/appManage.html +++ b/packages/rocketchat-apps/client/admin/appManage.html @@ -74,7 +74,11 @@
{{#if author.support}}

{{_ "Support"}}

- {{author.support}} + {{#if isEmail author.support}} + {{author.support}} + {{else}} + {{author.support}} + {{/if}} {{/if}}
diff --git a/packages/rocketchat-apps/client/admin/appManage.js b/packages/rocketchat-apps/client/admin/appManage.js index f47ec13b217..986cd135d9c 100644 --- a/packages/rocketchat-apps/client/admin/appManage.js +++ b/packages/rocketchat-apps/client/admin/appManage.js @@ -4,6 +4,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/tap:i18n'; import { TAPi18next } from 'meteor/tap:i18n'; +import { isEmail } from 'meteor/rocketchat:utils'; import _ from 'underscore'; import s from 'underscore.string'; import toastr from 'toastr'; @@ -127,6 +128,7 @@ Template.apps.onDestroyed(function() { }); Template.appManage.helpers({ + isEmail, _(key, ...args) { const options = (args.pop()).hash; if (!_.isEmpty(args)) { diff --git a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js index 83ae7802056..a21bc68db68 100644 --- a/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js +++ b/packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js @@ -6,35 +6,11 @@ import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; import { RocketChat, handleError } from 'meteor/rocketchat:lib'; import { ChatRoom } from 'meteor/rocketchat:ui'; -import { t } from 'meteor/rocketchat:utils'; +import { t, isEmail } from 'meteor/rocketchat:utils'; import { Deps } from 'meteor/deps'; import toastr from 'toastr'; import resetSelection from '../resetSelection'; -/* - * Code from https://github.com/dleitee/valid.js - * Checks for email - * @params email - * @return boolean - */ -const isEmail = (email) => { - const sQtext = '[^\\x0d\\x22\\x5c]'; - const sDtext = '[^\\x0d\\x5b-\\x5d]'; - const sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d]+'; - const sQuotedPair = '\\x5c[\\x00-\\x7f]'; - const sDomainLiteral = `\\x5b(${ sDtext }|${ sQuotedPair })*\\x5d`; - const sQuotedString = `\\x22(${ sQtext }|${ sQuotedPair })*\\x22`; - const sDomainRef = sAtom; - const sSubDomain = `(${ sDomainRef }|${ sDomainLiteral })`; - const sWord = `(${ sAtom }|${ sQuotedString })`; - const sDomain = `${ sSubDomain }(\\x2e${ sSubDomain })*`; - const sLocalPart = `${ sWord }(\\x2e${ sWord })*`; - const sAddrSpec = `${ sLocalPart }\\x40${ sDomain }`; - const sValidEmail = `^${ sAddrSpec }$`; - const reg = new RegExp(sValidEmail); - return reg.test(email); -}; - const filterNames = (old) => { const reg = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`); return [...old.replace(' ', '').toLocaleLowerCase()].filter((f) => reg.test(f)).join(''); diff --git a/packages/rocketchat-utils/client/index.js b/packages/rocketchat-utils/client/index.js index a18cac241a9..46e4fcde870 100644 --- a/packages/rocketchat-utils/client/index.js +++ b/packages/rocketchat-utils/client/index.js @@ -2,6 +2,7 @@ import { t, isRtl } from '../lib/tapi18n'; import { isChrome, isFirefox } from './lib/browsers'; import { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref'; import { Info } from '../rocketchat.info'; +import { isEmail } from '../lib/isEmail'; import { handleError } from './lib/handleError'; import { getUserPreference } from '../lib/getUserPreference'; import { fileUploadMediaWhiteList, fileUploadIsValidContentType } from '../lib/fileUploadRestrictions'; @@ -19,6 +20,7 @@ export { isFirefox, getDefaultSubscriptionPref, Info, + isEmail, handleError, getUserPreference, fileUploadIsValidContentType, diff --git a/packages/rocketchat-utils/lib/isEmail.js b/packages/rocketchat-utils/lib/isEmail.js new file mode 100644 index 00000000000..1927b879a89 --- /dev/null +++ b/packages/rocketchat-utils/lib/isEmail.js @@ -0,0 +1,23 @@ +/* + * Code from https://github.com/dleitee/valid.js + * Checks for email + * @params email + * @return boolean + */ +export const isEmail = (email) => { + const sQtext = '[^\\x0d\\x22\\x5c]'; + const sDtext = '[^\\x0d\\x5b-\\x5d]'; + const sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d]+'; + const sQuotedPair = '\\x5c[\\x00-\\x7f]'; + const sDomainLiteral = `\\x5b(${ sDtext }|${ sQuotedPair })*\\x5d`; + const sQuotedString = `\\x22(${ sQtext }|${ sQuotedPair })*\\x22`; + const sDomainRef = sAtom; + const sSubDomain = `(${ sDomainRef }|${ sDomainLiteral })`; + const sWord = `(${ sAtom }|${ sQuotedString })`; + const sDomain = `${ sSubDomain }(\\x2e${ sSubDomain })*`; + const sLocalPart = `${ sWord }(\\x2e${ sWord })*`; + const sAddrSpec = `${ sLocalPart }\\x40${ sDomain }`; + const sValidEmail = `^${ sAddrSpec }$`; + const reg = new RegExp(sValidEmail); + return reg.test(email); +};