]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/misc.ts
Check live duration and size
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / misc.ts
CommitLineData
ac81d1a0 1import 'multer'
7cde3b9c 2import validator from 'validator'
345da516 3import { sep } from 'path'
fdbda9e3 4
69818c93 5function exists (value: any) {
e4c55619
C
6 return value !== undefined && value !== null
7}
8
345da516
C
9function isSafePath (p: string) {
10 return exists(p) &&
11 (p + '').split(sep).every(part => {
f023a19c 12 return [ '..' ].includes(part) === false
345da516
C
13 })
14}
15
69818c93 16function isArray (value: any) {
e4c55619
C
17 return Array.isArray(value)
18}
19
2f1548fd
C
20function isNotEmptyIntArray (value: any) {
21 return Array.isArray(value) && value.every(v => validator.isInt('' + v)) && value.length !== 0
cef534ed
C
22}
23
09209296
C
24function isArrayOf (value: any, validator: (value: any) => boolean) {
25 return isArray(value) && value.every(v => validator(v))
26}
27
72c7248b
C
28function isDateValid (value: string) {
29 return exists(value) && validator.isISO8601(value)
30}
31
32function isIdValid (value: string) {
33 return exists(value) && validator.isInt('' + value)
34}
35
36function isUUIDValid (value: string) {
37 return exists(value) && validator.isUUID('' + value, 4)
38}
39
40function isIdOrUUIDValid (value: string) {
41 return isIdValid(value) || isUUIDValid(value)
42}
43
360329cc 44function isBooleanValid (value: any) {
47564bbe
C
45 return typeof value === 'boolean' || (typeof value === 'string' && validator.isBoolean(value))
46}
47
fb719404
C
48function isIntOrNull (value: any) {
49 return value === null || validator.isInt('' + value)
50}
51
360329cc 52function toIntOrNull (value: string) {
c8861d5d
C
53 const v = toValueOrNull(value)
54
55 if (v === null || v === undefined) return v
56 if (typeof v === 'number') return v
57
2b65c4e5 58 return validator.toInt('' + v)
c8861d5d
C
59}
60
61function toBooleanOrNull (value: any) {
62 const v = toValueOrNull(value)
63
64 if (v === null || v === undefined) return v
65 if (typeof v === 'boolean') return v
360329cc 66
2b65c4e5 67 return validator.toBoolean('' + v)
360329cc
C
68}
69
2efd32f6 70function toValueOrNull (value: string) {
360329cc
C
71 if (value === 'null') return null
72
73 return value
74}
75
f0a39880 76function toArray (value: any) {
d525fc39
C
77 if (value && isArray(value) === false) return [ value ]
78
79 return value
80}
81
f0a39880
C
82function toIntArray (value: any) {
83 if (!value) return []
84 if (isArray(value) === false) return [ validator.toInt(value) ]
85
86 return value.map(v => validator.toInt(v))
87}
88
ac81d1a0
C
89function isFileValid (
90 files: { [ fieldname: string ]: Express.Multer.File[] } | Express.Multer.File[],
91 mimeTypeRegex: string,
92 field: string,
c1e791ba 93 maxSize: number | null,
ac81d1a0
C
94 optional = false
95) {
96 // Should have files
97 if (!files) return optional
98 if (isArray(files)) return optional
99
100 // Should have a file
a1587156 101 const fileArray = files[field]
ac81d1a0
C
102 if (!fileArray || fileArray.length === 0) {
103 return optional
104 }
105
106 // The file should exist
a1587156 107 const file = fileArray[0]
ac81d1a0
C
108 if (!file || !file.originalname) return false
109
0c237b19 110 // Check size
c1e791ba 111 if ((maxSize !== null) && file.size > maxSize) return false
0c237b19 112
ac81d1a0
C
113 return new RegExp(`^${mimeTypeRegex}$`, 'i').test(file.mimetype)
114}
115
e4c55619
C
116// ---------------------------------------------------------------------------
117
65fcc311
C
118export {
119 exists,
09209296 120 isArrayOf,
2f1548fd 121 isNotEmptyIntArray,
72c7248b 122 isArray,
fb719404 123 isIntOrNull,
72c7248b 124 isIdValid,
345da516 125 isSafePath,
72c7248b
C
126 isUUIDValid,
127 isIdOrUUIDValid,
47564bbe 128 isDateValid,
2efd32f6 129 toValueOrNull,
c8861d5d 130 toBooleanOrNull,
ac81d1a0 131 isBooleanValid,
360329cc 132 toIntOrNull,
d525fc39 133 toArray,
f0a39880 134 toIntArray,
ac81d1a0 135 isFileValid
65fcc311 136}