change email validation to regex only

This commit is contained in:
Julian Krauser 2025-05-01 17:36:48 +02:00
parent 753cfdd5da
commit 0ea780dd51
4 changed files with 37 additions and 52 deletions

56
package-lock.json generated
View file

@ -12,7 +12,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"crypto": "^1.0.1", "crypto": "^1.0.1",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"email-check": "^1.1.0",
"express": "^5.1.0", "express": "^5.1.0",
"express-rate-limit": "^7.5.0", "express-rate-limit": "^7.5.0",
"express-validator": "^7.2.1", "express-validator": "^7.2.1",
@ -42,11 +41,11 @@
"speakeasy": "^2.0.0", "speakeasy": "^2.0.0",
"sqlite3": "^5.1.7", "sqlite3": "^5.1.7",
"typeorm": "^0.3.20", "typeorm": "^0.3.20",
"uuid": "^11.1.0" "uuid": "^11.1.0",
"validator": "^13.15.0"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.14", "@types/cors": "^2.8.14",
"@types/email-check": "^1.1.3",
"@types/express": "^5.0.1", "@types/express": "^5.0.1",
"@types/ip": "^1.1.3", "@types/ip": "^1.1.3",
"@types/jsonwebtoken": "^9.0.6", "@types/jsonwebtoken": "^9.0.6",
@ -63,6 +62,7 @@
"@types/qrcode": "~1.5.5", "@types/qrcode": "~1.5.5",
"@types/speakeasy": "^2.0.10", "@types/speakeasy": "^2.0.10",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"@types/validator": "^13.15.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
@ -808,13 +808,6 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/email-check": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@types/email-check/-/email-check-1.1.3.tgz",
"integrity": "sha512-XgU2uxm8JjfK9e/CJg389b96XeLxJbUSCfe4hZxxwTu3XYT7A70punAWfpdppFHWPDl/qNtHC9vl3TmRHom+8w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/express": { "node_modules/@types/express": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz",
@ -1106,6 +1099,13 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/validator": {
"version": "13.15.0",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.0.tgz",
"integrity": "sha512-nh7nrWhLr6CBq9ldtw0wx+z9wKnnv/uTVLA9g/3/TcOYxbpOSZE+MhKPmWqU+K0NvThjhv12uD8MuqijB0WzEA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/yauzl": { "node_modules/@types/yauzl": {
"version": "2.10.3", "version": "2.10.3",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
@ -2176,18 +2176,6 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/email-check": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/email-check/-/email-check-1.1.0.tgz",
"integrity": "sha512-VoqdsHtP/Ct+Dsl9nJRlvVXhcHicWjmmp2KvLbyg+WovdUXihe8EbDKC5u+3SlBQIlh8RK1qFD5A4RCgTrW9Wg==",
"license": "MIT",
"dependencies": {
"js-promisify": "1.0.1"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@ -2551,6 +2539,15 @@
"node": ">= 8.0.0" "node": ">= 8.0.0"
} }
}, },
"node_modules/express-validator/node_modules/validator": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
"integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/extract-zip": { "node_modules/extract-zip": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@ -3164,15 +3161,6 @@
"@pkgjs/parseargs": "^0.11.0" "@pkgjs/parseargs": "^0.11.0"
} }
}, },
"node_modules/js-promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/js-promisify/-/js-promisify-1.0.1.tgz",
"integrity": "sha512-/IBrGxYbrmRWA+rLtHVSiX7R92NuVqc84aSWXReEjwcj7NchYf+Wy/ShAapCmMM5ev0mvD2IhWmZIDk/7f/utQ==",
"license": "MIT",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -6032,9 +6020,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/validator": { "node_modules/validator": {
"version": "13.12.0", "version": "13.15.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz",
"integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 0.10" "node": ">= 0.10"

View file

@ -28,7 +28,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"crypto": "^1.0.1", "crypto": "^1.0.1",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"email-check": "^1.1.0",
"express": "^5.1.0", "express": "^5.1.0",
"express-rate-limit": "^7.5.0", "express-rate-limit": "^7.5.0",
"express-validator": "^7.2.1", "express-validator": "^7.2.1",
@ -58,11 +57,11 @@
"speakeasy": "^2.0.0", "speakeasy": "^2.0.0",
"sqlite3": "^5.1.7", "sqlite3": "^5.1.7",
"typeorm": "^0.3.20", "typeorm": "^0.3.20",
"uuid": "^11.1.0" "uuid": "^11.1.0",
"validator": "^13.15.0"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.14", "@types/cors": "^2.8.14",
"@types/email-check": "^1.1.3",
"@types/express": "^5.0.1", "@types/express": "^5.0.1",
"@types/ip": "^1.1.3", "@types/ip": "^1.1.3",
"@types/jsonwebtoken": "^9.0.6", "@types/jsonwebtoken": "^9.0.6",
@ -79,6 +78,7 @@
"@types/qrcode": "~1.5.5", "@types/qrcode": "~1.5.5",
"@types/speakeasy": "^2.0.10", "@types/speakeasy": "^2.0.10",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"@types/validator": "^13.15.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }

View file

@ -1,7 +1,7 @@
import { Transporter, createTransport, TransportOptions } from "nodemailer"; import { Transporter, createTransport, TransportOptions } from "nodemailer";
import { Attachment } from "nodemailer/lib/mailer"; import { Attachment } from "nodemailer/lib/mailer";
import SettingHelper from "./settingsHelper"; import SettingHelper from "./settingsHelper";
import emailCheck from "email-check"; import validator from "validator";
export default abstract class MailHelper { export default abstract class MailHelper {
private static transporter: Transporter; private static transporter: Transporter;
@ -45,7 +45,8 @@ export default abstract class MailHelper {
.then(() => { .then(() => {
return true; return true;
}) })
.catch(() => { .catch((err) => {
console.log(err);
return false; return false;
}) })
.finally(() => { .finally(() => {
@ -56,13 +57,14 @@ export default abstract class MailHelper {
} }
static async checkMail(mail: string): Promise<boolean> { static async checkMail(mail: string): Promise<boolean> {
return await emailCheck(mail) return validator.isEmail(mail);
.then((res) => { // return await emailCheck(mail)
return res; // .then((res) => {
}) // return res;
.catch((err) => { // })
return false; // .catch((err) => {
}); // return false;
// });
} }
static initialize() { static initialize() {

View file

@ -56,17 +56,12 @@ export default abstract class SettingHelper {
return rawValue as unknown as SettingValueMapping[K]; return rawValue as unknown as SettingValueMapping[K];
} }
let processedValue = rawValue;
if (typeof settingType.type === "string" && settingType.type.includes("/crypt")) {
processedValue = CodingHelper.decrypt(APPLICATION_SECRET, processedValue);
}
const baseType = const baseType =
typeof settingType.type === "string" typeof settingType.type === "string"
? (settingType.type.split("/")[0] as SettingTypeAtom) ? (settingType.type.split("/")[0] as SettingTypeAtom)
: (settingType.type as SettingTypeAtom); : (settingType.type as SettingTypeAtom);
return this.converters[baseType].fromString(processedValue) as unknown as SettingValueMapping[K]; return this.converters[baseType].fromString(rawValue) as unknown as SettingValueMapping[K];
} }
/** /**