mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 03:19:46 +00:00
create adminUpdatePolicyController
This commit is contained in:
parent
ebbe2b86d9
commit
7acd7fe07b
2 changed files with 26 additions and 1 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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."
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue