From 258e81df519d4c38c74aa4125806979a95220391 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 1 May 2024 18:29:32 -0500 Subject: [PATCH] Admin relays: use "marker" property in the API, fix PUT controller --- src/app.ts | 4 ++-- src/controllers/api/ditto.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app.ts b/src/app.ts index 7e91a01..a3b507f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -75,7 +75,7 @@ import { auth19, requirePubkey } from '@/middleware/auth19.ts'; import { auth98, requireProof, requireRole } from '@/middleware/auth98.ts'; import { cache } from '@/middleware/cache.ts'; import { csp } from '@/middleware/csp.ts'; -import { adminRelaysController } from '@/controllers/api/ditto.ts'; +import { adminRelaysController, adminSetRelaysController } from '@/controllers/api/ditto.ts'; import { storeMiddleware } from '@/middleware/store.ts'; interface AppEnv extends HonoEnv { @@ -190,7 +190,7 @@ app.post('/api/v1/pleroma/admin/config', requireRole('admin'), updateConfigContr app.delete('/api/v1/pleroma/admin/statuses/:id', requireRole('admin'), pleromaAdminDeleteStatusController); app.get('/api/v1/admin/ditto/relays', requireRole('admin'), adminRelaysController); -app.put('/api/v1/admin/ditto/relays', requireRole('admin'), adminRelaysController); +app.put('/api/v1/admin/ditto/relays', requireRole('admin'), adminSetRelaysController); // Not (yet) implemented. app.get('/api/v1/custom_emojis', emptyArrayController); diff --git a/src/controllers/api/ditto.ts b/src/controllers/api/ditto.ts index e948593..f0f7036 100644 --- a/src/controllers/api/ditto.ts +++ b/src/controllers/api/ditto.ts @@ -6,10 +6,11 @@ import { Conf } from '@/config.ts'; import { Storages } from '@/storages.ts'; import { AdminSigner } from '@/signers/AdminSigner.ts'; +const markerSchema = z.enum(['read', 'write']); + const relaySchema = z.object({ url: z.string().url(), - read: z.boolean(), - write: z.boolean(), + marker: markerSchema.optional(), }); type RelayEntity = z.infer; @@ -31,7 +32,7 @@ export const adminSetRelaysController: AppController = async (c) => { const event = await new AdminSigner().signEvent({ kind: 10002, - tags: relays.map(({ url, read, write }) => ['r', url, read && write ? '' : read ? 'read' : 'write']), + tags: relays.map(({ url, marker }) => marker ? ['r', url, marker] : ['r', url]), content: '', created_at: Math.floor(Date.now() / 1000), }); @@ -47,8 +48,7 @@ function renderRelays(event: NostrEvent): RelayEntity[] { if (name === 'r') { const relay: RelayEntity = { url, - read: !marker || marker === 'read', - write: !marker || marker === 'write', + marker: markerSchema.safeParse(marker).success ? marker as 'read' | 'write' : undefined, }; acc.push(relay); }