From e4c556196d7b31111f17596840d2e1d60caa7dcb Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sun, 31 Jul 2016 20:58:43 +0200
Subject: Server: reorganize express validators

---
 server/helpers/custom-validators/index.js  |  15 ++++
 server/helpers/custom-validators/misc.js   |  18 +++++
 server/helpers/custom-validators/users.js  |  18 +++++
 server/helpers/custom-validators/videos.js | 106 +++++++++++++++++++++++++++++
 4 files changed, 157 insertions(+)
 create mode 100644 server/helpers/custom-validators/index.js
 create mode 100644 server/helpers/custom-validators/misc.js
 create mode 100644 server/helpers/custom-validators/users.js
 create mode 100644 server/helpers/custom-validators/videos.js

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/index.js b/server/helpers/custom-validators/index.js
new file mode 100644
index 000000000..ab3066822
--- /dev/null
+++ b/server/helpers/custom-validators/index.js
@@ -0,0 +1,15 @@
+'use strict'
+
+const miscValidators = require('./misc')
+const usersValidators = require('./users')
+const videosValidators = require('./videos')
+
+const validators = {
+  misc: miscValidators,
+  users: usersValidators,
+  videos: videosValidators
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = validators
diff --git a/server/helpers/custom-validators/misc.js b/server/helpers/custom-validators/misc.js
new file mode 100644
index 000000000..782ae3dee
--- /dev/null
+++ b/server/helpers/custom-validators/misc.js
@@ -0,0 +1,18 @@
+'use strict'
+
+const miscValidators = {
+  exists: exists,
+  isArray: isArray
+}
+
+function exists (value) {
+  return value !== undefined && value !== null
+}
+
+function isArray (value) {
+  return Array.isArray(value)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = miscValidators
diff --git a/server/helpers/custom-validators/users.js b/server/helpers/custom-validators/users.js
new file mode 100644
index 000000000..41e00d046
--- /dev/null
+++ b/server/helpers/custom-validators/users.js
@@ -0,0 +1,18 @@
+'use strict'
+
+const validator = require('express-validator').validator
+
+const constants = require('../../initializers/constants')
+const USERS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.USERS
+
+const usersValidators = {
+  isUserUsernameValid: isUserUsernameValid
+}
+
+function isUserUsernameValid (value) {
+  return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.USERNAME)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = usersValidators
diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js
new file mode 100644
index 000000000..39a19cbd7
--- /dev/null
+++ b/server/helpers/custom-validators/videos.js
@@ -0,0 +1,106 @@
+'use strict'
+
+const validator = require('express-validator').validator
+
+const constants = require('../../initializers/constants')
+const usersValidators = require('./users')
+const miscValidators = require('./misc')
+const VIDEOS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.VIDEOS
+
+const videosValidators = {
+  isEachRemoteVideosValid: isEachRemoteVideosValid,
+  isVideoAuthorValid: isVideoAuthorValid,
+  isVideoDateValid: isVideoDateValid,
+  isVideoDescriptionValid: isVideoDescriptionValid,
+  isVideoDurationValid: isVideoDurationValid,
+  isVideoMagnetUriValid: isVideoMagnetUriValid,
+  isVideoNameValid: isVideoNameValid,
+  isVideoPodUrlValid: isVideoPodUrlValid,
+  isVideoTagsValid: isVideoTagsValid,
+  isVideoThumbnailValid: isVideoThumbnailValid,
+  isVideoThumbnail64Valid: isVideoThumbnail64Valid
+}
+
+function isEachRemoteVideosValid (requests) {
+  return requests.every(function (request) {
+    const video = request.data
+    return (
+      isRequestTypeAddValid(request.type) &&
+      isVideoAuthorValid(video.author) &&
+      isVideoDateValid(video.createdDate) &&
+      isVideoDescriptionValid(video.description) &&
+      isVideoDurationValid(video.duration) &&
+      isVideoMagnetUriValid(video.magnetUri) &&
+      isVideoNameValid(video.name) &&
+      isVideoPodUrlValid(video.podUrl) &&
+      isVideoTagsValid(video.tags) &&
+      isVideoThumbnail64Valid(video.thumbnailBase64)
+    ) ||
+    (
+      isRequestTypeRemoveValid(request.type) &&
+      isVideoNameValid(video.name) &&
+      isVideoMagnetUriValid(video.magnetUri)
+    )
+  })
+}
+
+function isVideoAuthorValid (value) {
+  return usersValidators.isUserUsernameValid(usersValidators)
+}
+
+function isVideoDateValid (value) {
+  return validator.isDate(value)
+}
+
+function isVideoDescriptionValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
+}
+
+function isVideoDurationValid (value) {
+  return validator.isInt(value + '', VIDEOS_CONSTRAINTS_FIELDS.DURATION)
+}
+
+function isVideoMagnetUriValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.MAGNET_URI)
+}
+
+function isVideoNameValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.NAME)
+}
+
+function isVideoPodUrlValid (value) {
+  // TODO: set options (TLD...)
+  return validator.isURL(value)
+}
+
+function isVideoTagsValid (tags) {
+  return miscValidators.isArray(tags) &&
+         validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
+         tags.every(function (tag) {
+           return validator.isAlphanumeric(tag) &&
+                  validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
+         })
+}
+
+function isVideoThumbnailValid (value) {
+  return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL)
+}
+
+function isVideoThumbnail64Valid (value) {
+  return validator.isBase64(value) &&
+         validator.isByteLength(value, VIDEOS_CONSTRAINTS_FIELDS.THUMBNAIL64)
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = videosValidators
+
+// ---------------------------------------------------------------------------
+
+function isRequestTypeAddValid (value) {
+  return value === 'add'
+}
+
+function isRequestTypeRemoveValid (value) {
+  return value === 'remove'
+}
-- 
cgit v1.2.3


From 9bd2662976a75d3b03364cdbe6419e57c80f99a6 Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Thu, 4 Aug 2016 22:32:36 +0200
Subject: Implement user API (create, update, remove, list)

---
 server/helpers/custom-validators/users.js  | 15 ++++++++++++++-
 server/helpers/custom-validators/videos.js |  2 +-
 2 files changed, 15 insertions(+), 2 deletions(-)

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/users.js b/server/helpers/custom-validators/users.js
index 41e00d046..0e92989e5 100644
--- a/server/helpers/custom-validators/users.js
+++ b/server/helpers/custom-validators/users.js
@@ -1,16 +1,29 @@
 'use strict'
 
 const validator = require('express-validator').validator
+const values = require('lodash/values')
 
 const constants = require('../../initializers/constants')
 const USERS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.USERS
 
 const usersValidators = {
+  isUserPasswordValid: isUserPasswordValid,
+  isUserRoleValid: isUserRoleValid,
   isUserUsernameValid: isUserUsernameValid
 }
 
+function isUserPasswordValid (value) {
+  return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.PASSWORD)
+}
+
+function isUserRoleValid (value) {
+  return values(constants.USER_ROLES).indexOf(value) !== -1
+}
+
 function isUserUsernameValid (value) {
-  return validator.isLength(value, USERS_CONSTRAINTS_FIELDS.USERNAME)
+  const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
+  const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
+  return validator.matches(value, new RegExp(`^[a-zA-Z0-9._]{${min},${max}}$`))
 }
 
 // ---------------------------------------------------------------------------
diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js
index 39a19cbd7..cffa973f8 100644
--- a/server/helpers/custom-validators/videos.js
+++ b/server/helpers/custom-validators/videos.js
@@ -45,7 +45,7 @@ function isEachRemoteVideosValid (requests) {
 }
 
 function isVideoAuthorValid (value) {
-  return usersValidators.isUserUsernameValid(usersValidators)
+  return usersValidators.isUserUsernameValid(value)
 }
 
 function isVideoDateValid (value) {
-- 
cgit v1.2.3


From 1e2564d3927ce4ca4ca9a09930da6da7ebb4e9a1 Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sat, 20 Aug 2016 16:59:25 +0200
Subject: Server: make friends urls come from the request instead of the
 configuration file

---
 server/helpers/custom-validators/misc.js | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/misc.js b/server/helpers/custom-validators/misc.js
index 782ae3dee..13904ea1b 100644
--- a/server/helpers/custom-validators/misc.js
+++ b/server/helpers/custom-validators/misc.js
@@ -1,8 +1,11 @@
 'use strict'
 
+const validator = require('express-validator').validator
+
 const miscValidators = {
   exists: exists,
-  isArray: isArray
+  isArray: isArray,
+  isEachUrl: isEachUrl
 }
 
 function exists (value) {
@@ -13,6 +16,12 @@ function isArray (value) {
   return Array.isArray(value)
 }
 
+function isEachUrl (urls) {
+  return urls.every(function (url) {
+    return validator.isURL(url)
+  })
+}
+
 // ---------------------------------------------------------------------------
 
 module.exports = miscValidators
-- 
cgit v1.2.3


From 6c1a098b4107cc923631d8cd94ed54c184fcec7d Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sun, 21 Aug 2016 09:54:46 +0200
Subject: Server: fix remote videos requests validator

---
 server/helpers/custom-validators/videos.js | 41 +++++++++++++++---------------
 1 file changed, 21 insertions(+), 20 deletions(-)

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js
index cffa973f8..ebe927208 100644
--- a/server/helpers/custom-validators/videos.js
+++ b/server/helpers/custom-validators/videos.js
@@ -22,26 +22,27 @@ const videosValidators = {
 }
 
 function isEachRemoteVideosValid (requests) {
-  return requests.every(function (request) {
-    const video = request.data
-    return (
-      isRequestTypeAddValid(request.type) &&
-      isVideoAuthorValid(video.author) &&
-      isVideoDateValid(video.createdDate) &&
-      isVideoDescriptionValid(video.description) &&
-      isVideoDurationValid(video.duration) &&
-      isVideoMagnetUriValid(video.magnetUri) &&
-      isVideoNameValid(video.name) &&
-      isVideoPodUrlValid(video.podUrl) &&
-      isVideoTagsValid(video.tags) &&
-      isVideoThumbnail64Valid(video.thumbnailBase64)
-    ) ||
-    (
-      isRequestTypeRemoveValid(request.type) &&
-      isVideoNameValid(video.name) &&
-      isVideoMagnetUriValid(video.magnetUri)
-    )
-  })
+  return miscValidators.isArray(requests) &&
+    requests.every(function (request) {
+      const video = request.data
+      return (
+        isRequestTypeAddValid(request.type) &&
+        isVideoAuthorValid(video.author) &&
+        isVideoDateValid(video.createdDate) &&
+        isVideoDescriptionValid(video.description) &&
+        isVideoDurationValid(video.duration) &&
+        isVideoMagnetUriValid(video.magnetUri) &&
+        isVideoNameValid(video.name) &&
+        isVideoPodUrlValid(video.podUrl) &&
+        isVideoTagsValid(video.tags) &&
+        isVideoThumbnail64Valid(video.thumbnailBase64)
+      ) ||
+      (
+        isRequestTypeRemoveValid(request.type) &&
+        isVideoNameValid(video.name) &&
+        isVideoMagnetUriValid(video.magnetUri)
+      )
+    })
 }
 
 function isVideoAuthorValid (value) {
-- 
cgit v1.2.3


From d57d6f2605f4ac4a81f9a8594433bb7b65f108b9 Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sun, 21 Aug 2016 10:08:40 +0200
Subject: Server: fix makefriends validation and tests

---
 server/helpers/custom-validators/index.js |  2 ++
 server/helpers/custom-validators/misc.js  | 11 +----------
 server/helpers/custom-validators/pods.js  | 21 +++++++++++++++++++++
 3 files changed, 24 insertions(+), 10 deletions(-)
 create mode 100644 server/helpers/custom-validators/pods.js

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/index.js b/server/helpers/custom-validators/index.js
index ab3066822..96b5b20b9 100644
--- a/server/helpers/custom-validators/index.js
+++ b/server/helpers/custom-validators/index.js
@@ -1,11 +1,13 @@
 'use strict'
 
 const miscValidators = require('./misc')
+const podsValidators = require('./pods')
 const usersValidators = require('./users')
 const videosValidators = require('./videos')
 
 const validators = {
   misc: miscValidators,
+  pods: podsValidators,
   users: usersValidators,
   videos: videosValidators
 }
diff --git a/server/helpers/custom-validators/misc.js b/server/helpers/custom-validators/misc.js
index 13904ea1b..782ae3dee 100644
--- a/server/helpers/custom-validators/misc.js
+++ b/server/helpers/custom-validators/misc.js
@@ -1,11 +1,8 @@
 'use strict'
 
-const validator = require('express-validator').validator
-
 const miscValidators = {
   exists: exists,
-  isArray: isArray,
-  isEachUrl: isEachUrl
+  isArray: isArray
 }
 
 function exists (value) {
@@ -16,12 +13,6 @@ function isArray (value) {
   return Array.isArray(value)
 }
 
-function isEachUrl (urls) {
-  return urls.every(function (url) {
-    return validator.isURL(url)
-  })
-}
-
 // ---------------------------------------------------------------------------
 
 module.exports = miscValidators
diff --git a/server/helpers/custom-validators/pods.js b/server/helpers/custom-validators/pods.js
new file mode 100644
index 000000000..28d04a05d
--- /dev/null
+++ b/server/helpers/custom-validators/pods.js
@@ -0,0 +1,21 @@
+'use strict'
+
+const validator = require('express-validator').validator
+
+const miscValidators = require('./misc')
+
+const podsValidators = {
+  isEachUniqueUrlValid: isEachUniqueUrlValid
+}
+
+function isEachUniqueUrlValid (urls) {
+  return miscValidators.isArray(urls) &&
+    urls.length !== 0 &&
+    urls.every(function (url) {
+      return validator.isURL(url) && urls.indexOf(url) === urls.lastIndexOf(url)
+    })
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = podsValidators
-- 
cgit v1.2.3


From c4403b29ad4db097af528a7f04eea07e0ed320d0 Mon Sep 17 00:00:00 2001
From: Chocobozzz <florian.bigard@gmail.com>
Date: Sun, 2 Oct 2016 12:19:02 +0200
Subject: Server: remove useless hash affectations

---
 server/helpers/custom-validators/misc.js   |  4 ++--
 server/helpers/custom-validators/pods.js   |  2 +-
 server/helpers/custom-validators/users.js  |  6 +++---
 server/helpers/custom-validators/videos.js | 22 +++++++++++-----------
 4 files changed, 17 insertions(+), 17 deletions(-)

(limited to 'server/helpers/custom-validators')

diff --git a/server/helpers/custom-validators/misc.js b/server/helpers/custom-validators/misc.js
index 782ae3dee..052726241 100644
--- a/server/helpers/custom-validators/misc.js
+++ b/server/helpers/custom-validators/misc.js
@@ -1,8 +1,8 @@
 'use strict'
 
 const miscValidators = {
-  exists: exists,
-  isArray: isArray
+  exists,
+  isArray
 }
 
 function exists (value) {
diff --git a/server/helpers/custom-validators/pods.js b/server/helpers/custom-validators/pods.js
index 28d04a05d..40f8b5d0b 100644
--- a/server/helpers/custom-validators/pods.js
+++ b/server/helpers/custom-validators/pods.js
@@ -5,7 +5,7 @@ const validator = require('express-validator').validator
 const miscValidators = require('./misc')
 
 const podsValidators = {
-  isEachUniqueUrlValid: isEachUniqueUrlValid
+  isEachUniqueUrlValid
 }
 
 function isEachUniqueUrlValid (urls) {
diff --git a/server/helpers/custom-validators/users.js b/server/helpers/custom-validators/users.js
index 0e92989e5..88fa1592e 100644
--- a/server/helpers/custom-validators/users.js
+++ b/server/helpers/custom-validators/users.js
@@ -7,9 +7,9 @@ const constants = require('../../initializers/constants')
 const USERS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.USERS
 
 const usersValidators = {
-  isUserPasswordValid: isUserPasswordValid,
-  isUserRoleValid: isUserRoleValid,
-  isUserUsernameValid: isUserUsernameValid
+  isUserPasswordValid,
+  isUserRoleValid,
+  isUserUsernameValid
 }
 
 function isUserPasswordValid (value) {
diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js
index ebe927208..a507ff686 100644
--- a/server/helpers/custom-validators/videos.js
+++ b/server/helpers/custom-validators/videos.js
@@ -8,17 +8,17 @@ const miscValidators = require('./misc')
 const VIDEOS_CONSTRAINTS_FIELDS = constants.CONSTRAINTS_FIELDS.VIDEOS
 
 const videosValidators = {
-  isEachRemoteVideosValid: isEachRemoteVideosValid,
-  isVideoAuthorValid: isVideoAuthorValid,
-  isVideoDateValid: isVideoDateValid,
-  isVideoDescriptionValid: isVideoDescriptionValid,
-  isVideoDurationValid: isVideoDurationValid,
-  isVideoMagnetUriValid: isVideoMagnetUriValid,
-  isVideoNameValid: isVideoNameValid,
-  isVideoPodUrlValid: isVideoPodUrlValid,
-  isVideoTagsValid: isVideoTagsValid,
-  isVideoThumbnailValid: isVideoThumbnailValid,
-  isVideoThumbnail64Valid: isVideoThumbnail64Valid
+  isEachRemoteVideosValid,
+  isVideoAuthorValid,
+  isVideoDateValid,
+  isVideoDescriptionValid,
+  isVideoDurationValid,
+  isVideoMagnetUriValid,
+  isVideoNameValid,
+  isVideoPodUrlValid,
+  isVideoTagsValid,
+  isVideoThumbnailValid,
+  isVideoThumbnail64Valid
 }
 
 function isEachRemoteVideosValid (requests) {
-- 
cgit v1.2.3