create adminUpdatePolicyController

This commit is contained in:
Siddharth Singh 2025-03-30 14:52:32 +05:30
parent ebbe2b86d9
commit 7acd7fe07b
No known key found for this signature in database
2 changed files with 26 additions and 1 deletions

View file

@ -151,7 +151,7 @@ import dittoNamesRoute from '@/routes/dittoNamesRoute.ts';
import pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts';
import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts';
import { DittoRelayStore } from '@/storages/DittoRelayStore.ts';
import { adminCurrentPolicyController, adminListPoliciesController } from '@/controllers/api/policies.ts';
import { adminCurrentPolicyController, adminListPoliciesController, adminUpdatePolicyController } from '@/controllers/api/policies.ts';
import { createPolicyEvent, DEFAULT_POLICY_SPEC } from '@/utils/policies.ts';
export interface AppEnv extends DittoEnv {
@ -505,6 +505,7 @@ app.patch('/api/v1/pleroma/admin/users/unsuggest', userMiddleware({ role: 'admin
app.get('/api/v1/admin/policies', userMiddleware({ role: 'admin' }), adminListPoliciesController);
app.get('/api/v1/admin/policies/current', userMiddleware({ role: 'admin' }), adminCurrentPolicyController);
app.put('/api/v1/admin/policies/current', userMiddleware({ role: 'admin' }), adminUpdatePolicyController);
app.route('/api/v1/custom_emojis', customEmojisRoute);

View file

@ -1,5 +1,7 @@
import { type AppController } from '@/app.ts';
import { createPolicyEvent } from '@/utils/policies.ts';
import { DEFAULT_POLICY_SPEC, policyRegistry } from '@/utils/policies.ts';
import { z } from 'zod';
export const adminListPoliciesController: AppController = (c) => {
return c.json(
@ -26,3 +28,25 @@ export const adminCurrentPolicyController: AppController = async (c) => {
if (current) return c.json({ mode: conf.policyMode, spec: current });
return c.json({ mode: conf.policyMode, spec: DEFAULT_POLICY_SPEC });
};
const PolicySpecSchema = z.object({
policies: z.array(z.object({
name: z.string(),
params: z.record(z.any())
}))
})
export const adminUpdatePolicyController: AppController = async (c) => {
const { relay, conf } = c.var;
if (conf.policyMode === 'script') {
return c.json({
error: "The Ditto policy mode is set to 'script'. You will not be able to use the Policy UI until you change it to 'event'."
})
}
const req = await c.req.json();
const parsed = PolicySpecSchema.parse(req);
await relay.event(await createPolicyEvent(conf, parsed));
return c.json({
message: "Settings saved successfully."
})
}