From 0e4a111f81cceed275d9bec2695f6e401fb654d8 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 12 Nov 2021 02:02:25 +0900 Subject: refactoring Resolve #7779 --- .../src/server/api/endpoints/admin/relays/add.ts | 63 ++++++++++++++++++++++ .../src/server/api/endpoints/admin/relays/list.ts | 47 ++++++++++++++++ .../server/api/endpoints/admin/relays/remove.ts | 20 +++++++ 3 files changed, 130 insertions(+) create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/add.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/remove.ts (limited to 'packages/backend/src/server/api/endpoints/admin/relays') diff --git a/packages/backend/src/server/api/endpoints/admin/relays/add.ts b/packages/backend/src/server/api/endpoints/admin/relays/add.ts new file mode 100644 index 0000000000..567035fd3a --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/relays/add.ts @@ -0,0 +1,63 @@ +import { URL } from 'url'; +import $ from 'cafy'; +import define from '../../../define'; +import { addRelay } from '@/services/relay'; +import { ApiError } from '../../../error'; + +export const meta = { + tags: ['admin'], + + requireCredential: true as const, + requireModerator: true as const, + + params: { + inbox: { + validator: $.str + }, + }, + + errors: { + invalidUrl: { + message: 'Invalid URL', + code: 'INVALID_URL', + id: 'fb8c92d3-d4e5-44e7-b3d4-800d5cef8b2c' + }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + inbox: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + }, + status: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'requesting', + enum: [ + 'requesting', + 'accepted', + 'rejected' + ] + } + } + } +}; + +export default define(meta, async (ps, user) => { + try { + if (new URL(ps.inbox).protocol !== 'https:') throw 'https only'; + } catch { + throw new ApiError(meta.errors.invalidUrl); + } + + return await addRelay(ps.inbox); +}); diff --git a/packages/backend/src/server/api/endpoints/admin/relays/list.ts b/packages/backend/src/server/api/endpoints/admin/relays/list.ts new file mode 100644 index 0000000000..031ebe85d0 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/relays/list.ts @@ -0,0 +1,47 @@ +import define from '../../../define'; +import { listRelay } from '@/services/relay'; + +export const meta = { + tags: ['admin'], + + requireCredential: true as const, + requireModerator: true as const, + + params: { + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + properties: { + id: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'id' + }, + inbox: { + type: 'string' as const, + optional: false as const, nullable: false as const, + format: 'url' + }, + status: { + type: 'string' as const, + optional: false as const, nullable: false as const, + default: 'requesting', + enum: [ + 'requesting', + 'accepted', + 'rejected' + ] + } + } + } + } +}; + +export default define(meta, async (ps, user) => { + return await listRelay(); +}); diff --git a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts new file mode 100644 index 0000000000..c1c50f5dc0 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts @@ -0,0 +1,20 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { removeRelay } from '@/services/relay'; + +export const meta = { + tags: ['admin'], + + requireCredential: true as const, + requireModerator: true as const, + + params: { + inbox: { + validator: $.str + }, + }, +}; + +export default define(meta, async (ps, user) => { + return await removeRelay(ps.inbox); +}); -- cgit v1.2.3-freya