From db3ee13baaa289d96cc77642212329e5f47db712 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 8 Jan 2024 18:01:24 -0600 Subject: [PATCH] Implement Pleroma config GET controller --- src/app.ts | 3 ++- src/controllers/api/pleroma.ts | 27 ++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/app.ts b/src/app.ts index bc1b372..f4e99dc 100644 --- a/src/app.ts +++ b/src/app.ts @@ -44,7 +44,7 @@ import { instanceController } from './controllers/api/instance.ts'; import { mediaController } from './controllers/api/media.ts'; import { notificationsController } from './controllers/api/notifications.ts'; import { createTokenController, oauthAuthorizeController, oauthController } from './controllers/api/oauth.ts'; -import { frontendConfigController, updateConfigController } from './controllers/api/pleroma.ts'; +import { configController, frontendConfigController, updateConfigController } from './controllers/api/pleroma.ts'; import { preferencesController } from './controllers/api/preferences.ts'; import { relayController } from './controllers/nostr/relay.ts'; import { searchController } from './controllers/api/search.ts'; @@ -187,6 +187,7 @@ app.get('/api/v1/bookmarks', requirePubkey, bookmarksController); app.get('/api/v1/blocks', requirePubkey, blocksController); app.get('/api/v1/admin/accounts', adminAccountsController); +app.get('/api/v1/pleroma/admin/config', requireRole('admin'), configController); app.post('/api/v1/pleroma/admin/config', requireRole('admin'), updateConfigController); // Not (yet) implemented. diff --git a/src/controllers/api/pleroma.ts b/src/controllers/api/pleroma.ts index e6709c9..cc6addb 100644 --- a/src/controllers/api/pleroma.ts +++ b/src/controllers/api/pleroma.ts @@ -15,8 +15,8 @@ const frontendConfigController: AppController = async (c) => { limit: 1, }]); - const configs = jsonSchema.pipe(z.array(configSchema)).parse( - event?.content ? await decryptAdmin(Conf.pubkey, event.content) : [], + const configs = jsonSchema.pipe(z.array(configSchema)).catch([]).parse( + event?.content ? await decryptAdmin(Conf.pubkey, event.content) : '', ); const frontendConfig = configs.find(({ group, key }) => group === ':pleroma' && key === ':frontend_configurations'); @@ -33,6 +33,23 @@ const frontendConfigController: AppController = async (c) => { } }; +const configController: AppController = async (c) => { + const { pubkey } = Conf; + + const [event] = await eventsDB.filter([{ + kinds: [30078], + authors: [pubkey], + '#d': ['pub.ditto.pleroma.config'], + limit: 1, + }]); + + const configs = jsonSchema.pipe(z.array(configSchema)).catch([]).parse( + event?.content ? await decryptAdmin(pubkey, event.content) : '', + ); + + return c.json({ configs, need_reboot: false }); +}; + /** Pleroma admin config controller. */ const updateConfigController: AppController = async (c) => { const { pubkey } = Conf; @@ -44,8 +61,8 @@ const updateConfigController: AppController = async (c) => { limit: 1, }]); - const configs = jsonSchema.pipe(z.array(configSchema)).parse( - event?.content ? await decryptAdmin(pubkey, event.content) : [], + const configs = jsonSchema.pipe(z.array(configSchema)).catch([]).parse( + event?.content ? await decryptAdmin(pubkey, event.content) : '', ); const { configs: newConfigs } = z.object({ configs: z.array(configSchema) }).parse(await c.req.json()); @@ -68,4 +85,4 @@ const updateConfigController: AppController = async (c) => { return c.json({ configs: newConfigs, need_reboot: false }); }; -export { frontendConfigController, updateConfigController }; +export { configController, frontendConfigController, updateConfigController };