mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29: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 pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts';
|
||||||
import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts';
|
import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts';
|
||||||
import { DittoRelayStore } from '@/storages/DittoRelayStore.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';
|
import { createPolicyEvent, DEFAULT_POLICY_SPEC } from '@/utils/policies.ts';
|
||||||
|
|
||||||
export interface AppEnv extends DittoEnv {
|
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', userMiddleware({ role: 'admin' }), adminListPoliciesController);
|
||||||
app.get('/api/v1/admin/policies/current', userMiddleware({ role: 'admin' }), adminCurrentPolicyController);
|
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);
|
app.route('/api/v1/custom_emojis', customEmojisRoute);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { type AppController } from '@/app.ts';
|
import { type AppController } from '@/app.ts';
|
||||||
|
import { createPolicyEvent } from '@/utils/policies.ts';
|
||||||
import { DEFAULT_POLICY_SPEC, policyRegistry } from '@/utils/policies.ts';
|
import { DEFAULT_POLICY_SPEC, policyRegistry } from '@/utils/policies.ts';
|
||||||
|
import { z } from 'zod';
|
||||||
|
|
||||||
export const adminListPoliciesController: AppController = (c) => {
|
export const adminListPoliciesController: AppController = (c) => {
|
||||||
return c.json(
|
return c.json(
|
||||||
|
|
@ -26,3 +28,25 @@ export const adminCurrentPolicyController: AppController = async (c) => {
|
||||||
if (current) return c.json({ mode: conf.policyMode, spec: current });
|
if (current) return c.json({ mode: conf.policyMode, spec: current });
|
||||||
return c.json({ mode: conf.policyMode, spec: DEFAULT_POLICY_SPEC });
|
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