Refractor validators
[oweals/peertube.git] / server / helpers / custom-validators / accounts.ts
1 import * as Bluebird from 'bluebird'
2 import { Response } from 'express'
3 import 'express-validator'
4 import * as validator from 'validator'
5 import { database as db } from '../../initializers'
6 import { AccountInstance } from '../../models'
7 import { isUserUsernameValid } from './users'
8
9 function isAccountNameValid (value: string) {
10   return isUserUsernameValid(value)
11 }
12
13 function isAccountIdExist (id: number | string, res: Response) {
14   let promise: Bluebird<AccountInstance>
15
16   if (validator.isInt('' + id)) {
17     promise = db.Account.load(+id)
18   } else { // UUID
19     promise = db.Account.loadByUUID('' + id)
20   }
21
22   return isAccountExist(promise, res)
23 }
24
25 function isLocalAccountNameExist (name: string, res: Response) {
26   const promise = db.Account.loadLocalByName(name)
27
28   return isAccountExist(promise, res)
29 }
30
31 async function isAccountExist (p: Bluebird<AccountInstance>, res: Response) {
32   const account = await p
33
34   if (!account) {
35     res.status(404)
36       .send({ error: 'Account not found' })
37       .end()
38
39     return false
40   }
41
42   res.locals.account = account
43
44   return true
45 }
46
47 // ---------------------------------------------------------------------------
48
49 export {
50   isAccountIdExist,
51   isLocalAccountNameExist,
52   isAccountNameValid
53 }