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
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);
|
|
}
|
|
});
|
|
|