Implement the back-end of the Move operation.
authorRobert Sesek <rsesek@bluestatic.org>
Mon, 4 Oct 2010 14:18:10 +0000 (10:18 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Mon, 4 Oct 2010 14:18:10 +0000 (10:18 -0400)
src/paths.go
src/server.go

index 1229b0ef7f7f0e996bb870c48feb648596835a54..8125bf3e5dc739536c3f77f1d7d0d2208f353038 100644 (file)
@@ -69,3 +69,15 @@ func Remove(the_path string) os.Error {
   }
   return os.RemoveAll(full_path)
 }
+
+func Move(source string, target string) os.Error {
+  source = canonicalizePath(source)
+  target = canonicalizePath(target)
+  if !checkInJail(source) {
+    return os.NewError("Source outside of jail")
+  }
+  if !checkInJail(target) {
+    return os.NewError("Target outside of jail")
+  }
+  return os.Rename(source, target)
+}
index aceb130f86454895b8ffb1a3fc580194109cb860..6a02f3785f849af3bc868fed52f4d8ed924acc8d 100644 (file)
@@ -56,6 +56,18 @@ func serviceHandler(connection *http.Conn, request *http.Request) {
         }
         okResponse(connection, response)
       }
+    case "move":
+      source := request.FormValue("source")
+      target := request.FormValue("target")
+      err := paths.Move(source, target)
+      if err != nil {
+        errorResponse(connection, err.String())
+      } else {
+        response := map[string] string {
+          "path" : target,
+        }
+        okResponse(connection, response)
+      }
     default:
       errorResponse(connection, "Unhandled action")
   }