fixed regex

This commit is contained in:
Luke Berndt
2023-07-15 13:08:56 -04:00
parent 2c87bc0d7b
commit 06940e8998
3 changed files with 21 additions and 9 deletions

View File

@@ -12,12 +12,17 @@ If your site prefers to name these fields differently, options are available to
const local = new LocalStrategy({ const local = new LocalStrategy({
usernameField: "email" usernameField: "email"
}, async (email, password, done) => { }, async (email, password, done) => {
// https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex/6969486#6969486
const escapeRegExp = (string) => {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
const user = await User.findOne({ const user = await User.findOne({
$or: [{ $or: [{
email: { '$regex': email, $options: 'i' } email: { '$regex': escapeRegExp(email), $options: 'i' }
}, { }, {
local: { local: {
email: { '$regex': email, $options: 'i' } email: { '$regex': escapeRegExp(email), $options: 'i' }
} }
}] }]
}); });

View File

@@ -15,7 +15,10 @@ const mailjet = new Mailjet({
apiSecret: process.env['MAILJET_SECRET'] apiSecret: process.env['MAILJET_SECRET']
}); });
// https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex/6969486#6969486
const escapeRegExp = (string) => {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
exports.isLoggedIn = function (req, res, next) { exports.isLoggedIn = function (req, res, next) {
if (req.isAuthenticated()) return next(); if (req.isAuthenticated()) return next();
@@ -268,7 +271,7 @@ exports.resetPassword = async function (req, res, next) {
// ------------------------------------------- // -------------------------------------------
exports.sendResetPassword = async function (req, res, next) { exports.sendResetPassword = async function (req, res, next) {
let user = await User.findOne({ let user = await User.findOne({
email: { '$regex': req.body.email, $options: 'i' } email: { '$regex': escapeRegExp(req.body.email), $options: 'i' }
}).catch(err => { }).catch(err => {
console.error(err); console.error(err);
res.status(500); res.status(500);
@@ -552,7 +555,7 @@ exports.updateProfile = async function (req, res, next) {
// Lets make sure someone else isn't using this screenName // Lets make sure someone else isn't using this screenName
screenNameUser = await User.findOne({ screenName: { '$regex': req.body.screenName , $options: 'i' } }).catch(err => { screenNameUser = await User.findOne({ screenName: { '$regex': escapeRegExp(req.body.screenName) , $options: 'i' } }).catch(err => {
console.error(err); console.error(err);
res.status(500); res.status(500);
res.json({ res.json({
@@ -616,10 +619,10 @@ exports.register = async function (req, res, next) {
let user = await User.findOne({ let user = await User.findOne({
$or: [{ $or: [{
email: { '$regex': req.body.email, $options: 'i' } email: { '$regex': escapeRegExp(req.body.email), $options: 'i' }
}, { }, {
local: { local: {
email: { '$regex': req.body.email, $options: 'i' } email: { '$regex': escapeRegExp(req.body.email), $options: 'i' }
} }
}] }]
}).catch(err => { }).catch(err => {

View File

@@ -14,12 +14,16 @@ const User = require("../../models/user");
module.exports = new LocalStrategy({ module.exports = new LocalStrategy({
usernameField: "email" usernameField: "email"
}, (email, password, done) => { }, (email, password, done) => {
// https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex/6969486#6969486
const escapeRegExp = (string) => {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
User.findOne({ User.findOne({
$or: [{ $or: [{
email: { '$regex': email, $options: 'i' } email: { '$regex': escapeRegExp(email), $options: 'i' }
}, { }, {
local: { local: {
email: { '$regex': email, $options: 'i' } email: { '$regex': escapeRegExp(email), $options: 'i' }
} }
}] }]
}, (err, user) => { }, (err, user) => {