WebDAV validates connections and preserves directory listings, with CI checking every change #1

Merged
temeddix merged 10 commits from fix-directory-listing into main 2026-09-30 13:10:15 +00:00
2 changed files with 12 additions and 10 deletions
Showing only changes of commit e14a4dd104 - Show all commits
+3 -2
View File
@@ -17,8 +17,9 @@ This package requires a Memona version that supports plugin manifest schema 2.
| Username | Optional account name for HTTP basic authentication |
| Password | Optional password, stored as a secret |
Public, LAN, VPN, link-local and localhost addresses work directly from the
server address; there is no separate network permission setting.
With the compatible schema 2 Memona version required above, public, LAN, VPN,
Outdated
Review

LAN, link-local, and localhost addresses require the private-network grant. Update this guidance so users are prompted for the permission instead of being told none is needed.

Profile: codex · gpt-5.6-terra

LAN, link-local, and localhost addresses require the private-network grant. Update this guidance so users are prompted for the permission instead of being told none is needed. > Profile: `codex` · `gpt-5.6-terra`
link-local and localhost addresses work directly from the server address;
that API has no separate connection network grant.
Listing, reading, writing, creating directories, renaming and deleting are
supported. Reads and writes stream in pieces of at most 1 MiB, so a file of any
+9 -8
View File
@@ -36,9 +36,10 @@ interface host {
pull: func(limit: u32) -> result<list<u8>, host-error>;
}
/// Begins a request to any HTTP or HTTPS host, including LAN and loopback
Review

LAN and loopback access still requires the connection's private-network grant. Restore that requirement here; otherwise this copied contract tells plugin authors that private hosts are reachable without consent.

Profile: codex · gpt-5.6-terra

LAN and loopback access still requires the connection's private-network grant. Restore that requirement here; otherwise this copied contract tells plugin authors that private hosts are reachable without consent. > Profile: `codex` · `gpt-5.6-terra`
/// addresses. Each redirect and DNS result is checked, and DNS is pinned.
/// Cross-origin redirects remove request headers; HTTPS cannot downgrade.
/// The host bounds total bytes per exchange, not buffer size.
/// addresses. This API has no per-connection network grant. Each redirect
/// and DNS result is checked, and DNS is pinned. Cross-origin redirects
/// remove request headers; HTTPS cannot downgrade. The host bounds total
/// bytes per exchange, not buffer size.
http: func(request: request) -> result<exchange, host-error>;
/// One open TCP connection. Dropping the handle closes the socket, and the
@@ -51,9 +52,9 @@ interface host {
write: func(data: list<u8>) -> result<u32, host-error>;
}
Outdated
Review

The private-network grant applies to TCP too. Keep that constraint in the socket documentation so it matches HTTP and the host's enforcement.

Profile: codex · gpt-5.6-terra

The private-network grant applies to TCP too. Keep that constraint in the socket documentation so it matches HTTP and the host's enforcement. > Profile: `codex` · `gpt-5.6-terra`
/// Opens a socket to any host, including LAN and loopback addresses, on a
/// package-declared port. The host resolves and pins DNS and starts TLS
/// when asked. Ports negotiated at runtime, such as an FTP data channel,
/// must be declared.
/// package-declared port. This API has no per-connection network grant.
/// The host resolves and pins DNS and starts TLS when asked. Ports
/// negotiated at runtime, such as an FTP data channel, must be declared.
connect: func(host: string, port: u16, tls: bool) -> result<tcp, host-error>;
/// One datagram socket connected to a single peer.
@@ -64,8 +65,8 @@ interface host {
/// means none arrived inside the host's wait, not that the peer left.
receive: func(limit: u32) -> result<list<u8>, host-error>;
}
Outdated
Review

UDP uses the same private-network grant as TCP and HTTP. Restore the grant rule here instead of reducing it to a port-only constraint.

Profile: codex · gpt-5.6-terra

UDP uses the same private-network grant as TCP and HTTP. Restore the grant rule here instead of reducing it to a port-only constraint. > Profile: `codex` · `gpt-5.6-terra`
/// Connects a datagram socket under the same port rules as `connect`, for
/// the few filesystem protocols that still need one.
/// Connects a datagram socket under the same address and port rules as
/// `connect`, for the few filesystem protocols that still need one.
bind: func(host: string, port: u16) -> result<udp, host-error>;
/// A configuration value, typed as the package's manifest declared it.