diff --git a/lib/api-functions.coffee b/lib/api-functions.coffee index d210f3e..5c0fb38 100644 --- a/lib/api-functions.coffee +++ b/lib/api-functions.coffee @@ -230,8 +230,21 @@ insertTasks = (tasks, aliases, callback) -> ) +deleteDevice = (deviceId, callback) -> + db.tasksCollection.remove({'device' : deviceId}, (err, removed) -> + return callback(err) if err + db.devicesCollection.remove({'_id' : deviceId}, (err, removed) -> + return callback(err) if err + db.redisClient.del("#{deviceId}_presets_hash", "#{deviceId}_inform_hash", (err) -> + callback(err) + ) + ) + ) + + exports.addAliases = addAliases exports.sanitizeTask = sanitizeTask exports.connectionRequest = connectionRequest exports.watchTask = watchTask exports.insertTasks = insertTasks +exports.deleteDevice = deleteDevice diff --git a/lib/nbi.coffee b/lib/nbi.coffee index cb88dbf..abd0ff8 100644 --- a/lib/nbi.coffee +++ b/lib/nbi.coffee @@ -58,6 +58,7 @@ FILES_REGEX = /^\/files\/([a-zA-Z0-9\%\!\*\'\(\)\;\:\@\&\=\+\$\,\?\#\[\]\-\_\.\~ PING_REGEX = /^\/ping\/([a-zA-Z0-9\-\_\.]+)\/?$/ QUERY_REGEX = /^\/([a-zA-Z0-9_]+s)\/?$/ DEVICE_PRESET_REGEX = /^\/devices\/([a-zA-Z0-9\-\_\%]+)\/preset\/?$/ +DELETE_DEVICE_REGEX = /^\/devices\/([a-zA-Z0-9\-\_\%]+)\/?$/ listener = (request, response) -> @@ -309,6 +310,21 @@ listener = (request, response) -> response.writeHead(200, {'Content-Type' : 'text/plain', 'Cache-Control' : 'no-cache'}) response.end(stdout) ) + else if DELETE_DEVICE_REGEX.test(urlParts.pathname) + if request.method isnt 'DELETE' + response.writeHead(405, {'Allow' : 'DELETE'}) + response.end('405 Method Not Allowed') + return + + deviceId = DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1] + apiFunctions.deleteDevice(deviceId, (err) -> + if err + response.writeHead(500) + response.end(err.message) + return + response.writeHead(200) + response.end() + ) else if QUERY_REGEX.test(urlParts.pathname) collectionName = QUERY_REGEX.exec(urlParts.pathname)[1] if request.method not in ['GET', 'HEAD']