Implement support field in video and video channel
[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 { AccountModel } from '../../models/account/account'
6 import { isUserDescriptionValid, isUserUsernameValid } from './users'
7
8 function isAccountNameValid (value: string) {
9   return isUserUsernameValid(value)
10 }
11
12 function isAccountDescriptionValid (value: string) {
13   return isUserDescriptionValid(value)
14 }
15
16 function isAccountIdExist (id: number | string, res: Response) {
17   let promise: Bluebird<AccountModel>
18
19   if (validator.isInt('' + id)) {
20     promise = AccountModel.load(+id)
21   } else { // UUID
22     promise = AccountModel.loadByUUID('' + id)
23   }
24
25   return isAccountExist(promise, res)
26 }
27
28 function isLocalAccountNameExist (name: string, res: Response) {
29   const promise = AccountModel.loadLocalByName(name)
30
31   return isAccountExist(promise, res)
32 }
33
34 async function isAccountExist (p: Bluebird<AccountModel>, res: Response) {
35   const account = await p
36
37   if (!account) {
38     res.status(404)
39       .send({ error: 'Account not found' })
40       .end()
41
42     return false
43   }
44
45   res.locals.account = account
46
47   return true
48 }
49
50 // ---------------------------------------------------------------------------
51
52 export {
53   isAccountIdExist,
54   isLocalAccountNameExist,
55   isAccountDescriptionValid,
56   isAccountNameValid
57 }