mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 03:19:46 +00:00
Simplify promote controller
This commit is contained in:
parent
28c3b07a3e
commit
a2f019993d
2 changed files with 14 additions and 45 deletions
|
|
@ -81,11 +81,11 @@ import {
|
||||||
configController,
|
configController,
|
||||||
frontendConfigController,
|
frontendConfigController,
|
||||||
pleromaAdminDeleteStatusController,
|
pleromaAdminDeleteStatusController,
|
||||||
|
pleromaAdminPromoteController,
|
||||||
pleromaAdminSuggestController,
|
pleromaAdminSuggestController,
|
||||||
pleromaAdminTagController,
|
pleromaAdminTagController,
|
||||||
pleromaAdminUnsuggestController,
|
pleromaAdminUnsuggestController,
|
||||||
pleromaAdminUntagController,
|
pleromaAdminUntagController,
|
||||||
pleromaPromoteAdminController,
|
|
||||||
updateConfigController,
|
updateConfigController,
|
||||||
} from '@/controllers/api/pleroma.ts';
|
} from '@/controllers/api/pleroma.ts';
|
||||||
import { preferencesController } from '@/controllers/api/preferences.ts';
|
import { preferencesController } from '@/controllers/api/preferences.ts';
|
||||||
|
|
@ -442,9 +442,9 @@ app.get('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), confi
|
||||||
app.post('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), updateConfigController);
|
app.post('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), updateConfigController);
|
||||||
app.delete('/api/v1/pleroma/admin/statuses/:id', userMiddleware({ role: 'admin' }), pleromaAdminDeleteStatusController);
|
app.delete('/api/v1/pleroma/admin/statuses/:id', userMiddleware({ role: 'admin' }), pleromaAdminDeleteStatusController);
|
||||||
app.post(
|
app.post(
|
||||||
'/api/v1/pleroma/admin/users/permission_group/admin',
|
'/api/v1/pleroma/admin/users/permission_group/:group',
|
||||||
userMiddleware({ role: 'admin' }),
|
userMiddleware({ role: 'admin' }),
|
||||||
pleromaPromoteAdminController,
|
pleromaAdminPromoteController,
|
||||||
);
|
);
|
||||||
|
|
||||||
app.get('/api/v1/admin/ditto/relays', userMiddleware({ role: 'admin' }), adminRelaysController);
|
app.get('/api/v1/admin/ditto/relays', userMiddleware({ role: 'admin' }), adminRelaysController);
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,7 @@ import { type AppController } from '@/app.ts';
|
||||||
import { createAdminEvent, parseBody, updateAdminEvent, updateUser } from '@/utils/api.ts';
|
import { createAdminEvent, parseBody, updateAdminEvent, updateUser } from '@/utils/api.ts';
|
||||||
import { lookupPubkey } from '@/utils/lookup.ts';
|
import { lookupPubkey } from '@/utils/lookup.ts';
|
||||||
import { getPleromaConfigs } from '@/utils/pleroma.ts';
|
import { getPleromaConfigs } from '@/utils/pleroma.ts';
|
||||||
import { accountFromPubkey, renderAccount } from '@/views/mastodon/accounts.ts';
|
|
||||||
import { configSchema, elixirTupleSchema } from '@/schemas/pleroma-api.ts';
|
import { configSchema, elixirTupleSchema } from '@/schemas/pleroma-api.ts';
|
||||||
import { hydrateEvents } from '@/storages/hydrate.ts';
|
|
||||||
|
|
||||||
const frontendConfigController: AppController = async (c) => {
|
const frontendConfigController: AppController = async (c) => {
|
||||||
const configDB = await getPleromaConfigs(c.var);
|
const configDB = await getPleromaConfigs(c.var);
|
||||||
|
|
@ -68,59 +66,30 @@ const pleromaPromoteAdminSchema = z.object({
|
||||||
nicknames: z.string().array(),
|
nicknames: z.string().array(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const pleromaPromoteAdminController: AppController = async (c) => {
|
const pleromaAdminPromoteController: AppController = async (c) => {
|
||||||
const { conf, relay, signal } = c.var;
|
|
||||||
const body = await parseBody(c.req.raw);
|
const body = await parseBody(c.req.raw);
|
||||||
const result = pleromaPromoteAdminSchema.safeParse(body);
|
const result = pleromaPromoteAdminSchema.safeParse(body);
|
||||||
|
const group = c.req.param('group');
|
||||||
|
|
||||||
if (!result.success) {
|
if (!result.success) {
|
||||||
return c.json({ error: 'Bad request', schema: result.error }, 422);
|
return c.json({ error: 'Bad request', schema: result.error }, 422);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!['admin', 'moderator'].includes(group)) {
|
||||||
|
return c.json({ error: 'Bad request', schema: 'Invalid group' }, 422);
|
||||||
|
}
|
||||||
|
|
||||||
const { data } = result;
|
const { data } = result;
|
||||||
const { nicknames } = data;
|
const { nicknames } = data;
|
||||||
|
|
||||||
const pubkeys: string[] = [];
|
|
||||||
|
|
||||||
for (const nickname of nicknames) {
|
for (const nickname of nicknames) {
|
||||||
const pubkey = await lookupPubkey(nickname, c.var);
|
const pubkey = await lookupPubkey(nickname, c.var);
|
||||||
if (!pubkey) continue;
|
if (pubkey) {
|
||||||
|
await updateUser(pubkey, { [group]: true }, c);
|
||||||
pubkeys.push(pubkey);
|
}
|
||||||
|
|
||||||
await updateAdminEvent(
|
|
||||||
{ kinds: [30382], authors: [await conf.signer.getPublicKey()], '#d': [pubkey], limit: 1 },
|
|
||||||
(prev) => {
|
|
||||||
const tags = prev?.tags ?? [['d', pubkey]];
|
|
||||||
|
|
||||||
const existing = prev?.tags.some(([name, value]) => name === 'n' && value === 'admin');
|
|
||||||
if (!existing) {
|
|
||||||
tags.push(['n', 'admin']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
kind: 30382,
|
|
||||||
content: prev?.content ?? '',
|
|
||||||
tags,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
c,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const events = await relay.query([{ kinds: [0], authors: pubkeys }], { signal });
|
return c.json({ is_admin: true }, 200);
|
||||||
|
|
||||||
await hydrateEvents({ ...c.var, events });
|
|
||||||
|
|
||||||
const accounts = pubkeys.map((pubkey) => {
|
|
||||||
const event = events.find((e) => e.pubkey === pubkey);
|
|
||||||
if (event) {
|
|
||||||
return renderAccount(event);
|
|
||||||
}
|
|
||||||
return accountFromPubkey(pubkey);
|
|
||||||
});
|
|
||||||
|
|
||||||
return c.json(accounts, 200);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const pleromaAdminTagController: AppController = async (c) => {
|
const pleromaAdminTagController: AppController = async (c) => {
|
||||||
|
|
@ -211,10 +180,10 @@ export {
|
||||||
configController,
|
configController,
|
||||||
frontendConfigController,
|
frontendConfigController,
|
||||||
pleromaAdminDeleteStatusController,
|
pleromaAdminDeleteStatusController,
|
||||||
|
pleromaAdminPromoteController,
|
||||||
pleromaAdminSuggestController,
|
pleromaAdminSuggestController,
|
||||||
pleromaAdminTagController,
|
pleromaAdminTagController,
|
||||||
pleromaAdminUnsuggestController,
|
pleromaAdminUnsuggestController,
|
||||||
pleromaAdminUntagController,
|
pleromaAdminUntagController,
|
||||||
pleromaPromoteAdminController,
|
|
||||||
updateConfigController,
|
updateConfigController,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue