]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/blobdiff - src/files.js
Add rename functionality
[perso/Immae/Projets/Nodejs/Surfer.git] / src / files.js
index 747acf7cf1cf5b586af88e32ed3741094ae00577..876ff4e96798b938708cec8dfca372b8e39b56d5 100644 (file)
@@ -17,6 +17,7 @@ exports = module.exports = function (basePath) {
     return {
         get: get,
         put: put,
+        post: post,
         del: del
     };
 };
@@ -111,22 +112,22 @@ function get(req, res, next) {
     });
 }
 
-function put(req, res, next) {
+function post(req, res, next) {
     var filePath = decodeURIComponent(req.params[0]);
 
     if (!(req.files && req.files.file) && !req.query.directory) return next(new HttpError(400, 'missing file or directory'));
     if ((req.files && req.files.file) && req.query.directory) return next(new HttpError(400, 'either file or directory'));
 
+    debug('post:', filePath);
+
     var absoluteFilePath = getAbsolutePath(filePath);
     if (!absoluteFilePath || isProtected(absoluteFilePath)) return next(new HttpError(403, 'Path not allowed'));
 
     fs.stat(absoluteFilePath, function (error, result) {
         if (error && error.code !== 'ENOENT') return next(new HttpError(500, error));
 
-        debug('put', absoluteFilePath);
-
         if (result && req.query.directory) return next(new HttpError(409, 'name already exists'));
-        if (result && result.isDirectory()) return next(new HttpError(409, 'cannot put on directories'));
+        if (result && result.isDirectory()) return next(new HttpError(409, 'cannot post on directories'));
 
         if (req.query.directory) {
             return createDirectory(absoluteFilePath, function (error) {
@@ -144,6 +145,30 @@ function put(req, res, next) {
     });
 }
 
+function put(req, res, next) {
+    var oldFilePath = decodeURIComponent(req.params[0]);
+
+    if (!req.body || !req.body.newFilePath) return next(new HttpError(400, 'missing newFilePath'));
+
+    var newFilePath = decodeURIComponent(req.body.newFilePath);
+
+    debug('put: %s -> %s', oldFilePath, newFilePath);
+
+    var absoluteOldFilePath = getAbsolutePath(oldFilePath);
+    if (!absoluteOldFilePath || isProtected(absoluteOldFilePath)) return next(new HttpError(403, 'Path not allowed'));
+
+    var absoluteNewFilePath = getAbsolutePath(newFilePath);
+    if (!absoluteNewFilePath || isProtected(absoluteNewFilePath)) return next(new HttpError(403, 'Path not allowed'));
+
+    fs.rename(absoluteOldFilePath, absoluteNewFilePath, function (error) {
+        if (error) return next (new HttpError(500, error));
+
+        debug('put: successful');
+
+        return next(new HttpSuccess(200, {}));
+    });
+}
+
 function del(req, res, next) {
     var filePath = decodeURIComponent(req.params[0]);
     var recursive = !!req.query.recursive;