Roxen.git
/
server
/
etc
/
test
/
tests
/
http
/
RoxenTest_webdav.pike
version
»
Context lines:
10
20
40
80
file
none
3
Roxen.git/server/etc/test/tests/http/RoxenTest_webdav.pike:49:
string path, mapping(string:string)|void extra_headers, string|void data) { mapping(string:string) headers = base_headers + ([]); if (extra_headers) { headers += extra_headers; }
+
array(string) lock_paths = ({ path });
+
+
// Convert the fake header "new-uri" into a proper "destination" header.
+
string new_uri = m_delete(headers, "new-uri");
+
if (new_uri) {
+
if (lower_case(method) == "copy") {
+
// NB: No need to lock the source for a copy operation.
+
lock_paths = ({ new_uri });
+
} else {
+
lock_paths += ({ new_uri });
+
}
+
+
if (has_prefix(new_uri, "/")) new_uri = new_uri[1..];
+
Standards.URI dest_uri = Standards.URI(new_uri, base_uri);
+
// FIXME:
+
headers["destination"] = (string)dest_uri;
+
}
+
multiset(string) locks = (<>); if (current_locks) {
-
string dir
= path;
+
foreach(lock_paths,
string dir
)
{
while(1) { string lock = current_locks[dir]; if (lock) locks[lock] = 1; if (dir == "/") break; dir = dirname(dir); }
-
+
}
if (sizeof(locks)) { headers->if = "(<" + (indices(locks) * ">), (<") + ">)"; } }
-
+
if (has_prefix(path, "/")) path = path[1..]; Standards.URI url = Standards.URI(path, base_uri); con = Protocols.HTTP.do_method(method, url, UNDEFINED, headers, con, data); report_debug("Webdav: %s %O ==> code: %d\n", method, path, con?con->status:600); if (!con) return ({ 600, ([]), "" });
Roxen.git/server/etc/test/tests/http/RoxenTest_webdav.pike:144:
} int webdav_delete(string path, mapping(string:string) locks) { array(int|mapping(string:string)|string) res = webdav_request("DELETE", path); if (!((res[0] >= 200) && (res[0] < 300))) return 0; low_recursive_unlock(path, locks);
-
return
1
;
+
return
!filesystem_check_exists(path)
;
}
-
+
int webdav_copy(string src_path, string dst_path)
+
{
+
array(int|mapping(string:string)|string) res =
+
webdav_request("COPY", src_path, ([
+
"new-uri": dst_path,
+
]));
+
+
if (!((res[0] >= 200) && (res[0] < 300))) return 0;
+
+
return filesystem_compare_files(src_path, dst_path);
+
}
+
+
int webdav_move(string src_path, string dst_path, mapping(string:string) locks)
+
{
+
string expected_content = filesystem_read_file(src_path);
+
+
array(int|mapping(string:string)|string) res =
+
webdav_request("MOVE", src_path, ([
+
"new-uri": dst_path,
+
]));
+
+
if (!((res[0] >= 200) && (res[0] < 300))) return 0;
+
+
low_recursive_unlock(src_path, locks);
+
+
return
+
!filesystem_check_exists(src_path) &&
+
filesystem_check_content(dst_path, expected_content);
+
}
+
int webdav_mkcol(string path) { array(int|mapping(string:string)|string) res = webdav_request("MKCOL", path); return (res[0] >= 200) && (res[0] < 300); } int webdav_ls(string path, array(string) expected) {