diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2017-02-17 05:46:14 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2017-02-17 05:46:14 +0900 |
| commit | f004673ea5ef041598f5c42c395833454903fe08 (patch) | |
| tree | 4c30e450780c99edef572ed68b4dcc15b39e043a /src/api | |
| parent | [Client] Refactor (diff) | |
| download | sharkey-f004673ea5ef041598f5c42c395833454903fe08.tar.gz sharkey-f004673ea5ef041598f5c42c395833454903fe08.tar.bz2 sharkey-f004673ea5ef041598f5c42c395833454903fe08.zip | |
NEW FEATURE: Add url upload
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/endpoints.ts | 27 | ||||
| -rw-r--r-- | src/api/endpoints/drive/files/upload_from_url.js | 55 |
2 files changed, 69 insertions, 13 deletions
diff --git a/src/api/endpoints.ts b/src/api/endpoints.ts index 963d1df258..37e3348b86 100644 --- a/src/api/endpoints.ts +++ b/src/api/endpoints.ts @@ -54,19 +54,20 @@ export default [ { name: 'notifications/mark_as_read', shouldBeSignin: true, kind: 'notification-write' }, { name: 'notifications/mark_as_read_all', shouldBeSignin: true, kind: 'notification-write' }, - { name: 'drive', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/stream', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/files', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/files/create', shouldBeSignin: true, limitDuration: hour, limitMax: 100, withFile: true, kind: 'drive-write' }, - { name: 'drive/files/show', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/files/find', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/files/delete', shouldBeSignin: true, kind: 'drive-write' }, - { name: 'drive/files/update', shouldBeSignin: true, kind: 'drive-write' }, - { name: 'drive/folders', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/folders/create', shouldBeSignin: true, limitDuration: hour, limitMax: 50, kind: 'drive-write' }, - { name: 'drive/folders/show', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/folders/find', shouldBeSignin: true, kind: 'drive-read' }, - { name: 'drive/folders/update', shouldBeSignin: true, kind: 'drive-write' }, + { name: 'drive', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/stream', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/files', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/files/create', shouldBeSignin: true, limitDuration: hour, limitMax: 100, withFile: true, kind: 'drive-write' }, + { name: 'drive/files/upload_from_url', shouldBeSignin: true, limitDuration: hour, limitMax: 10, kind: 'drive-write' }, + { name: 'drive/files/show', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/files/find', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/files/delete', shouldBeSignin: true, kind: 'drive-write' }, + { name: 'drive/files/update', shouldBeSignin: true, kind: 'drive-write' }, + { name: 'drive/folders', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/folders/create', shouldBeSignin: true, limitDuration: hour, limitMax: 50, kind: 'drive-write' }, + { name: 'drive/folders/show', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/folders/find', shouldBeSignin: true, kind: 'drive-read' }, + { name: 'drive/folders/update', shouldBeSignin: true, kind: 'drive-write' }, { name: 'users', shouldBeSignin: false }, { name: 'users/show', shouldBeSignin: false }, diff --git a/src/api/endpoints/drive/files/upload_from_url.js b/src/api/endpoints/drive/files/upload_from_url.js new file mode 100644 index 0000000000..3cc91b946b --- /dev/null +++ b/src/api/endpoints/drive/files/upload_from_url.js @@ -0,0 +1,55 @@ +'use strict'; + +/** + * Module dependencies + */ +import * as URL from 'url'; +const download = require('download'); +import * as mongo from 'mongodb'; +import File from '../../../models/drive-file'; +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'; + +/** + * Create a file from a URL + * + * @param {Object} params + * @param {Object} user + * @return {Promise<object>} + */ +module.exports = (params, user) => + new Promise(async (res, rej) => +{ + // Get 'url' parameter + const url = params.url; + if (url == null) { + return rej('url is required'); + } + + let name = URL.parse(url).pathname.split('/').pop(); + if (!validateFileName(name)) { + name = null; + } + + // Get 'folder_id' parameter + let folder = params.folder_id; + if (folder === undefined || folder === null) { + folder = null; + } else { + folder = new mongo.ObjectID(folder); + } + + // Download file + const data = await download(url); + + // Create file + const driveFile = await create(user, data, name, null, folder); + + // Serialize + const fileObj = await serialize(driveFile); + + // Response + res(fileObj); +}); |