Skip to content

Commit 8b76383

Browse files
committed
fix for reported vulnerability on purge endpoints -CVE still being issued
1 parent d1ff193 commit 8b76383

1 file changed

Lines changed: 38 additions & 10 deletions

File tree

backend/routes/api.js

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ const express = require("express");
33

44
const db = require("../db");
55
const dbHelper = require("../classes/db-helper");
6-
7-
const pgp = require("pg-promise")();
86
const { randomUUID } = require("crypto");
97

108
const configClass = require("../classes/config");
@@ -136,10 +134,25 @@ async function purgeLibraryItems(id, withActivity, purgeAll = false) {
136134
await db.query(items_query, [id]);
137135

138136
if (withActivity) {
137+
const whereClauses = [];
138+
const values = [];
139+
140+
if (episodeIds.length > 0) {
141+
values.push(episodeIds);
142+
whereClauses.push(`"EpisodeId" = ANY($${values.length})`);
143+
}
144+
145+
if (seasonIds.length > 0) {
146+
values.push(seasonIds);
147+
whereClauses.push(`"SeasonId" = ANY($${values.length})`);
148+
}
149+
150+
values.push(id);
151+
whereClauses.push(`"NowPlayingItemId" = $${values.length}`);
152+
139153
const deleteQuery = {
140-
text: `DELETE FROM jf_playback_activity WHERE${
141-
episodeIds.length > 0 ? ` "EpisodeId" IN (${pgp.as.csv(episodeIds)}) OR` : ""
142-
}${seasonIds.length > 0 ? ` "SeasonId" IN (${pgp.as.csv(seasonIds)}) OR` : ""} "NowPlayingItemId"='${id}'`,
154+
text: `DELETE FROM jf_playback_activity WHERE ${whereClauses.join(" OR ")}`,
155+
values,
143156
refreshViews: true,
144157
};
145158
await db.query(deleteQuery);
@@ -1123,12 +1136,27 @@ router.delete("/item/purge", async (req, res) => {
11231136
await db.query(`delete from jf_library_items where "Id"=$1`, [id]);
11241137
}
11251138
if (withActivity) {
1139+
const whereClauses = [];
1140+
const values = [];
1141+
const episodeActivityIds = episodes.map((item) => item.EpisodeId);
1142+
const seasonActivityIds = seasons.map((item) => item.Id);
1143+
1144+
if (episodeActivityIds.length > 0) {
1145+
values.push(episodeActivityIds);
1146+
whereClauses.push(`"EpisodeId" = ANY($${values.length})`);
1147+
}
1148+
1149+
if (seasonActivityIds.length > 0) {
1150+
values.push(seasonActivityIds);
1151+
whereClauses.push(`"SeasonId" = ANY($${values.length})`);
1152+
}
1153+
1154+
values.push(id);
1155+
whereClauses.push(`"NowPlayingItemId" = $${values.length}`);
1156+
11261157
const deleteQuery = {
1127-
text: `DELETE FROM jf_playback_activity WHERE${
1128-
episodes.length > 0 ? ` "EpisodeId" IN (${pgp.as.csv(episodes.map((item) => item.EpisodeId))}) OR` : ""
1129-
}${
1130-
seasons.length > 0 ? ` "SeasonId" IN (${pgp.as.csv(seasons.map((item) => item.SeasonId))}) OR` : ""
1131-
} "NowPlayingItemId"='${id}'`,
1158+
text: `DELETE FROM jf_playback_activity WHERE ${whereClauses.join(" OR ")}`,
1159+
values,
11321160
refreshViews: true,
11331161
};
11341162
await db.query(deleteQuery);

0 commit comments

Comments
 (0)