summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-03-02 05:31:30 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-03-02 05:31:30 +0900
commitf3f5869f5214085637276b077ece739eac2e5dff (patch)
tree0fde0dcf89140791e902f7b85578d55e30600c57 /src
parentExtract hasDuplicates function (diff)
downloadsharkey-f3f5869f5214085637276b077ece739eac2e5dff.tar.gz
sharkey-f3f5869f5214085637276b077ece739eac2e5dff.tar.bz2
sharkey-f3f5869f5214085637276b077ece739eac2e5dff.zip
Add 'set' type
Diffstat (limited to 'src')
-rw-r--r--src/api/endpoints/posts/create.js9
-rw-r--r--src/api/validator.ts12
2 files changed, 14 insertions, 7 deletions
diff --git a/src/api/endpoints/posts/create.js b/src/api/endpoints/posts/create.js
index 92aeb3d08e..eadc886c5c 100644
--- a/src/api/endpoints/posts/create.js
+++ b/src/api/endpoints/posts/create.js
@@ -4,7 +4,6 @@
* Module dependencies
*/
import validate from '../../validator';
-import hasDuplicates from '../../../common/has-duplicates';
import parse from '../../../common/text';
import { Post, isValidText } from '../../models/post';
import User from '../../models/user';
@@ -32,10 +31,9 @@ module.exports = (params, user, app) =>
if (textErr) return rej('invalid text');
// Get 'media_ids' parameter
- const [mediaIds, mediaIdsErr] = validate(params.media_ids, 'array', false, [
- x => !hasDuplicates(x),
+ const [mediaIds, mediaIdsErr] = validate(params.media_ids, 'set', false,
x => x.length > 4 ? 'too many media' : true
- ]);
+ );
if (mediaIdsErr) return rej('invalid media_ids');
let files = [];
@@ -135,8 +133,7 @@ module.exports = (params, user, app) =>
let poll = null;
if (_poll !== null) {
- const [pollChoices, pollChoicesErr] = validate(params.poll, 'array', false, [
- choices => !hasDuplicates(choices),
+ const [pollChoices, pollChoicesErr] = validate(params.poll, 'set', false, [
choices => {
const shouldReject = choices.some(choice => {
if (typeof choice != 'string') return true;
diff --git a/src/api/validator.ts b/src/api/validator.ts
index 830786a18d..3c426054e8 100644
--- a/src/api/validator.ts
+++ b/src/api/validator.ts
@@ -1,6 +1,7 @@
import * as mongo from 'mongodb';
+import hasDuplicates from '../common/has-duplicates';
-type Type = 'id' | 'string' | 'number' | 'boolean' | 'array' | 'object';
+type Type = 'id' | 'string' | 'number' | 'boolean' | 'array' | 'set' | 'object';
type Validator<T> = ((x: T) => boolean | string) | ((x: T) => boolean | string)[];
@@ -9,6 +10,7 @@ function validate(value: any, type: 'string', isRequired?: boolean, validator?:
function validate(value: any, type: 'number', isRequired?: boolean, validator?: Validator<number>): [number, string];
function validate(value: any, type: 'boolean', isRequired?: boolean): [boolean, string];
function validate(value: any, type: 'array', isRequired?: boolean, validator?: Validator<any[]>): [any[], string];
+function validate(value: any, type: 'set', isRequired?: boolean, validator?: Validator<Set<any>>): [Set<any>, string];
function validate(value: any, type: 'object', isRequired?: boolean, validator?: Validator<Object>): [Object, string];
function validate<T>(value: any, type: Type, isRequired?: boolean, validator?: Validator<T>): [T, string] {
if (value === undefined || value === null) {
@@ -50,6 +52,14 @@ function validate<T>(value: any, type: Type, isRequired?: boolean, validator?: V
}
break;
+ case 'set':
+ if (!Array.isArray(value)) {
+ return [null, 'must-be-an-array'];
+ } else if (hasDuplicates(value)) {
+ return [null, 'duplicated-contents'];
+ }
+ break;
+
case 'object':
if (typeof value != 'object') {
return [null, 'must-be-an-onject'];