WebDAV XML/authoring core with HTTP(S), Digest, locks and streaming host
///|
test "PROPPATCH escaping and method" {
let r = @webdav.proppatch("/a b", [("displayname", "A&B<C")])
assert_eq(r.verb, "PROPPATCH")
assert_eq(r.target, "/a%20b")
assert_true(r.body.contains("A&B<C"))
assert_true(
try {
ignore(@webdav.proppatch("/", []))
false
} catch {
_ => true
},
)
}///|
test "mixed XML properties and lock request" {
let value = @webdav.parse_xml(
"<x:note xmlns:x='urn:example' xml:lang='zh'>前<x:b>中</x:b>后</x:note>",
)
assert_eq(value.text_content(), "前中后")
assert_eq(@webdav.parse_xml(value.to_xml()), value)
let patch = @webdav.set_properties("/文档", [value], [
("urn:example", "old"),
])
assert_eq(patch.verb, "PROPPATCH")
assert_true(patch.body.contains("D:remove"))
let lock = @webdav.lock_request("/文档", "owner", depth="0")
assert_eq(lock.verb, "LOCK")
let refresh = @webdav.refresh_lock("/文档", "urn:uuid:test")
assert_eq(refresh.headers.get("If"), Some("(<urn:uuid:test>)"))
}pub(all) struct DavResponse {
hrefs : Array[String]
status : Int?
properties : Array[XmlProperty]
description : String?
location : String?
errors : Array[XmlElement]
} derive(Eq, ToJson, Debug)pub(all) struct LockInfo {
token : String?
root : String?
owner : XmlElement?
scope : String
depth : String
timeout : String?
} derive(Eq, ToJson, Debug)pub(all) struct XmlElement {
uri : String
name : String
attributes : Array[XmlAttribute]
content : Array[XmlContent]
} derive(Eq, ToJson, Debug)fn set_properties(raw_path : String, set : Array[XmlElement], remove : Array[(String, String)]) -> Request raise DavErrorInstall
Download zipWebDAV XML/authoring core with HTTP(S), Digest, locks and streaming host