From a4208a4bf68dca7b276ace41c49241ab487e64d5 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Tue, 2 Aug 2022 08:38:10 +0530 Subject: [PATCH] fix: exclude emails from URL gen --- src/Defaults/index.ts | 1 + src/Utils/messages.ts | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Defaults/index.ts b/src/Defaults/index.ts index b46a079..ad79449 100644 --- a/src/Defaults/index.ts +++ b/src/Defaults/index.ts @@ -20,6 +20,7 @@ export const NOISE_WA_HEADER = Buffer.from( ) // last is "DICT_VERSION" /** from: https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url */ export const URL_REGEX = /[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)?/gi +export const URL_EXCLUDE_REGEX = /.*@.*/ export const WA_CERT_DETAILS = { SERIAL: 0, diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index f897c53..cd32bfe 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -3,7 +3,7 @@ import axios from 'axios' import { promises as fs } from 'fs' import { Logger } from 'pino' import { proto } from '../../WAProto' -import { MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults' +import { MEDIA_KEYS, URL_EXCLUDE_REGEX, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults' import { AnyMediaMessageContent, AnyMessageContent, @@ -57,11 +57,20 @@ const MessageTypeProto = { const ButtonType = proto.Message.ButtonsMessage.HeaderType +/** + * Uses a regex to test whether the string contains a URL, and returns the URL if it does. + * @param text eg. hello https://google.com + * @returns the URL, eg. https://google.com + */ +export const extractUrlFromText = (text: string) => ( + !URL_EXCLUDE_REGEX.test(text) ? text.match(URL_REGEX)?.[0] : undefined +) + export const generateLinkPreviewIfRequired = async(text: string, getUrlInfo: MessageGenerationOptions['getUrlInfo'], logger: MessageGenerationOptions['logger']) => { - const matchedUrls = text.match(URL_REGEX) - if(!!getUrlInfo && matchedUrls) { + const url = extractUrlFromText(text) + if(!!getUrlInfo && url) { try { - const urlInfo = await getUrlInfo(matchedUrls[0]) + const urlInfo = await getUrlInfo(url) return urlInfo } catch(error) { // ignore if fails logger?.warn({ trace: error.stack }, 'url generation failed')