UNPKG

@atproto/ozone

Version:

Backend service for moderating the Bluesky network.

89 lines (81 loc) 2.81 kB
import { Selectable } from 'kysely' import { InvalidRequestError } from '@atproto/xrpc-server' import { Setting } from '../db/schema/setting' import { PolicyListSettingKey, ProtectedTagSettingKey } from './constants' export const settingValidators = new Map< string, (setting: Partial<Selectable<Setting>>) => Promise<void> >([ [ ProtectedTagSettingKey, async (setting: Partial<Selectable<Setting>>) => { if (setting.managerRole !== 'tools.ozone.team.defs#roleAdmin') { throw new InvalidRequestError( 'Only admins should be able to configure protected tags', ) } if (typeof setting.value !== 'object') { throw new InvalidRequestError('Invalid value') } for (const [key, val] of Object.entries(setting.value)) { if (!val || typeof val !== 'object') { throw new InvalidRequestError(`Invalid configuration for tag ${key}`) } if (!val['roles'] && !val['moderators']) { throw new InvalidRequestError( `Must define who a list of moderators or a role who can action subjects with ${key} tag`, ) } if (val['roles']) { if (!Array.isArray(val['roles'])) { throw new InvalidRequestError( `Roles must be an array of moderator roles for tag ${key}`, ) } if (!val['roles']?.length) { throw new InvalidRequestError( `Must define at least one role for tag ${key}`, ) } } if (val['moderators']) { if (!Array.isArray(val['moderators'])) { throw new InvalidRequestError( `Moderators must be an array of moderator DIDs for tag ${key}`, ) } if (!val['moderators']?.length) { throw new InvalidRequestError( `Must define at least one moderator DID for tag ${key}`, ) } } } }, ], [ PolicyListSettingKey, async (setting: Partial<Selectable<Setting>>) => { if (setting.managerRole !== 'tools.ozone.team.defs#roleAdmin') { throw new InvalidRequestError( 'Only admins should be able to manage policy list', ) } if (typeof setting.value !== 'object') { throw new InvalidRequestError('Invalid value') } for (const [key, val] of Object.entries(setting.value)) { if (!val || typeof val !== 'object') { throw new InvalidRequestError( `Invalid configuration for policy ${key}`, ) } if (!val['name'] || !val['description']) { throw new InvalidRequestError( `Must define a name and description for policy ${key}`, ) } } }, ], ])