diff --git a/src/app.ts b/src/app.ts index df8919d2..73baa184 100644 --- a/src/app.ts +++ b/src/app.ts @@ -43,7 +43,7 @@ import { } from '@/controllers/api/pleroma.ts'; import { preferencesController } from '@/controllers/api/preferences.ts'; import { relayController } from '@/controllers/nostr/relay.ts'; -import { reportsController } from '@/controllers/api/reports.ts'; +import { reportsController, viewAllReportsController } from '@/controllers/api/reports.ts'; import { searchController } from '@/controllers/api/search.ts'; import { bookmarkController, @@ -200,6 +200,7 @@ app.get('/api/v1/admin/ditto/relays', requireRole('admin'), adminRelaysControlle app.put('/api/v1/admin/ditto/relays', requireRole('admin'), adminSetRelaysController); app.post('/api/v1/reports', requirePubkey, reportsController); +app.get('/api/v1/admin/reports', requirePubkey, requireRole('admin'), viewAllReportsController); // 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 9e1f9339..351c1c2c 100644 --- a/src/controllers/api/reports.ts +++ b/src/controllers/api/reports.ts @@ -5,6 +5,7 @@ import { hydrateEvents } from '@/storages/hydrate.ts'; import { NSchema as n } from '@nostrify/nostrify'; import { renderReport } from '@/views/mastodon/reports.ts'; import { z } from 'zod'; +import { renderAdminReport } from '@/views/mastodon/reports.ts'; const reportsSchema = z.object({ account_id: n.id(), @@ -50,4 +51,20 @@ const reportsController: AppController = async (c) => { return c.json(await renderReport(event, profile)); }; -export { reportsController }; +/** https://docs.joinmastodon.org/methods/admin/reports/#get */ +const viewAllReportsController: AppController = async (c) => { + const store = c.get('store'); + const allMastodonReports = []; + + const allReports = await store.query([{ kinds: [1984], '#P': [Conf.pubkey] }]); + + await hydrateEvents({ storage: store, events: allReports, signal: AbortSignal.timeout(2000) }); + + for (const report of allReports) { + allMastodonReports.push(await renderAdminReport(report, { viewerPubkey: c.get('pubkey') })); + } + + return c.json(allMastodonReports); +}; + +export { reportsController, viewAllReportsController };