From 2756f553c68082342a784ef716c62da6cea6f3ca Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 22 Feb 2019 11:46:58 +0900 Subject: Improve error handling of API (#4345) * wip * wip * wip * Update attached_notes.ts * wip * Refactor * wip * wip * wip * wip * wip * wip * wip * wip * Update call.ts * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * :v: * Fix --- src/server/api/endpoints/admin/abuse-user-reports.ts | 10 +++------- src/server/api/endpoints/admin/drive/files.ts | 6 +++--- src/server/api/endpoints/admin/drive/show-file.ts | 17 +++++++++++++---- src/server/api/endpoints/admin/emoji/add.ts | 8 ++++---- src/server/api/endpoints/admin/emoji/list.ts | 8 ++++---- src/server/api/endpoints/admin/emoji/remove.ts | 8 ++++---- src/server/api/endpoints/admin/emoji/update.ts | 8 ++++---- .../admin/federation/remove-all-following.ts | 6 +++--- .../endpoints/admin/federation/update-instance.ts | 8 ++++---- src/server/api/endpoints/admin/invite.ts | 8 ++++---- src/server/api/endpoints/admin/moderators/add.ts | 8 ++++---- src/server/api/endpoints/admin/moderators/remove.ts | 8 ++++---- src/server/api/endpoints/admin/queue/clear.ts | 6 +++--- .../api/endpoints/admin/remove-abuse-user-report.ts | 8 ++++---- src/server/api/endpoints/admin/reset-password.ts | 20 ++++++++++---------- src/server/api/endpoints/admin/show-user.ts | 10 +++++----- src/server/api/endpoints/admin/show-users.ts | 6 +++--- src/server/api/endpoints/admin/silence-user.ts | 10 +++++----- src/server/api/endpoints/admin/suspend-user.ts | 20 ++++++++++---------- src/server/api/endpoints/admin/unsilence-user.ts | 8 ++++---- src/server/api/endpoints/admin/unsuspend-user.ts | 16 ++++++++-------- src/server/api/endpoints/admin/unverify-user.ts | 16 ++++++++-------- src/server/api/endpoints/admin/update-meta.ts | 6 +++--- src/server/api/endpoints/admin/update-remote-user.ts | 7 ++++--- src/server/api/endpoints/admin/verify-user.ts | 16 ++++++++-------- 25 files changed, 129 insertions(+), 123 deletions(-) (limited to 'src/server/api/endpoints/admin') diff --git a/src/server/api/endpoints/admin/abuse-user-reports.ts b/src/server/api/endpoints/admin/abuse-user-reports.ts index fc95dd4bb1..602171abb8 100644 --- a/src/server/api/endpoints/admin/abuse-user-reports.ts +++ b/src/server/api/endpoints/admin/abuse-user-reports.ts @@ -25,11 +25,7 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { - if (ps.sinceId && ps.untilId) { - return rej('cannot set sinceId and untilId'); - } - +export default define(meta, async (ps) => { const sort = { _id: -1 }; @@ -51,5 +47,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { sort: sort }); - res(await packMany(reports)); -})); + return await packMany(reports); +}); diff --git a/src/server/api/endpoints/admin/drive/files.ts b/src/server/api/endpoints/admin/drive/files.ts index 3a837e4189..318b2de1b2 100644 --- a/src/server/api/endpoints/admin/drive/files.ts +++ b/src/server/api/endpoints/admin/drive/files.ts @@ -46,7 +46,7 @@ const sort: any = { // < https://github.com/Microsoft/TypeScript/issues/1863 [fallback]: { _id: -1 } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const q = { 'metadata.deletedAt': { $exists: false }, } as any; @@ -61,5 +61,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { skip: ps.offset }); - res(await packMany(files, { detail: true, withUser: true, self: true })); -})); + return await packMany(files, { detail: true, withUser: true, self: true }); +}); diff --git a/src/server/api/endpoints/admin/drive/show-file.ts b/src/server/api/endpoints/admin/drive/show-file.ts index 6dfab19643..9b993584eb 100644 --- a/src/server/api/endpoints/admin/drive/show-file.ts +++ b/src/server/api/endpoints/admin/drive/show-file.ts @@ -2,6 +2,7 @@ import $ from 'cafy'; import ID, { transform } from '../../../../../misc/cafy-id'; import define from '../../../define'; import DriveFile from '../../../../../models/drive-file'; +import { ApiError } from '../../../error'; export const meta = { requireCredential: true, @@ -12,17 +13,25 @@ export const meta = { validator: $.type(ID), transform: transform, }, + }, + + errors: { + noSuchFile: { + message: 'No such file.', + code: 'NO_SUCH_FILE', + id: 'caf3ca38-c6e5-472e-a30c-b05377dcc240' + } } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const file = await DriveFile.findOne({ _id: ps.fileId }); if (file == null) { - return rej('file not found'); + throw new ApiError(meta.errors.noSuchFile); } - res(file); -})); + return file; +}); diff --git a/src/server/api/endpoints/admin/emoji/add.ts b/src/server/api/endpoints/admin/emoji/add.ts index cab3841649..b84e9d34d6 100644 --- a/src/server/api/endpoints/admin/emoji/add.ts +++ b/src/server/api/endpoints/admin/emoji/add.ts @@ -26,7 +26,7 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const emoji = await Emoji.insert({ updatedAt: new Date(), name: ps.name, @@ -35,7 +35,7 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { url: ps.url }); - res({ + return { id: emoji._id - }); -})); + }; +}); diff --git a/src/server/api/endpoints/admin/emoji/list.ts b/src/server/api/endpoints/admin/emoji/list.ts index 624fa7845c..f51a536fab 100644 --- a/src/server/api/endpoints/admin/emoji/list.ts +++ b/src/server/api/endpoints/admin/emoji/list.ts @@ -18,16 +18,16 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const emojis = await Emoji.find({ host: ps.host }); - res(emojis.map(e => ({ + return emojis.map(e => ({ id: e._id, name: e.name, aliases: e.aliases, host: e.host, url: e.url - }))); -})); + })); +}); diff --git a/src/server/api/endpoints/admin/emoji/remove.ts b/src/server/api/endpoints/admin/emoji/remove.ts index 1d6ed11b63..9699a00121 100644 --- a/src/server/api/endpoints/admin/emoji/remove.ts +++ b/src/server/api/endpoints/admin/emoji/remove.ts @@ -18,14 +18,14 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const emoji = await Emoji.findOne({ _id: ps.id }); - if (emoji == null) return rej('emoji not found'); + if (emoji == null) throw new Error('emoji not found'); await Emoji.remove({ _id: emoji._id }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/emoji/update.ts b/src/server/api/endpoints/admin/emoji/update.ts index cbcc07fd48..7d065eaddb 100644 --- a/src/server/api/endpoints/admin/emoji/update.ts +++ b/src/server/api/endpoints/admin/emoji/update.ts @@ -30,12 +30,12 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const emoji = await Emoji.findOne({ _id: ps.id }); - if (emoji == null) return rej('emoji not found'); + if (emoji == null) throw new Error('emoji not found'); await Emoji.update({ _id: emoji._id }, { $set: { @@ -46,5 +46,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/federation/remove-all-following.ts b/src/server/api/endpoints/admin/federation/remove-all-following.ts index 8daff139b2..1a272aeb05 100644 --- a/src/server/api/endpoints/admin/federation/remove-all-following.ts +++ b/src/server/api/endpoints/admin/federation/remove-all-following.ts @@ -15,7 +15,7 @@ export const meta = { } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const followings = await Following.find({ '_follower.host': ps.host }); @@ -29,5 +29,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { deleteFollowing(pair[0], pair[1]); } - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/federation/update-instance.ts b/src/server/api/endpoints/admin/federation/update-instance.ts index 579b437aa1..50eb4ba135 100644 --- a/src/server/api/endpoints/admin/federation/update-instance.ts +++ b/src/server/api/endpoints/admin/federation/update-instance.ts @@ -21,11 +21,11 @@ export const meta = { } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const instance = await Instance.findOne({ host: ps.host }); if (instance == null) { - return rej('instance not found'); + throw new Error('instance not found'); } Instance.update({ host: ps.host }, { @@ -35,5 +35,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/invite.ts b/src/server/api/endpoints/admin/invite.ts index ebfcb84452..3c2b323498 100644 --- a/src/server/api/endpoints/admin/invite.ts +++ b/src/server/api/endpoints/admin/invite.ts @@ -13,7 +13,7 @@ export const meta = { params: {} }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const code = rndstr({ length: 5, chars: '0-9' }); await RegistrationTicket.insert({ @@ -21,7 +21,7 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { code: code }); - res({ + return { code: code - }); -})); + }; +}); diff --git a/src/server/api/endpoints/admin/moderators/add.ts b/src/server/api/endpoints/admin/moderators/add.ts index 4b4675c566..58515381d0 100644 --- a/src/server/api/endpoints/admin/moderators/add.ts +++ b/src/server/api/endpoints/admin/moderators/add.ts @@ -24,13 +24,13 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.update({ @@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/moderators/remove.ts b/src/server/api/endpoints/admin/moderators/remove.ts index 2b9da61bb5..75627fb631 100644 --- a/src/server/api/endpoints/admin/moderators/remove.ts +++ b/src/server/api/endpoints/admin/moderators/remove.ts @@ -24,13 +24,13 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.update({ @@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/queue/clear.ts b/src/server/api/endpoints/admin/queue/clear.ts index 4da8d2c72d..9a1e565955 100644 --- a/src/server/api/endpoints/admin/queue/clear.ts +++ b/src/server/api/endpoints/admin/queue/clear.ts @@ -8,8 +8,8 @@ export const meta = { params: {} }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { destroy(); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/remove-abuse-user-report.ts b/src/server/api/endpoints/admin/remove-abuse-user-report.ts index 4d068a410e..c0c40c85da 100644 --- a/src/server/api/endpoints/admin/remove-abuse-user-report.ts +++ b/src/server/api/endpoints/admin/remove-abuse-user-report.ts @@ -15,18 +15,18 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const report = await AbuseUserReport.findOne({ _id: ps.reportId }); if (report == null) { - return rej('report not found'); + throw new Error('report not found'); } await AbuseUserReport.remove({ _id: report._id }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/reset-password.ts b/src/server/api/endpoints/admin/reset-password.ts index c072c12e0d..b274dc2a7d 100644 --- a/src/server/api/endpoints/admin/reset-password.ts +++ b/src/server/api/endpoints/admin/reset-password.ts @@ -25,17 +25,17 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } if (user.isAdmin) { - return rej('cannot reset password of admin'); + throw new Error('cannot reset password of admin'); } const passwd = rndstr('a-zA-Z0-9', 8); @@ -46,12 +46,12 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { await User.findOneAndUpdate({ _id: user._id }, { - $set: { - password: hash - } - }); + $set: { + password: hash + } + }); - res({ + return { password: passwd - }); -})); + }; +}); diff --git a/src/server/api/endpoints/admin/show-user.ts b/src/server/api/endpoints/admin/show-user.ts index 490b685352..5fcf4c3867 100644 --- a/src/server/api/endpoints/admin/show-user.ts +++ b/src/server/api/endpoints/admin/show-user.ts @@ -23,18 +23,18 @@ export const meta = { } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } if (me.isModerator && user.isAdmin) { - return rej('cannot show info of admin'); + throw new Error('cannot show info of admin'); } - res(user); -})); + return user; +}); diff --git a/src/server/api/endpoints/admin/show-users.ts b/src/server/api/endpoints/admin/show-users.ts index 3646f96d7d..9d1c5ea986 100644 --- a/src/server/api/endpoints/admin/show-users.ts +++ b/src/server/api/endpoints/admin/show-users.ts @@ -63,7 +63,7 @@ const sort: any = { // < https://github.com/Microsoft/TypeScript/issues/1863 [fallback]: { _id: -1 } }; -export default define(meta, (ps, me) => new Promise(async (res, rej) => { +export default define(meta, async (ps, me) => { const q = { $and: [] } as any; @@ -99,5 +99,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => { skip: ps.offset }); - res(await Promise.all(users.map(user => pack(user, me, { detail: true })))); -})); + return await Promise.all(users.map(user => pack(user, me, { detail: true }))); +}); diff --git a/src/server/api/endpoints/admin/silence-user.ts b/src/server/api/endpoints/admin/silence-user.ts index 7b1090a895..532025563f 100644 --- a/src/server/api/endpoints/admin/silence-user.ts +++ b/src/server/api/endpoints/admin/silence-user.ts @@ -24,17 +24,17 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } if (user.isAdmin) { - return rej('cannot silence admin'); + throw new Error('cannot silence admin'); } await User.findOneAndUpdate({ @@ -45,5 +45,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/suspend-user.ts b/src/server/api/endpoints/admin/suspend-user.ts index 2ec5196880..321c3955e6 100644 --- a/src/server/api/endpoints/admin/suspend-user.ts +++ b/src/server/api/endpoints/admin/suspend-user.ts @@ -24,30 +24,30 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } if (user.isAdmin) { - return rej('cannot suspend admin'); + throw new Error('cannot suspend admin'); } if (user.isModerator) { - return rej('cannot suspend moderator'); + throw new Error('cannot suspend moderator'); } await User.findOneAndUpdate({ _id: user._id }, { - $set: { - isSuspended: true - } - }); + $set: { + isSuspended: true + } + }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/unsilence-user.ts b/src/server/api/endpoints/admin/unsilence-user.ts index a01bfbb6d2..bb039eb8da 100644 --- a/src/server/api/endpoints/admin/unsilence-user.ts +++ b/src/server/api/endpoints/admin/unsilence-user.ts @@ -24,13 +24,13 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.findOneAndUpdate({ @@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { } }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/unsuspend-user.ts b/src/server/api/endpoints/admin/unsuspend-user.ts index 4b53246264..4732e44369 100644 --- a/src/server/api/endpoints/admin/unsuspend-user.ts +++ b/src/server/api/endpoints/admin/unsuspend-user.ts @@ -24,22 +24,22 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.findOneAndUpdate({ _id: user._id }, { - $set: { - isSuspended: false - } - }); + $set: { + isSuspended: false + } + }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/unverify-user.ts b/src/server/api/endpoints/admin/unverify-user.ts index 3e044ffed7..857cceb1ec 100644 --- a/src/server/api/endpoints/admin/unverify-user.ts +++ b/src/server/api/endpoints/admin/unverify-user.ts @@ -24,22 +24,22 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.findOneAndUpdate({ _id: user._id }, { - $set: { - isVerified: false - } - }); + $set: { + isVerified: false + } + }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts index da2ee36927..1fb87d0a98 100644 --- a/src/server/api/endpoints/admin/update-meta.ts +++ b/src/server/api/endpoints/admin/update-meta.ts @@ -323,7 +323,7 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const set = {} as any; if (ps.broadcasts) { @@ -506,5 +506,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => { $set: set }, { upsert: true }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/admin/update-remote-user.ts b/src/server/api/endpoints/admin/update-remote-user.ts index 9288ce1fb7..8d1db33ba4 100644 --- a/src/server/api/endpoints/admin/update-remote-user.ts +++ b/src/server/api/endpoints/admin/update-remote-user.ts @@ -26,9 +26,10 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise((res, rej) => { - updatePersonById(ps.userId).then(() => res(), e => rej(e)); -})); +export default define(meta, async (ps) => { + await updatePersonById(ps.userId); + return; +}); async function updatePersonById(userId: mongo.ObjectID) { const user = await getRemoteUser(userId); diff --git a/src/server/api/endpoints/admin/verify-user.ts b/src/server/api/endpoints/admin/verify-user.ts index 996e044d18..77db8e6e60 100644 --- a/src/server/api/endpoints/admin/verify-user.ts +++ b/src/server/api/endpoints/admin/verify-user.ts @@ -24,22 +24,22 @@ export const meta = { } }; -export default define(meta, (ps) => new Promise(async (res, rej) => { +export default define(meta, async (ps) => { const user = await User.findOne({ _id: ps.userId }); if (user == null) { - return rej('user not found'); + throw new Error('user not found'); } await User.findOneAndUpdate({ _id: user._id }, { - $set: { - isVerified: true - } - }); + $set: { + isVerified: true + } + }); - res(); -})); + return; +}); -- cgit v1.2.3-freya