diff options
Diffstat (limited to 'server/helpers/custom-validators')
-rw-r--r-- | server/helpers/custom-validators/misc.ts | 13 | ||||
-rw-r--r-- | server/helpers/custom-validators/pods.ts | 17 | ||||
-rw-r--r-- | server/helpers/custom-validators/remote/index.ts | 2 | ||||
-rw-r--r-- | server/helpers/custom-validators/remote/videos.ts | 32 | ||||
-rw-r--r-- | server/helpers/custom-validators/users.ts | 24 | ||||
-rw-r--r-- | server/helpers/custom-validators/videos.ts | 110 |
6 files changed, 134 insertions, 64 deletions
diff --git a/server/helpers/custom-validators/misc.ts b/server/helpers/custom-validators/misc.ts index 83f50a7fe..b1291ba7a 100644 --- a/server/helpers/custom-validators/misc.ts +++ b/server/helpers/custom-validators/misc.ts | |||
@@ -1,8 +1,8 @@ | |||
1 | function exists (value) { | 1 | function exists (value: any) { |
2 | return value !== undefined && value !== null | 2 | return value !== undefined && value !== null |
3 | } | 3 | } |
4 | 4 | ||
5 | function isArray (value) { | 5 | function isArray (value: any) { |
6 | return Array.isArray(value) | 6 | return Array.isArray(value) |
7 | } | 7 | } |
8 | 8 | ||
@@ -12,3 +12,12 @@ export { | |||
12 | exists, | 12 | exists, |
13 | isArray | 13 | isArray |
14 | } | 14 | } |
15 | |||
16 | declare global { | ||
17 | namespace ExpressValidator { | ||
18 | export interface Validator { | ||
19 | exists, | ||
20 | isArray | ||
21 | } | ||
22 | } | ||
23 | } | ||
diff --git a/server/helpers/custom-validators/pods.ts b/server/helpers/custom-validators/pods.ts index ee939ad04..ec9f26cc8 100644 --- a/server/helpers/custom-validators/pods.ts +++ b/server/helpers/custom-validators/pods.ts | |||
@@ -1,12 +1,12 @@ | |||
1 | import * as validator from 'validator' | 1 | import * as validator from 'validator' |
2 | 2 | ||
3 | import { isArray } from './misc' | 3 | import { isArray, exists } from './misc' |
4 | 4 | ||
5 | function isHostValid (host) { | 5 | function isHostValid (host: string) { |
6 | return validator.isURL(host) && host.split('://').length === 1 | 6 | return exists(host) && validator.isURL(host) && host.split('://').length === 1 |
7 | } | 7 | } |
8 | 8 | ||
9 | function isEachUniqueHostValid (hosts) { | 9 | function isEachUniqueHostValid (hosts: string[]) { |
10 | return isArray(hosts) && | 10 | return isArray(hosts) && |
11 | hosts.length !== 0 && | 11 | hosts.length !== 0 && |
12 | hosts.every(function (host) { | 12 | hosts.every(function (host) { |
@@ -20,3 +20,12 @@ export { | |||
20 | isEachUniqueHostValid, | 20 | isEachUniqueHostValid, |
21 | isHostValid | 21 | isHostValid |
22 | } | 22 | } |
23 | |||
24 | declare global { | ||
25 | namespace ExpressValidator { | ||
26 | export interface Validator { | ||
27 | isEachUniqueHostValid | ||
28 | isHostValid | ||
29 | } | ||
30 | } | ||
31 | } | ||
diff --git a/server/helpers/custom-validators/remote/index.ts b/server/helpers/custom-validators/remote/index.ts index d6f9a7e77..e29a9b767 100644 --- a/server/helpers/custom-validators/remote/index.ts +++ b/server/helpers/custom-validators/remote/index.ts | |||
@@ -1 +1 @@ | |||
export * from './videos'; | export * from './videos' | ||
diff --git a/server/helpers/custom-validators/remote/videos.ts b/server/helpers/custom-validators/remote/videos.ts index 4b904d011..1df7316aa 100644 --- a/server/helpers/custom-validators/remote/videos.ts +++ b/server/helpers/custom-validators/remote/videos.ts | |||
@@ -31,7 +31,7 @@ import { | |||
31 | 31 | ||
32 | const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS] | 32 | const ENDPOINT_ACTIONS = REQUEST_ENDPOINT_ACTIONS[REQUEST_ENDPOINTS.VIDEOS] |
33 | 33 | ||
34 | function isEachRemoteRequestVideosValid (requests) { | 34 | function isEachRemoteRequestVideosValid (requests: any[]) { |
35 | return isArray(requests) && | 35 | return isArray(requests) && |
36 | requests.every(function (request) { | 36 | requests.every(function (request) { |
37 | const video = request.data | 37 | const video = request.data |
@@ -61,7 +61,7 @@ function isEachRemoteRequestVideosValid (requests) { | |||
61 | }) | 61 | }) |
62 | } | 62 | } |
63 | 63 | ||
64 | function isEachRemoteRequestVideosQaduValid (requests) { | 64 | function isEachRemoteRequestVideosQaduValid (requests: any[]) { |
65 | return isArray(requests) && | 65 | return isArray(requests) && |
66 | requests.every(function (request) { | 66 | requests.every(function (request) { |
67 | const video = request.data | 67 | const video = request.data |
@@ -70,14 +70,14 @@ function isEachRemoteRequestVideosQaduValid (requests) { | |||
70 | 70 | ||
71 | return ( | 71 | return ( |
72 | isVideoRemoteIdValid(video.remoteId) && | 72 | isVideoRemoteIdValid(video.remoteId) && |
73 | (has(video, 'views') === false || isVideoViewsValid) && | 73 | (has(video, 'views') === false || isVideoViewsValid(video.views)) && |
74 | (has(video, 'likes') === false || isVideoLikesValid) && | 74 | (has(video, 'likes') === false || isVideoLikesValid(video.likes)) && |
75 | (has(video, 'dislikes') === false || isVideoDislikesValid) | 75 | (has(video, 'dislikes') === false || isVideoDislikesValid(video.dislikes)) |
76 | ) | 76 | ) |
77 | }) | 77 | }) |
78 | } | 78 | } |
79 | 79 | ||
80 | function isEachRemoteRequestVideosEventsValid (requests) { | 80 | function isEachRemoteRequestVideosEventsValid (requests: any[]) { |
81 | return isArray(requests) && | 81 | return isArray(requests) && |
82 | requests.every(function (request) { | 82 | requests.every(function (request) { |
83 | const eventData = request.data | 83 | const eventData = request.data |
@@ -100,9 +100,19 @@ export { | |||
100 | isEachRemoteRequestVideosEventsValid | 100 | isEachRemoteRequestVideosEventsValid |
101 | } | 101 | } |
102 | 102 | ||
103 | declare global { | ||
104 | namespace ExpressValidator { | ||
105 | export interface Validator { | ||
106 | isEachRemoteRequestVideosValid, | ||
107 | isEachRemoteRequestVideosQaduValid, | ||
108 | isEachRemoteRequestVideosEventsValid | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | |||
103 | // --------------------------------------------------------------------------- | 113 | // --------------------------------------------------------------------------- |
104 | 114 | ||
105 | function isCommonVideoAttributesValid (video) { | 115 | function isCommonVideoAttributesValid (video: any) { |
106 | return isVideoDateValid(video.createdAt) && | 116 | return isVideoDateValid(video.createdAt) && |
107 | isVideoDateValid(video.updatedAt) && | 117 | isVideoDateValid(video.updatedAt) && |
108 | isVideoCategoryValid(video.category) && | 118 | isVideoCategoryValid(video.category) && |
@@ -121,18 +131,18 @@ function isCommonVideoAttributesValid (video) { | |||
121 | isVideoDislikesValid(video.dislikes) | 131 | isVideoDislikesValid(video.dislikes) |
122 | } | 132 | } |
123 | 133 | ||
124 | function isRequestTypeAddValid (value) { | 134 | function isRequestTypeAddValid (value: string) { |
125 | return value === ENDPOINT_ACTIONS.ADD | 135 | return value === ENDPOINT_ACTIONS.ADD |
126 | } | 136 | } |
127 | 137 | ||
128 | function isRequestTypeUpdateValid (value) { | 138 | function isRequestTypeUpdateValid (value: string) { |
129 | return value === ENDPOINT_ACTIONS.UPDATE | 139 | return value === ENDPOINT_ACTIONS.UPDATE |
130 | } | 140 | } |
131 | 141 | ||
132 | function isRequestTypeRemoveValid (value) { | 142 | function isRequestTypeRemoveValid (value: string) { |
133 | return value === ENDPOINT_ACTIONS.REMOVE | 143 | return value === ENDPOINT_ACTIONS.REMOVE |
134 | } | 144 | } |
135 | 145 | ||
136 | function isRequestTypeReportAbuseValid (value) { | 146 | function isRequestTypeReportAbuseValid (value: string) { |
137 | return value === ENDPOINT_ACTIONS.REPORT_ABUSE | 147 | return value === ENDPOINT_ACTIONS.REPORT_ABUSE |
138 | } | 148 | } |
diff --git a/server/helpers/custom-validators/users.ts b/server/helpers/custom-validators/users.ts index f303ab8db..7792ffd74 100644 --- a/server/helpers/custom-validators/users.ts +++ b/server/helpers/custom-validators/users.ts | |||
@@ -1,25 +1,26 @@ | |||
1 | import { values } from 'lodash' | 1 | import { values } from 'lodash' |
2 | import * as validator from 'validator' | 2 | import * as validator from 'validator' |
3 | 3 | ||
4 | import { exists } from './misc' | ||
4 | import { CONSTRAINTS_FIELDS, USER_ROLES } from '../../initializers' | 5 | import { CONSTRAINTS_FIELDS, USER_ROLES } from '../../initializers' |
5 | const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS | 6 | const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS |
6 | 7 | ||
7 | function isUserPasswordValid (value) { | 8 | function isUserPasswordValid (value: string) { |
8 | return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD) | 9 | return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD) |
9 | } | 10 | } |
10 | 11 | ||
11 | function isUserRoleValid (value) { | 12 | function isUserRoleValid (value: string) { |
12 | return values(USER_ROLES).indexOf(value) !== -1 | 13 | return values(USER_ROLES).indexOf(value) !== -1 |
13 | } | 14 | } |
14 | 15 | ||
15 | function isUserUsernameValid (value) { | 16 | function isUserUsernameValid (value: string) { |
16 | const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max | 17 | const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max |
17 | const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min | 18 | const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min |
18 | return validator.matches(value, new RegExp(`^[a-zA-Z0-9._]{${min},${max}}$`)) | 19 | return exists(value) && validator.matches(value, new RegExp(`^[a-zA-Z0-9._]{${min},${max}}$`)) |
19 | } | 20 | } |
20 | 21 | ||
21 | function isUserDisplayNSFWValid (value) { | 22 | function isUserDisplayNSFWValid (value: any) { |
22 | return validator.isBoolean(value) | 23 | return typeof value === 'boolean' || (typeof value === 'string' && validator.isBoolean(value)) |
23 | } | 24 | } |
24 | 25 | ||
25 | // --------------------------------------------------------------------------- | 26 | // --------------------------------------------------------------------------- |
@@ -30,3 +31,14 @@ export { | |||
30 | isUserUsernameValid, | 31 | isUserUsernameValid, |
31 | isUserDisplayNSFWValid | 32 | isUserDisplayNSFWValid |
32 | } | 33 | } |
34 | |||
35 | declare global { | ||
36 | namespace ExpressValidator { | ||
37 | export interface Validator { | ||
38 | isUserPasswordValid, | ||
39 | isUserRoleValid, | ||
40 | isUserUsernameValid, | ||
41 | isUserDisplayNSFWValid | ||
42 | } | ||
43 | } | ||
44 | } | ||
diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index 6389998e1..c5ef4cb5f 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts | |||
@@ -9,105 +9,105 @@ import { | |||
9 | VIDEO_RATE_TYPES | 9 | VIDEO_RATE_TYPES |
10 | } from '../../initializers' | 10 | } from '../../initializers' |
11 | import { isUserUsernameValid } from './users' | 11 | import { isUserUsernameValid } from './users' |
12 | import { isArray } from './misc' | 12 | import { isArray, exists } from './misc' |
13 | 13 | ||
14 | const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS | 14 | const VIDEOS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEOS |
15 | const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES | 15 | const VIDEO_ABUSES_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_ABUSES |
16 | const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS | 16 | const VIDEO_EVENTS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.VIDEO_EVENTS |
17 | 17 | ||
18 | function isVideoAuthorValid (value) { | 18 | function isVideoAuthorValid (value: string) { |
19 | return isUserUsernameValid(value) | 19 | return isUserUsernameValid(value) |
20 | } | 20 | } |
21 | 21 | ||
22 | function isVideoDateValid (value) { | 22 | function isVideoDateValid (value: string) { |
23 | return validator.isDate(value) | 23 | return exists(value) && validator.isISO8601(value) |
24 | } | 24 | } |
25 | 25 | ||
26 | function isVideoCategoryValid (value) { | 26 | function isVideoCategoryValid (value: number) { |
27 | return VIDEO_CATEGORIES[value] !== undefined | 27 | return VIDEO_CATEGORIES[value] !== undefined |
28 | } | 28 | } |
29 | 29 | ||
30 | function isVideoLicenceValid (value) { | 30 | function isVideoLicenceValid (value: number) { |
31 | return VIDEO_LICENCES[value] !== undefined | 31 | return VIDEO_LICENCES[value] !== undefined |
32 | } | 32 | } |
33 | 33 | ||
34 | function isVideoLanguageValid (value) { | 34 | function isVideoLanguageValid (value: number) { |
35 | return value === null || VIDEO_LANGUAGES[value] !== undefined | 35 | return value === null || VIDEO_LANGUAGES[value] !== undefined |
36 | } | 36 | } |
37 | 37 | ||
38 | function isVideoNSFWValid (value) { | 38 | function isVideoNSFWValid (value: any) { |
39 | return validator.isBoolean(value) | 39 | return typeof value === 'boolean' || (typeof value === 'string' && validator.isBoolean(value)) |
40 | } | 40 | } |
41 | 41 | ||
42 | function isVideoDescriptionValid (value) { | 42 | function isVideoDescriptionValid (value: string) { |
43 | return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION) | 43 | return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION) |
44 | } | 44 | } |
45 | 45 | ||
46 | function isVideoDurationValid (value) { | 46 | function isVideoDurationValid (value: string) { |
47 | return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION) | 47 | return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION) |
48 | } | 48 | } |
49 | 49 | ||
50 | function isVideoExtnameValid (value) { | 50 | function isVideoExtnameValid (value: string) { |
51 | return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1 | 51 | return VIDEOS_CONSTRAINTS_FIELDS.EXTNAME.indexOf(value) !== -1 |
52 | } | 52 | } |
53 | 53 | ||
54 | function isVideoInfoHashValid (value) { | 54 | function isVideoInfoHashValid (value: string) { |
55 | return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH) | 55 | return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.INFO_HASH) |
56 | } | 56 | } |
57 | 57 | ||
58 | function isVideoNameValid (value) { | 58 | function isVideoNameValid (value: string) { |
59 | return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME) | 59 | return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME) |
60 | } | 60 | } |
61 | 61 | ||
62 | function isVideoTagsValid (tags) { | 62 | function isVideoTagsValid (tags: string[]) { |
63 | return isArray(tags) && | 63 | return isArray(tags) && |
64 | validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) && | 64 | validator.isInt(tags.length.toString(), VIDEOS_CONSTRAINTS_FIELDS.TAGS) && |
65 | tags.every(function (tag) { | 65 | tags.every(function (tag) { |
66 | return validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG) | 66 | return exists(tag) && validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG) |
67 | }) | 67 | }) |
68 | } | 68 | } |
69 | 69 | ||
70 | function isVideoThumbnailValid (value) { | 70 | function isVideoThumbnailValid (value: string) { |
71 | return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL) | 71 | return exists(value) && validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL) |
72 | } | 72 | } |
73 | 73 | ||
74 | function isVideoThumbnailDataValid (value) { | 74 | function isVideoThumbnailDataValid (value: string) { |
75 | return validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA) | 75 | return exists(value) && validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL_DATA) |
76 | } | 76 | } |
77 | 77 | ||
78 | function isVideoRemoteIdValid (value) { | 78 | function isVideoRemoteIdValid (value: string) { |
79 | return validator.isUUID(value, 4) | 79 | return exists(value) && validator.isUUID(value, 4) |
80 | } | 80 | } |
81 | 81 | ||
82 | function isVideoAbuseReasonValid (value) { | 82 | function isVideoAbuseReasonValid (value: string) { |
83 | return validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON) | 83 | return exists(value) && validator.isLength(value, VIDEO_ABUSES_CONSTRAINTS_FIELDS.REASON) |
84 | } | 84 | } |
85 | 85 | ||
86 | function isVideoAbuseReporterUsernameValid (value) { | 86 | function isVideoAbuseReporterUsernameValid (value: string) { |
87 | return isUserUsernameValid(value) | 87 | return isUserUsernameValid(value) |
88 | } | 88 | } |
89 | 89 | ||
90 | function isVideoViewsValid (value) { | 90 | function isVideoViewsValid (value: string) { |
91 | return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS) | 91 | return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.VIEWS) |
92 | } | 92 | } |
93 | 93 | ||
94 | function isVideoLikesValid (value) { | 94 | function isVideoLikesValid (value: string) { |
95 | return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES) | 95 | return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.LIKES) |
96 | } | 96 | } |
97 | 97 | ||
98 | function isVideoDislikesValid (value) { | 98 | function isVideoDislikesValid (value: string) { |
99 | return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES) | 99 | return exists(value) && validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DISLIKES) |
100 | } | 100 | } |
101 | 101 | ||
102 | function isVideoEventCountValid (value) { | 102 | function isVideoEventCountValid (value: string) { |
103 | return validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT) | 103 | return exists(value) && validator.isInt(value + '', VIDEO_EVENTS_CONSTRAINTS_FIELDS.COUNT) |
104 | } | 104 | } |
105 | 105 | ||
106 | function isVideoRatingTypeValid (value) { | 106 | function isVideoRatingTypeValid (value: string) { |
107 | return values(VIDEO_RATE_TYPES).indexOf(value) !== -1 | 107 | return values(VIDEO_RATE_TYPES).indexOf(value) !== -1 |
108 | } | 108 | } |
109 | 109 | ||
110 | function isVideoFile (value, files) { | 110 | function isVideoFile (value: string, files: { [ fieldname: string ]: Express.Multer.File[] }) { |
111 | // Should have files | 111 | // Should have files |
112 | if (!files) return false | 112 | if (!files) return false |
113 | 113 | ||
@@ -149,3 +149,33 @@ export { | |||
149 | isVideoDislikesValid, | 149 | isVideoDislikesValid, |
150 | isVideoEventCountValid | 150 | isVideoEventCountValid |
151 | } | 151 | } |
152 | |||
153 | declare global { | ||
154 | namespace ExpressValidator { | ||
155 | export interface Validator { | ||
156 | isVideoAuthorValid, | ||
157 | isVideoDateValid, | ||
158 | isVideoCategoryValid, | ||
159 | isVideoLicenceValid, | ||
160 | isVideoLanguageValid, | ||
161 | isVideoNSFWValid, | ||
162 | isVideoDescriptionValid, | ||
163 | isVideoDurationValid, | ||
164 | isVideoInfoHashValid, | ||
165 | isVideoNameValid, | ||
166 | isVideoTagsValid, | ||
167 | isVideoThumbnailValid, | ||
168 | isVideoThumbnailDataValid, | ||
169 | isVideoExtnameValid, | ||
170 | isVideoRemoteIdValid, | ||
171 | isVideoAbuseReasonValid, | ||
172 | isVideoAbuseReporterUsernameValid, | ||
173 | isVideoFile, | ||
174 | isVideoViewsValid, | ||
175 | isVideoLikesValid, | ||
176 | isVideoRatingTypeValid, | ||
177 | isVideoDislikesValid, | ||
178 | isVideoEventCountValid | ||
179 | } | ||
180 | } | ||
181 | } | ||