diff --git a/graphql-schemas/detailedtournament.js b/graphql-schemas/detailedtournament.js index 466aacefb..999b21415 100644 --- a/graphql-schemas/detailedtournament.js +++ b/graphql-schemas/detailedtournament.js @@ -308,7 +308,12 @@ const resolvers = { }, searchForDraftCup: async (_, args) => { const tournament = await DetailedTournament.findOne({ - name: { $regex: new RegExp(args.name, "i") }, + name: { + $regex: new RegExp( + args.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), + }, }).populate("top_3_discord_users") if (!tournament) throw new UserInputError("no draft cup with that name") diff --git a/graphql-schemas/placement.js b/graphql-schemas/placement.js index ba9bf5f66..e1c5edfaa 100644 --- a/graphql-schemas/placement.js +++ b/graphql-schemas/placement.js @@ -48,7 +48,7 @@ const resolvers = { const placements = await Placement.find({ weapon: args.weapon }) .sort({ x_power: "desc" }) .select({ weapon: 0 }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -85,7 +85,7 @@ const resolvers = { throw new UserInputError("no id or twitter provided", { invalidArgs: args, }) - const player = await Player.findOne(searchCriteria).catch(e => { + const player = await Player.findOne(searchCriteria).catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -97,7 +97,7 @@ const resolvers = { const placements = await Placement.find({ unique_id: player.unique_id }) .sort({ year: "desc", month: "desc" }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -112,19 +112,24 @@ const resolvers = { .sort({ x_power: "desc" }) .limit(100) .select({ name: 1, weapon: 1, x_power: 1, unique_id: 1 }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) }) } else { placements = await Placement.find({ - name: { $regex: args.name, $options: "i" }, + name: { + $regex: new RegExp( + args.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), + }, }) .sort({ x_power: "desc" }) .limit(100) .select({ name: 1, weapon: 1, x_power: 1, unique_id: 1 }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -133,7 +138,7 @@ const resolvers = { let uids = [] - return placements.filter(p => { + return placements.filter((p) => { if (uids.length === 21) { return false } @@ -151,7 +156,12 @@ const resolvers = { const searchCriteria = {} if (args.name) - searchCriteria.name = { $regex: new RegExp(args.name, "i") } + searchCriteria.name = { + $regex: new RegExp( + args.name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), + } if (args.weapon) searchCriteria.weapon = args.weapon if (args.mode) searchCriteria.mode = args.mode if (args.unique_id) searchCriteria.unique_id = args.unique_id @@ -160,7 +170,7 @@ const resolvers = { const placementCount = await Placement.countDocuments( searchCriteria - ).catch(e => { + ).catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -180,7 +190,7 @@ const resolvers = { .limit(perPage) .sort({ x_power: "desc" }) .populate("player") - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) diff --git a/graphql-schemas/tournament.js b/graphql-schemas/tournament.js index e7b3e3689..a9d5efbac 100644 --- a/graphql-schemas/tournament.js +++ b/graphql-schemas/tournament.js @@ -81,13 +81,13 @@ const resolvers = { if (!args.id.match(/^[0-9a-fA-F]{24}$/)) return null const rounds = await Round.find({ tournament_id: args.id }) .sort({ round_number: "asc", game_number: "asc" }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) }) - const tournament = await Tournament.findById(args.id).catch(e => { + const tournament = await Tournament.findById(args.id).catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -99,7 +99,8 @@ const resolvers = { }, searchForTournaments: async (root, args) => { Object.keys(args).forEach( - key => (args[key] == null || args[key].length === 0) && delete args[key] + (key) => + (args[key] == null || args[key].length === 0) && delete args[key] ) const tournamentsPerPage = 18 @@ -112,14 +113,18 @@ const resolvers = { if (args.team_name) { roundSearchCriteria.$or.push({ winning_team_name: { - $regex: args.team_name, - $options: "i", + $regex: new RegExp( + args.team_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) roundSearchCriteria.$or.push({ losing_team_name: { - $regex: args.team_name, - $options: "i", + $regex: new RegExp( + args.team_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) } @@ -127,14 +132,18 @@ const resolvers = { if (args.player_name) { roundSearchCriteria.$or.push({ winning_team_players: { - $regex: args.player_name, - $options: "i", + $regex: new RegExp( + args.player_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) roundSearchCriteria.$or.push({ losing_team_players: { - $regex: args.player_name, - $options: "i", + $regex: new RegExp( + args.player_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) } @@ -142,14 +151,18 @@ const resolvers = { if (args.unique_id) { roundSearchCriteria.$or.push({ winning_team_unique_ids: { - $regex: args.unique_id, - $options: "i", + $regex: new RegExp( + args.unique_id.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) roundSearchCriteria.$or.push({ losing_team_unique_ids: { - $regex: args.unique_id, - $options: "i", + $regex: new RegExp( + args.unique_id.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), }, }) } @@ -206,13 +219,15 @@ const resolvers = { if (args.tournament_name) tournamentSearchCriteria.name = { - $regex: args.tournament_name, - $options: "i", + $regex: new RegExp( + args.tournament_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), + "i" + ), } const tournamentCount = await Tournament.countDocuments( tournamentSearchCriteria - ).catch(e => { + ).catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, }) @@ -231,7 +246,7 @@ const resolvers = { .skip(tournamentsPerPage * currentPage) .limit(tournamentsPerPage) .sort({ date: "desc" }) - .catch(e => { + .catch((e) => { throw new UserInputError(e.message, { invalidArgs: args, })