From 17706d3b2084c86f494bfd57388342749c0e12b7 Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Tue, 7 May 2024 10:19:08 -0300 Subject: [PATCH] feat: implement view single report --- src/app.ts | 3 ++- src/controllers/api/reports.ts | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/app.ts b/src/app.ts index 80e1288..cdd5d67 100644 --- a/src/app.ts +++ b/src/app.ts @@ -44,7 +44,7 @@ import { } from '@/controllers/api/pleroma.ts'; import { preferencesController } from '@/controllers/api/preferences.ts'; import { relayController } from '@/controllers/nostr/relay.ts'; -import { adminReportsController, reportsController } from '@/controllers/api/reports.ts'; +import { adminReportsController, reportsController, singleAdminReportsController } from '@/controllers/api/reports.ts'; import { searchController } from '@/controllers/api/search.ts'; import { bookmarkController, @@ -209,6 +209,7 @@ app.put('/api/v1/admin/ditto/relays', requireRole('admin'), adminSetRelaysContro app.post('/api/v1/reports', requirePubkey, reportsController); app.get('/api/v1/admin/reports', requirePubkey, requireRole('admin'), adminReportsController); +app.get('/api/v1/admin/reports/:id', requirePubkey, requireRole('admin'), singleAdminReportsController); // Not (yet) implemented. app.get('/api/v1/custom_emojis', emptyArrayController); diff --git a/src/controllers/api/reports.ts b/src/controllers/api/reports.ts index 1e27613..de46fbf 100644 --- a/src/controllers/api/reports.ts +++ b/src/controllers/api/reports.ts @@ -16,7 +16,7 @@ const reportsSchema = z.object({ // TODO: rules_ids[] is not implemented }); -/** https://docs.joinmastodon.org/methods/reports/ */ +/** https://docs.joinmastodon.org/methods/reports/#post */ const reportsController: AppController = async (c) => { const store = c.get('store'); const body = await parseBody(c.req.raw); @@ -66,4 +66,26 @@ const adminReportsController: AppController = async (c) => { return c.json(reports); }; -export { adminReportsController, reportsController }; +/** https://docs.joinmastodon.org/methods/admin/reports/#get-one */ +const singleAdminReportsController: AppController = async (c) => { + const eventId = c.req.param('id'); + const { signal } = c.req.raw; + const store = c.get('store'); + const pubkey = c.get('pubkey'); + + const [event] = await store.query([{ + kinds: [1984], + ids: [eventId], + limit: 1, + }], { signal }); + + if (!event) { + return c.json({ error: 'This action is not allowed' }, 403); + } + + await hydrateEvents({ events: [event], storage: store, signal }); + + return c.json(await renderAdminReport(event, { viewerPubkey: pubkey })); +}; + +export { adminReportsController, reportsController, singleAdminReportsController };