Does nextcloud support caldav-proxy?

Hi,

I’m currently testing NC for calendar support. I’m running some CalDav-Tests from Apple and there seems to be differences between NC and an original sabreDav. Maybe somebody can help me or explain, what went wrong…

Following test case: I send the following request to NC 12.0:

    PROPFIND https://nextcloud.example.com/remote.php/dav/calendars/gtest1/
    Depth: 1
    Content-Type: text/xml; charset=utf-8
    Username: groupware-test1@example-com
    <?xml version="1.0" encoding="utf-8" ?>
    <D:propfind xmlns:D="DAV:">
    <D:prop>
    <D:acl/>
    </D:prop>
    </D:propfind>

and get the following response:

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
	<d:response>
		<d:href>/remote.php/dav/calendars/gtest1/</d:href>
		<d:propstat>
			<d:prop>
				<d:acl>
					<d:ace>
						<d:principal>
							<d:href>/remote.php/dav/principals/users/gtest1/</d:href>
						</d:principal>
						<d:grant>
							<d:privilege>
								<d:read/>
							</d:privilege>
						</d:grant>
						<d:protected/>
					</d:ace>
					<d:ace>
						<d:principal>
							<d:href>/remote.php/dav/principals/users/gtest1/</d:href>
						</d:principal>
						<d:grant>
							<d:privilege>
								<d:write/>
							</d:privilege>
						</d:grant>
						<d:protected/>
					</d:ace>
					<d:ace>
						<d:principal>
							<d:href>/remote.php/dav/principals/users/gtest1/calendar-proxy-write/</d:href>
						</d:principal>
						<d:grant>
							<d:privilege>
								<d:read/>
							</d:privilege>
						</d:grant>
						<d:protected/>
					</d:ace>
					<d:ace>
						<d:principal>
							<d:href>/remote.php/dav/principals/users/gtest1/calendar-proxy-write/</d:href>
						</d:principal>
						<d:grant>
							<d:privilege>
								<d:write/>
							</d:privilege>
						</d:grant>
						<d:protected/>
					</d:ace>
					<d:ace>
						<d:principal>
							<d:href>/remote.php/dav/principals/users/gtest1/calendar-proxy-read/</d:href>
						</d:principal>
						<d:grant>
							<d:privilege>
								<d:read/>
							</d:privilege>
						</d:grant>
						<d:protected/>
					</d:ace>
				</d:acl>
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
	</d:response>

So fine… but when I propfind the url “/remote.php/dav/principals/users/gtest1/calendar-proxy-write/” with the same request, I will get an 404:

PROPFIND https://nextcloudexample.com/remote.php/dav/principals/users/gtest1/calendar-proxy-write/
Depth: 1
Content-Type: text/xml; charset=utf-8
Username: groupware-test1@example.com
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop>
<D:acl/>
</D:prop>
</D:propfind>

response:

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>Sabre\DAV\Exception\NotFound</s:exception>
  <s:message>Node with name calendar-proxy-write was not found</s:message>
</d:error>

When I send the same requests to a SabreDAV-instance, I will get a correct answer for the second one (no 404).

Does anybody know, if NC supports the caldav-proxy-feature? Because sabredav seems to support it… But if not, why do I get the first response containing an url to a node, which does not exist?

Thanks and regards,
Brunt

1 Like

I’d like to know that too…

made a report here
https://github.com/nextcloud/calendar/issues/651

Hi !

I followed the issue 651 to the server issue 7085. It has resulted in this pull request.

The problem should be resolved, but I don’t manage to make it work.

An URL like this one :

/remote.php/dav/addressbooks/users/calendar-proxy-write/

…or this one :

/remote.php/dav/principals/users/MYUSER/calendar-proxy-write/

…still result in 404.
Despite the fact that the URL can be found here :
/remote.php/dav/principals/users/MYUSER/

I can’t find a way to make it work.
I guess the datatable oc_dav_cal_proxy should contains something, but it’s empty.

Any guess ? Did you manage to make it work ?

Thanks !