diff --git a/src/client/pages/instance/relays.vue b/src/client/pages/instance/relays.vue index 568f5edd71..9b523bd0ec 100644 --- a/src/client/pages/instance/relays.vue +++ b/src/client/pages/instance/relays.vue @@ -64,6 +64,11 @@ export default Vue.extend({ inbox }).then((relay: any) => { this.refresh(); + }).catch((e: any) => { + this.$root.dialog({ + type: 'error', + text: e.message || e + }); }); }, @@ -72,6 +77,11 @@ export default Vue.extend({ inbox }).then(() => { this.refresh(); + }).catch((e: any) => { + this.$root.dialog({ + type: 'error', + text: e.message || e + }); }); }, diff --git a/src/server/api/endpoints/admin/relays/add.ts b/src/server/api/endpoints/admin/relays/add.ts index 3ea6bcc73b..bcda1050e8 100644 --- a/src/server/api/endpoints/admin/relays/add.ts +++ b/src/server/api/endpoints/admin/relays/add.ts @@ -1,6 +1,7 @@ import $ from 'cafy'; import define from '../../../define'; import { addRelay } from '../../../../../services/relay'; +import { ApiError } from '../../../error'; export const meta = { desc: { @@ -17,8 +18,22 @@ export const meta = { validator: $.str }, }, + + errors: { + invalidUrl: { + message: 'Invalid URL', + code: 'INVALID_URL', + id: 'fb8c92d3-d4e5-44e7-b3d4-800d5cef8b2c' + }, + } }; 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); });