diff --git a/api/src/delete/blacklist.ts b/api/src/delete/blacklist.ts index 783d71c..3fe7e58 100644 --- a/api/src/delete/blacklist.ts +++ b/api/src/delete/blacklist.ts @@ -1,66 +1,37 @@ import { FastifyReply, FastifyRequest } from "fastify" -import {runInTransaction } from "../db.js" -import run from "../db.js" +import { runInTransaction } from "../db.js" export default async function blacklistDeleteHandler(req: FastifyRequest, res: FastifyReply) { - const { ecosystem, name, version } = req.params as OSVHandlerParams - if (!name) { - return res.status(400).send({ error: "Missing name parameter." }) - } - - try { - await runInTransaction(async (client) => { - if (version) { - const versionDeleteResult = await client.query( - "DELETE FROM blacklist_versions WHERE name = $1 AND version = $2 RETURNING *;", - [name, version] - ) + const { name } = req.params as { name: string } + if (!name) { + return res.status(400).send({ error: "Missing name parameter." }) + } - if (versionDeleteResult.rowCount === 0) { - throw new Error(`No entry found for name='${name}' and version='${version}'`) - } + try { + await runInTransaction(async (client) => { + await client.query("DELETE FROM blacklist_versions WHERE name = $1;", [name]) + await client.query("DELETE FROM blacklist_ecosystems WHERE name = $1;", [name]) + await client.query("DELETE FROM blacklist_repositories WHERE name = $1;", [name]) + await client.query("DELETE FROM blacklist_comments WHERE name = $1;", [name]) - const remaining = await Promise.all([ - run("SELECT 1 FROM blacklist_versions WHERE name = $1 LIMIT 1;", [name]), - run("SELECT 1 FROM blacklist_ecosystems WHERE name = $1 LIMIT 1;", [name]), - run("SELECT 1 FROM blacklist_repositories WHERE name = $1 LIMIT 1;", [name]), - ]) - - const hasAnyReferences = remaining.some((r) => (r.rowCount ?? 0) > 0) - if (!hasAnyReferences) { - await run("DELETE FROM blacklist WHERE name = $1;", [name]) + const mainDeleteResult = await client.query( + "DELETE FROM blacklist WHERE name = $1 RETURNING *;", + [name] + ) + if (mainDeleteResult.rowCount === 0) { + throw new Error(`No blacklist entry found for name='${name}'.`) + } + return + }) + return res.send({ + message: `All blacklist entries for '${name}' deleted successfully.`, + }) + } catch (error: any) { + if (error.message.includes("No entry found for name")) { + return res.status(404).send({ error: error.message }) } - return - } else { - await client.query("DELETE FROM blacklist_versions WHERE name = $1;", [name]) - await client.query("DELETE FROM blacklist_ecosystems WHERE name = $1;", [name]) - await client.query("DELETE FROM blacklist_repositories WHERE name = $1;", [name]) - const mainDeleteResult = await client.query( - "DELETE FROM blacklist WHERE name = $1 RETURNING *;", - [name] - ) - if (mainDeleteResult.rowCount === 0) { - throw new Error(`No blacklist entry found for name='${name}'.`) - } - return - } - }) - if (version) { - return res.send({ - message: `Blacklist entry '${name}' with version '${version}' deleted successfully.`, - }) - } else { - return res.send({ - message: `All blacklist entries for '${name}' deleted successfully.`, - }) - } - } catch (error: any) { - if (error.message.includes("No entry found for name")) { - return res.status(404).send({ error: error.message }) + console.error("Database error:", error) + return res.status(500).send({ error: "Internal Server Error" }) } - - console.error("Database error:", error) - return res.status(500).send({ error: "Internal Server Error" }) - } } diff --git a/api/src/delete/whitelist.ts b/api/src/delete/whitelist.ts index 8139d2f..6a13275 100644 --- a/api/src/delete/whitelist.ts +++ b/api/src/delete/whitelist.ts @@ -1,66 +1,37 @@ import { FastifyReply, FastifyRequest } from "fastify" -import {runInTransaction } from "../db.js" -import run from "../db.js" +import { runInTransaction } from "../db.js" export default async function whitelistDeleteHandler(req: FastifyRequest, res: FastifyReply) { - const { ecosystem, name, version } = req.params as OSVHandlerParams + const { name } = req.params as { name: string } if (!name) { return res.status(400).send({ error: "Missing name parameter." }) } try { - await runInTransaction(async (client) => { - if (version) { - const versionDeleteResult = await client.query( - "DELETE FROM whitelist_versions WHERE name = $1 AND version = $2 RETURNING *;", - [name, version] - ) + await runInTransaction(async (client) => { + await client.query("DELETE FROM whitelist_versions WHERE name = $1;", [name]) + await client.query("DELETE FROM whitelist_ecosystems WHERE name = $1;", [name]) + await client.query("DELETE FROM whitelist_repositories WHERE name = $1;", [name]) + await client.query("DELETE FROM whitelist_comments WHERE name = $1;", [name]) - if (versionDeleteResult.rowCount === 0) { - throw new Error(`No entry found for name='${name}' and version='${version}'`) - } - - const remaining = await Promise.all([ - run("SELECT 1 FROM whitelist_versions WHERE name = $1 LIMIT 1;", [name]), - run("SELECT 1 FROM whitelist_ecosystems WHERE name = $1 LIMIT 1;", [name]), - run("SELECT 1 FROM whitelist_repositories WHERE name = $1 LIMIT 1;", [name]), - ]) - - const hasAnyReferences = remaining.some((r) => (r.rowCount ?? 0) > 0) - if (!hasAnyReferences) { - await run("DELETE FROM whitelist WHERE name = $1;", [name]) - } - return - } else { - await client.query("DELETE FROM whitelist_versions WHERE name = $1;", [name]) - await client.query("DELETE FROM whitelist_ecosystems WHERE name = $1;", [name]) - await client.query("DELETE FROM whitelist_repositories WHERE name = $1;", [name]) - - const mainDeleteResult = await client.query( - "DELETE FROM whitelist WHERE name = $1 RETURNING *;", - [name] - ) - if (mainDeleteResult.rowCount === 0) { - throw new Error(`No whitelist entry found for name='${name}'.`) - } - return - } - }) - if (version) { - return res.send({ - message: `Whitelist entry '${name}' with version '${version}' deleted successfully.`, + const mainDeleteResult = await client.query( + "DELETE FROM whitelist WHERE name = $1 RETURNING *;", + [name] + ) + if (mainDeleteResult.rowCount === 0) { + throw new Error(`No whitelist entry found for name='${name}'.`) + } + return }) - } else { return res.send({ - message: `All whitelist entries for '${name}' deleted successfully.`, + message: `All whitelist entries for '${name}' deleted successfully.`, }) - } } catch (error: any) { - if (error.message.includes("No entry found for name")) { - return res.status(404).send({ error: error.message }) - } + if (error.message.includes("No entry found for name")) { + return res.status(404).send({ error: error.message }) + } - console.error("Database error:", error) - return res.status(500).send({ error: "Internal Server Error" }) + console.error("Database error:", error) + return res.status(500).send({ error: "Internal Server Error" }) } } diff --git a/api/src/routes.ts b/api/src/routes.ts index 5a71cca..c7f6696 100644 --- a/api/src/routes.ts +++ b/api/src/routes.ts @@ -30,7 +30,5 @@ export default async function apiRoutes(fastify: FastifyInstance, options: Fasti // DELETE handlers fastify.delete("/whitelist/:name", whitelistDeleteHandler) fastify.delete("/blacklist/:name", blacklistDeleteHandler) - fastify.delete("/whitelist/:name/:version", whitelistDeleteHandler) - fastify.delete("/blacklist/:name/:version", blacklistDeleteHandler) } diff --git a/ui/src/utils/filtering/deletePackage.ts b/ui/src/utils/filtering/deletePackage.ts index 93ffd6a..8e342b9 100644 --- a/ui/src/utils/filtering/deletePackage.ts +++ b/ui/src/utils/filtering/deletePackage.ts @@ -7,14 +7,7 @@ type DeleteListProps = { export default async function deletePackage({list, name}: DeleteListProps) { try { - const response = await fetch(`${API}/${list}`, { - method: 'DELETE', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({name}) - }) - + const response = await fetch(`${API}/${list}/${name}`, {method: 'DELETE'}) if (!response.ok) { throw new Error(await response.text()) }