Skip to content
Snippets Groups Projects
Commit e2461a93 authored by syuilo's avatar syuilo
Browse files

wip

parent 73ac13a2
No related branches found
No related tags found
No related merge requests found
Showing
with 122 additions and 242 deletions
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import DriveFile from '../../models/drive-file';
import serialize from '../../serializers/drive-file';
......@@ -19,33 +19,25 @@ module.exports = (params, user, app) =>
new Promise(async (res, rej) =>
{
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
// Get 'since_id' parameter
const [sinceId, sinceIdErr] = it(params.since_id).expect.id().qed();
if (sinceIdErr) return rej('invalid since_id param');
const since = params.since_id || null;
const max = params.max_id || null;
// Get 'max_id' parameter
const [maxId, maxIdErr] = it(params.max_id).expect.id().qed();
if (maxIdErr) return rej('invalid max_id param');
// Check if both of since_id and max_id is specified
if (since !== null && max !== null) {
if (sinceId !== null && maxId !== null) {
return rej('cannot set since_id and max_id');
}
// Get 'folder_id' parameter
let folder = params.folder_id;
if (folder === undefined || folder === null) {
folder = null;
} else {
folder = new mongo.ObjectID(folder);
}
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().default(null).qed();
if (folderIdErr) return rej('invalid folder_id param');
// Construct query
const sort = {
......@@ -53,16 +45,16 @@ module.exports = (params, user, app) =>
};
const query = {
user_id: user._id,
folder_id: folder
};
if (since !== null) {
folder_id: folderId
} as any;
if (sinceId) {
sort._id = 1;
query._id = {
$gt: new mongo.ObjectID(since)
$gt: sinceId
};
} else if (max !== null) {
} else if (maxId) {
query._id = {
$lt: new mongo.ObjectID(max)
$lt: maxId
};
}
......
......@@ -4,10 +4,8 @@
* Module dependencies
*/
import * as fs from 'fs';
import * as mongo from 'mongodb';
import File from '../../../models/drive-file';
import it from '../../../it';
import { validateFileName } from '../../../models/drive-file';
import User from '../../../models/user';
import serialize from '../../../serializers/drive-file';
import create from '../../../common/add-file-to-drive';
......@@ -45,15 +43,11 @@ module.exports = (file, params, user) =>
}
// Get 'folder_id' parameter
let folder = params.folder_id;
if (folder === undefined || folder === null) {
folder = null;
} else {
folder = new mongo.ObjectID(folder);
}
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().default(null).qed();
if (folderIdErr) return rej('invalid folder_id param');
// Create file
const driveFile = await create(user, buffer, name, null, folder);
const driveFile = await create(user, buffer, name, null, folderId);
// Serialize
const fileObj = await serialize(driveFile);
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFile from '../../../models/drive-file';
import serialize from '../../../serializers/drive-file';
......@@ -18,25 +18,19 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'name' parameter
const name = params.name;
if (name === undefined || name === null) {
return rej('name is required');
}
const [name, nameErr] = it(params.name).expect.string().required().qed();
if (nameErr) return rej('invalid name param');
// Get 'folder_id' parameter
let folder = params.folder_id;
if (folder === undefined || folder === null) {
folder = null;
} else {
folder = new mongo.ObjectID(folder);
}
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().default(null).qed();
if (folderIdErr) return rej('invalid folder_id param');
// Issue query
const files = await DriveFile
.find({
name: name,
user_id: user._id,
folder_id: folder
folder_id: folderId
}, {
fields: {
data: false
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFile from '../../../models/drive-file';
import serialize from '../../../serializers/drive-file';
......@@ -18,14 +18,13 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'file_id' parameter
const fileId = params.file_id;
if (fileId === undefined || fileId === null) {
return rej('file_id is required');
}
const [fileId, fileIdErr] = it(params.file_id).expect.id().required().qed();
if (fileIdErr) return rej('invalid file_id param');
// Fetch file
const file = await DriveFile
.findOne({
_id: new mongo.ObjectID(fileId),
_id: fileId,
user_id: user._id
}, {
fields: {
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFolder from '../../../models/drive-folder';
import DriveFile from '../../../models/drive-file';
import { validateFileName } from '../../../models/drive-file';
......@@ -21,19 +21,13 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'file_id' parameter
const fileId = params.file_id;
if (fileId === undefined || fileId === null) {
return rej('file_id is required');
}
// Validate id
if (!mongo.ObjectID.isValid(fileId)) {
return rej('incorrect file_id');
}
const [fileId, fileIdErr] = it(params.file_id).expect.id().required().qed();
if (fileIdErr) return rej('invalid file_id param');
// Fetch file
const file = await DriveFile
.findOne({
_id: new mongo.ObjectID(fileId),
_id: fileId,
user_id: user._id
}, {
fields: {
......@@ -46,29 +40,19 @@ module.exports = (params, user) =>
}
// Get 'name' parameter
let name = params.name;
if (name) {
name = name.trim();
if (validateFileName(name)) {
file.name = name;
} else {
return rej('invalid file name');
}
}
const [name, nameErr] = it(params.name).expect.string().validate(validateFileName).qed();
if (nameErr) return rej('invalid name param');
if (name) file.name = name;
// Get 'folder_id' parameter
let folderId = params.folder_id;
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().qed();
if (folderIdErr) return rej('invalid folder_id param');
if (folderId !== undefined) {
if (folderId === null) {
file.folder_id = null;
} else {
// Validate id
if (!mongo.ObjectID.isValid(folderId)) {
return rej('incorrect folder_id');
}
folderId = new mongo.ObjectID(folderId);
// Fetch folder
const folder = await DriveFolder
.findOne({
_id: folderId,
......
......@@ -5,10 +5,8 @@
*/
import * as URL from 'url';
const download = require('download');
import * as mongo from 'mongodb';
import File from '../../../models/drive-file';
import it from '../../../it';
import { validateFileName } from '../../../models/drive-file';
import User from '../../../models/user';
import serialize from '../../../serializers/drive-file';
import create from '../../../common/add-file-to-drive';
......@@ -24,10 +22,8 @@ module.exports = (params, user) =>
{
// Get 'url' parameter
// TODO: Validate this url
const url = params.url;
if (url == null) {
return rej('url is required');
}
const [url, urlErr] = it(params.url).expect.string().required().qed();
if (urlErr) return rej('invalid url param');
let name = URL.parse(url).pathname.split('/').pop();
if (!validateFileName(name)) {
......@@ -35,18 +31,14 @@ module.exports = (params, user) =>
}
// Get 'folder_id' parameter
let folder = params.folder_id;
if (folder === undefined || folder === null) {
folder = null;
} else {
folder = new mongo.ObjectID(folder);
}
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().default(null).qed();
if (folderIdErr) return rej('invalid folder_id param');
// Download file
const data = await download(url);
// Create file
const driveFile = await create(user, data, name, null, folder);
const driveFile = await create(user, data, name, null, folderId);
// Serialize
const fileObj = await serialize(driveFile);
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import DriveFolder from '../../models/drive-folder';
import serialize from '../../serializers/drive-folder';
......@@ -19,33 +19,25 @@ module.exports = (params, user, app) =>
new Promise(async (res, rej) =>
{
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
// Get 'since_id' parameter
const [sinceId, sinceIdErr] = it(params.since_id).expect.id().qed();
if (sinceIdErr) return rej('invalid since_id param');
const since = params.since_id || null;
const max = params.max_id || null;
// Get 'max_id' parameter
const [maxId, maxIdErr] = it(params.max_id).expect.id().qed();
if (maxIdErr) return rej('invalid max_id param');
// Check if both of since_id and max_id is specified
if (since !== null && max !== null) {
if (sinceId !== null && maxId !== null) {
return rej('cannot set since_id and max_id');
}
// Get 'folder_id' parameter
let folder = params.folder_id;
if (folder === undefined || folder === null) {
folder = null;
} else {
folder = new mongo.ObjectID(folder);
}
const [folderId, folderIdErr] = it(params.folder_id).expect.nullable.id().default(null).qed();
if (folderIdErr) return rej('invalid folder_id param');
// Construct query
const sort = {
......@@ -53,16 +45,16 @@ module.exports = (params, user, app) =>
};
const query = {
user_id: user._id,
parent_id: folder
};
if (since !== null) {
parent_id: folderId
} as any;
if (sinceId) {
sort._id = 1;
query._id = {
$gt: new mongo.ObjectID(since)
$gt: sinceId
};
} else if (max !== null) {
} else if (maxId) {
query._id = {
$lt: new mongo.ObjectID(max)
$lt: maxId
};
}
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFolder from '../../../models/drive-folder';
import { isValidFolderName } from '../../../models/drive-folder';
import serialize from '../../../serializers/drive-folder';
......@@ -20,33 +20,17 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'name' parameter
let name = params.name;
if (name !== undefined && name !== null) {
name = name.trim();
if (name.length === 0) {
name = null;
} else if (!isValidFolderName(name)) {
return rej('invalid name');
}
} else {
name = null;
}
const [name, nameErr] = it(params.name).expect.string().validate(isValidFolderName).default('無題のフォルダー').qed();
if (nameErr) return rej('invalid name param');
if (name == null) {
name = '無題のフォルダー';
}
// Get 'folder_id' parameter
let parentId = params.folder_id;
if (parentId === undefined || parentId === null) {
parentId = null;
} else {
parentId = new mongo.ObjectID(parentId);
}
// Get 'parent_id' parameter
const [parentId, parentIdErr] = it(params.parent_id).expect.nullable.id().default(null).qed();
if (parentIdErr) return rej('invalid parent_id param');
// If the parent folder is specified
let parent = null;
if (parentId !== null) {
if (parentId) {
// Fetch parent folder
parent = await DriveFolder
.findOne({
_id: parentId,
......@@ -54,7 +38,7 @@ module.exports = (params, user) =>
});
if (parent === null) {
return reject('parent-not-found');
return rej('parent-not-found');
}
}
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFolder from '../../../models/drive-folder';
import serialize from '../../../serializers/drive-folder';
......@@ -18,18 +18,12 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'name' parameter
const name = params.name;
if (name === undefined || name === null) {
return rej('name is required');
}
const [name, nameErr] = it(params.name).expect.string().required().qed();
if (nameErr) return rej('invalid name param');
// Get 'parent_id' parameter
let parentId = params.parent_id;
if (parentId === undefined || parentId === null) {
parentId = null;
} else {
parentId = new mongo.ObjectID(parentId);
}
const [parentId, parentIdErr] = it(params.parent_id).expect.id().qed();
if (parentIdErr) return rej('invalid parent_id param');
// Issue query
const folders = await DriveFolder
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFolder from '../../../models/drive-folder';
import serialize from '../../../serializers/drive-folder';
......@@ -18,15 +18,13 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'folder_id' parameter
const folderId = params.folder_id;
if (folderId === undefined || folderId === null) {
return rej('folder_id is required');
}
const [folderId, folderIdErr] = it(params.folder_id).expect.id().required().qed();
if (folderIdErr) return rej('invalid folder_id param');
// Get folder
const folder = await DriveFolder
.findOne({
_id: new mongo.ObjectID(folderId),
_id: folderId,
user_id: user._id
});
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import DriveFolder from '../../../models/drive-folder';
import { isValidFolderName } from '../../../models/drive-folder';
import serialize from '../../../serializers/drive-file';
......@@ -20,20 +20,13 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'folder_id' parameter
const folderId = params.folder_id;
if (folderId === undefined || folderId === null) {
return rej('folder_id is required');
}
// Validate id
if (!mongo.ObjectID.isValid(folderId)) {
return rej('incorrect folder_id');
}
const [folderId, folderIdErr] = it(params.folder_id).expect.id().required().qed();
if (folderIdErr) return rej('invalid folder_id param');
// Fetch folder
const folder = await DriveFolder
.findOne({
_id: new mongo.ObjectID(folderId),
_id: folderId,
user_id: user._id
});
......@@ -42,29 +35,17 @@ module.exports = (params, user) =>
}
// Get 'name' parameter
let name = params.name;
if (name) {
name = name.trim();
if (isValidFolderName(name)) {
folder.name = name;
} else {
return rej('invalid folder name');
}
}
const [name, nameErr] = it(params.name).expect.string().validate(isValidFolderName).qed();
if (nameErr) return rej('invalid name param');
if (name) folder.name = name;
// Get 'parent_id' parameter
let parentId = params.parent_id;
const [parentId, parentIdErr] = it(params.parent_id).expect.nullable.id().qed();
if (parentIdErr) return rej('invalid parent_id param');
if (parentId !== undefined) {
if (parentId === null) {
folder.parent_id = null;
} else {
// Validate id
if (!mongo.ObjectID.isValid(parentId)) {
return rej('incorrect parent_id');
}
parentId = new mongo.ObjectID(parentId);
// Get parent folder
const parent = await DriveFolder
.findOne({
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import DriveFile from '../../models/drive-file';
import serialize from '../../serializers/drive-file';
......@@ -18,35 +18,25 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
// Get 'since_id' parameter
const [sinceId, sinceIdErr] = it(params.since_id).expect.id().qed();
if (sinceIdErr) return rej('invalid since_id param');
const since = params.since_id || null;
const max = params.max_id || null;
// Get 'max_id' parameter
const [maxId, maxIdErr] = it(params.max_id).expect.id().qed();
if (maxIdErr) return rej('invalid max_id param');
// Check if both of since_id and max_id is specified
if (since !== null && max !== null) {
if (sinceId !== null && maxId !== null) {
return rej('cannot set since_id and max_id');
}
// Get 'type' parameter
let type = params.type;
if (type === undefined || type === null) {
type = null;
} else if (!/^[a-zA-Z\/\-\*]+$/.test(type)) {
return rej('invalid type format');
} else {
type = new RegExp(`^${type.replace(/\*/g, '.+?')}$`);
}
const [type, typeErr] = it(params.type).expect.string().match(/^[a-zA-Z\/\-\*]+$/).qed();
if (typeErr) return rej('invalid type param');
// Construct query
const sort = {
......@@ -54,19 +44,19 @@ module.exports = (params, user) =>
};
const query = {
user_id: user._id
};
if (since !== null) {
} as any;
if (sinceId) {
sort._id = 1;
query._id = {
$gt: new mongo.ObjectID(since)
$gt: sinceId
};
} else if (max !== null) {
} else if (maxId) {
query._id = {
$lt: new mongo.ObjectID(max)
$lt: maxId
};
}
if (type !== null) {
query.type = type;
query.type = new RegExp(`^${type.replace(/\*/g, '.+?')}$`);
}
// Issue query
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import User from '../../models/user';
import Following from '../../models/following';
import notify from '../../common/notify';
......@@ -23,15 +23,8 @@ module.exports = (params, user) =>
const follower = user;
// Get 'user_id' parameter
let userId = params.user_id;
if (userId === undefined || userId === null) {
return rej('user_id is required');
}
// Validate id
if (!mongo.ObjectID.isValid(userId)) {
return rej('incorrect user_id');
}
const [userId, userIdErr] = it(params.user_id, 'id', true);
if (userIdErr) return rej('invalid user_id param');
// 自分自身
if (user._id.equals(userId)) {
......@@ -40,7 +33,7 @@ module.exports = (params, user) =>
// Get followee
const followee = await User.findOne({
_id: new mongo.ObjectID(userId)
_id: userId
}, {
fields: {
data: false,
......
......@@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import User from '../../models/user';
import Following from '../../models/following';
import event from '../../event';
......@@ -22,15 +22,8 @@ module.exports = (params, user) =>
const follower = user;
// Get 'user_id' parameter
let userId = params.user_id;
if (userId === undefined || userId === null) {
return rej('user_id is required');
}
// Validate id
if (!mongo.ObjectID.isValid(userId)) {
return rej('incorrect user_id');
}
const [userId, userIdErr] = it(params.user_id, 'id', true);
if (userIdErr) return rej('invalid user_id param');
// Check if the followee is yourself
if (user._id.equals(userId)) {
......@@ -39,7 +32,7 @@ module.exports = (params, user) =>
// Get followee
const followee = await User.findOne({
_id: new mongo.ObjectID(userId)
_id: userId
}, {
fields: {
data: false,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment