You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

31 lines
1.0 KiB

import {
ensureKnownConfigKey,
setGlobalConfigValue,
} from "#server/service/config";
import { toPublicConfigError } from "#server/service/config/errors";
import { requireAdmin } from "#server/utils/admin-guard";
import { assertUnderRateLimit } from "#server/utils/simple-rate-limit";
import { getRequestIP } from "h3";
type UpdateGlobalConfigBody = {
key: string;
value: unknown;
};
export default defineWrappedResponseHandler(async (event) => {
try {
await requireAdmin(event);
const ip = getRequestIP(event, { xForwardedFor: true }) ?? "unknown";
assertUnderRateLimit(`admin-config-global-put:${ip}`, 60, 60_000);
const body = await readBody<UpdateGlobalConfigBody>(event);
const key = ensureKnownConfigKey(body.key);
await setGlobalConfigValue(key, body.value);
const value = await event.context.config.getGlobal(key);
return R.success({
key,
value,
});
} catch (err) {
throw toPublicConfigError(err);
}
});