Improve the way the app detail screen shows support emails (#13129)

pull/12981/head
Douglas Gubert 7 years ago committed by Rodrigo Nascimento
parent d25d147d74
commit 0b60442e97
  1. 6
      packages/rocketchat-apps/client/admin/appManage.html
  2. 2
      packages/rocketchat-apps/client/admin/appManage.js
  3. 26
      packages/rocketchat-channel-settings-mail-messages/client/views/mailMessagesInstructions.js
  4. 2
      packages/rocketchat-utils/client/index.js
  5. 23
      packages/rocketchat-utils/lib/isEmail.js

@ -74,7 +74,11 @@
<div class="rc-apps-details__col">
{{#if author.support}}
<h3>{{_ "Support"}}</h3>
<a href="{{author.support}}" target="_blank">{{author.support}}</a>
{{#if isEmail author.support}}
<a href="mailto:{{author.support}}">{{author.support}}</a>
{{else}}
<a href="{{author.support}}" target="_blank">{{author.support}}</a>
{{/if}}
{{/if}}
</div>
</div>

@ -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)) {

@ -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('');

@ -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,

@ -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);
};
Loading…
Cancel
Save