http: allow PROPOFIND http method

PROPOFIND is used by webdav to retrieve resource's properties.
http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND

For example, Nextcloud public sharing uses PROPOFIND to list shared resources.
This commit is contained in:
Pierre Tachoire
2026-02-09 15:03:20 +01:00
parent 115530a104
commit b9f8ce5729
3 changed files with 7 additions and 1 deletions

View File

@@ -108,7 +108,7 @@ pub fn init(input: Input, opts_: ?InitOpts, page: *Page) !*Request {
} }
fn parseMethod(method: []const u8, page: *Page) !Http.Method { fn parseMethod(method: []const u8, page: *Page) !Http.Method {
if (method.len > "options".len) { if (method.len > "propfind".len) {
return error.InvalidMethod; return error.InvalidMethod;
} }
@@ -122,6 +122,7 @@ fn parseMethod(method: []const u8, page: *Page) !Http.Method {
.{ "patch", .PATCH }, .{ "patch", .PATCH },
.{ "head", .HEAD }, .{ "head", .HEAD },
.{ "options", .OPTIONS }, .{ "options", .OPTIONS },
.{ "propfind", .PROPFIND },
}); });
return method_lookup.get(lower) orelse return error.InvalidMethod; return method_lookup.get(lower) orelse return error.InvalidMethod;
} }

View File

@@ -539,6 +539,9 @@ fn parseMethod(method: []const u8) !Http.Method {
if (std.ascii.eqlIgnoreCase(method, "put")) { if (std.ascii.eqlIgnoreCase(method, "put")) {
return .PUT; return .PUT;
} }
if (std.ascii.eqlIgnoreCase(method, "propfind")) {
return .PROPFIND;
}
return error.InvalidMethod; return error.InvalidMethod;
} }

View File

@@ -211,6 +211,7 @@ pub const Connection = struct {
.HEAD => "HEAD", .HEAD => "HEAD",
.OPTIONS => "OPTIONS", .OPTIONS => "OPTIONS",
.PATCH => "PATCH", .PATCH => "PATCH",
.PROPFIND => "PROPFIND",
}; };
try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_CUSTOMREQUEST, m.ptr)); try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_CUSTOMREQUEST, m.ptr));
} }
@@ -342,6 +343,7 @@ pub const Method = enum(u8) {
HEAD = 4, HEAD = 4,
OPTIONS = 5, OPTIONS = 5,
PATCH = 6, PATCH = 6,
PROPFIND = 7,
}; };
// TODO: on BSD / Linux, we could just read the PEM file directly. // TODO: on BSD / Linux, we could just read the PEM file directly.