From 19570d305fdbc1e441ebffc075566f1f90e53f24 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Sun, 10 Feb 2013 12:25:21 +0300 Subject: [PATCH] Moved file upload functionality from files.coffee to api.coffee --- api.coffee | 29 +++++++++++++++++++++++++++++ db.coffee | 5 +++++ files.coffee | 38 +------------------------------------- 3 files changed, 35 insertions(+), 37 deletions(-) diff --git a/api.coffee b/api.coffee index 613a448..010804a 100644 --- a/api.coffee +++ b/api.coffee @@ -9,6 +9,7 @@ mongodb = require 'mongodb' TASKS_REGEX = /^\/devices\/([a-zA-Z0-9\-\_\%]+)\/tasks\/?$/ TAGS_REGEX = /^\/devices\/([a-zA-Z0-9\-\_\%]+)\/tags\/([a-zA-Z0-9\-\_\%]+)\/?$/ PRESETS_REGEX = /^\/presets\/([a-zA-Z0-9\-\_\%]+)\/?$/ +FILES_REGEX = /^\/files(\/[a-zA-Z0-9\-\_\%\ \.\/\(\)]+)\/?$/ connectionRequest = (deviceId, callback) -> db.devicesCollection.findOne({_id : deviceId}, {'InternetGatewayDevice.ManagementServer.ConnectionRequestURL._value' : 1}, (err, device)-> @@ -208,6 +209,34 @@ else else response.writeHead 405, {'Allow': 'GET'} response.end('405 Method Not Allowed') + else if FILES_REGEX.test(urlParts.pathname) + filename = FILES_REGEX.exec(urlParts.pathname)[1] + if request.method == 'PUT' + metadata = { + SoftwareVersion : request.headers.softwareversion, + HardwareVersion : request.headers.hardwareversion, + Manufacturer : request.headers.manufacturer, + } + + gs = new mongodb.GridStore(db.mongo.db, filename, 'w', {metadata : metadata}) + gs.open((err, gs) -> + gs.write(request.getBody('binary'), (err, res) -> + gs.close((err) -> + ) + response.writeHead(201) + response.end() + ) + ) + else if request.method == 'DELETE' + request.addListener('end', () -> + mongodb.GridStore.unlink(db.mongo.db, filename, (err) -> + response.writeHead(200) + response.end() + ) + ) + else + response.writeHead 405, {'Allow': 'PUT, DELETE'} + response.end('405 Method Not Allowed') else response.writeHead 404 response.end('404 Not Found') diff --git a/db.coffee b/db.coffee index 0285ec8..0b190af 100644 --- a/db.coffee +++ b/db.coffee @@ -14,6 +14,11 @@ presetsCollection = null dbserver = new mongodb.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true}) db = new mongodb.Db(config.DATABASE_NAME, dbserver, {native_parser:true, safe:true}) +exports.mongo = { + db : db, + server : dbserver +} + db.open( (err, db) -> db.collection('tasks', (err, collection) -> exports.tasksCollection = tasksCollection = collection diff --git a/files.coffee b/files.coffee index 7453cfc..4767a2b 100644 --- a/files.coffee +++ b/files.coffee @@ -40,44 +40,8 @@ else stream.pipe(response) ) ) - else if request.method == 'PUT' - gridStore = null - metadata = { - FileType : request.headers.filetype, - SoftwareVersion : request.headers.softwareversion, - HardwareVersion : request.headers.hardwareversion, - Manufacturer : request.headers.manufacturer, - } - - gs = new mongodb.GridStore(db, urlParts.pathname, 'w', {metadata : metadata}) - - request.pause() - - gs.open((err, gs) -> - gridStore = gs - request.resume() - ) - - request.addListener('data', (chunk) -> - gridStore.write(chunk, (err, res) -> - ) - ) - - request.addListener('end', () -> - gridStore.close((err) -> - ) - response.writeHead(201) - response.end() - ) - else if request.method == 'DELETE' - request.addListener('end', () -> - mongodb.GridStore.unlink(db, urlParts.pathname, (err) -> - response.writeHead(200) - response.end() - ) - ) else - response.writeHead(405, {'Allow': 'GET, PUT, DELETE'}) + response.writeHead(405, {'Allow': 'GET'}) response.end('405 Method Not Allowed') )