nextcloud/server · error · Forbidden

not implemented

Error message

not implemented

What it means

TrashbinHome::propPatch() throws Forbidden('not implemented'): the trashbin exposes only a fixed resourcetype (a DAV collection plus {http://nextcloud.org/ns}trash-bin) and accepts no property writes. Any PROPPATCH on the trashbin URL - for example setting {DAV:}displayname - fails with HTTP 403.

Source

Thrown at apps/dav/lib/CalDAV/Trashbin/TrashbinHome.php:129

	#[\Override]
	public function getName(): string {
		return self::NAME;
	}

	#[\Override]
	public function setName($name) {
		throw new Forbidden('Permission denied to rename the trashbin');
	}

	#[\Override]
	public function getLastModified(): int {
		return 0;
	}

	#[\Override]
	public function propPatch(PropPatch $propPatch): void {
		throw new Forbidden('not implemented');
	}

	#[\Override]
	public function getProperties($properties): array {
		return [
			'{DAV:}resourcetype' => new ResourceType([
				'{DAV:}collection',
				sprintf('{%s}trash-bin', \OCA\DAV\DAV\Sharing\Plugin::NS_NEXTCLOUD),
			]),
		];
	}
}

View on GitHub (pinned to ecdeb153ff)

Solutions

  1. Skip PROPPATCH for the trashbin collection; it has no writable properties
  2. Apply displayname/color changes only to real calendars under the calendar home
  3. In bulk property-update loops, filter out the trashbin URL instead of parsing the 403 afterwards

Example fix

// before
PROPPATCH /remote.php/dav/calendars/alice/trashbin
  set {DAV:}displayname = 'Trash'
-> 403 not implemented

// after
PROPPATCH /remote.php/dav/calendars/alice/personal/
  set {DAV:}displayname = 'Personal'
-> 207 Multi-Status
Defensive patterns

Strategy: validation

Validate before calling

if (str_ends_with(rtrim($propPatchUri, '/'), '/trashbin')) {
    return; // trashbin has no writable properties: skip the PROPPATCH entirely
}

Try / catch

try {
    $client->propPatch($uri, $props);
} catch (\Sabre\HTTP\ClientHttpException $e) {
    if ($e->getResponse()->getStatus() === 403 && str_ends_with(rtrim($uri, '/'), '/trashbin')) {
        return; // 'not implemented' by design
    }
    throw $e;
}

Prevention

When it happens

Trigger: PROPPATCH on /remote.php/dav/calendars/<user>/trashbin setting displayname, color, or sync metadata; clients that stamp displayname on every collection immediately after discovery.

Common situations: Calendar clients that 'tidy' all discovered collections by writing displayname/color; provisioning code applying a uniform property template to every node.

Related errors


AI-assisted analysis of nextcloud/server@ecdeb153ff (2026-08-17). Data as JSON: /api/errors/c43552417cc36c19. Report an issue: GitHub.