From 10363c74c1d869f0e0c7bc4d0367b1f34d1bb6a4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 3 Jun 2021 17:33:44 +0200 Subject: Move middleware utils in middlewares helpers modules should not import models --- server/middlewares/validators/shared/accounts.ts | 65 ++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 server/middlewares/validators/shared/accounts.ts (limited to 'server/middlewares/validators/shared/accounts.ts') diff --git a/server/middlewares/validators/shared/accounts.ts b/server/middlewares/validators/shared/accounts.ts new file mode 100644 index 000000000..04da15441 --- /dev/null +++ b/server/middlewares/validators/shared/accounts.ts @@ -0,0 +1,65 @@ +import { Response } from 'express' +import { AccountModel } from '@server/models/account/account' +import { UserModel } from '@server/models/user/user' +import { MAccountDefault } from '@server/types/models' +import { HttpStatusCode } from '@shared/core-utils' + +function doesAccountIdExist (id: number | string, res: Response, sendNotFound = true) { + const promise = AccountModel.load(parseInt(id + '', 10)) + + return doesAccountExist(promise, res, sendNotFound) +} + +function doesLocalAccountNameExist (name: string, res: Response, sendNotFound = true) { + const promise = AccountModel.loadLocalByName(name) + + return doesAccountExist(promise, res, sendNotFound) +} + +function doesAccountNameWithHostExist (nameWithDomain: string, res: Response, sendNotFound = true) { + const promise = AccountModel.loadByNameWithHost(nameWithDomain) + + return doesAccountExist(promise, res, sendNotFound) +} + +async function doesAccountExist (p: Promise, res: Response, sendNotFound: boolean) { + const account = await p + + if (!account) { + if (sendNotFound === true) { + res.fail({ + status: HttpStatusCode.NOT_FOUND_404, + message: 'Account not found' + }) + } + return false + } + + res.locals.account = account + return true +} + +async function doesUserFeedTokenCorrespond (id: number, token: string, res: Response) { + const user = await UserModel.loadByIdWithChannels(parseInt(id + '', 10)) + + if (token !== user.feedToken) { + res.fail({ + status: HttpStatusCode.FORBIDDEN_403, + message: 'User and token mismatch' + }) + return false + } + + res.locals.user = user + return true +} + +// --------------------------------------------------------------------------- + +export { + doesAccountIdExist, + doesLocalAccountNameExist, + doesAccountNameWithHostExist, + doesAccountExist, + doesUserFeedTokenCorrespond +} -- cgit v1.2.3