- [x] custom groups - [x] list groups PROPFIND http://localhost/owncloud/remote.php/dav/customgroups/groups/ - [x] property `oc:display-name`: group display name - [x] child node `MembershipNode`, name is the custom group URI - [x] rename custom group: PROPPATCH oc:display-name on http://localhost/owncloud/remote.php/dav/customgroups/groups/$customGroupUri - [x] only group admin can rename - [x] delete group: DELETE http://localhost/owncloud/remote.php/dav/customgroups/groups/$customGroupUri - [x] only group admin can delete - [x] create group: MKCOL http://localhost/owncloud/remote.php/dav/customgroups/groups/$customGroupUri - [x] throws MethodNotAllowed if already exists - [x] creator automatically becomes group admin and member - [x] memberships: - [x] list members PROPFIND http://localhost/owncloud/remote.php/dav/customgroups/groups/$numericGroupId/ - [x] child node "MembershipNode" name is user id - [x] property `oc:role` (int) whether this member is also a group admin - [x] only members can list members, others get 403 when listing collection contents - [x] add member: PUT http://localhost/owncloud/remote.php/dav/customgroups/groups/$numericGroupId/$userId - [x] only group admin can add members - [x] remove member: DELETE http://localhost/owncloud/remote.php/dav/customgroups/groups/$customGroupUri/$userId - [x] only group admin can remove members - [x] group admin cannot remove self if no other admin exists in the group - [x] a group member can remove themselves with the same API call to leave the group - [x] change admin role of a member: PROPPATCH http://localhost/owncloud/remote.php/dav/customgroups/groups/$customGroupUri/$userId of the `oc:role` property - [x] list group memberships of a given user: PROPFIND http://localhost/owncloud/remote.php/dav/customgroups/users/$userId/$membership - [x] child node is `MembershipNode` where name is group id - [x] membership node has "oc:role" attribute - [x] regular admins can do the same as group admins - [ ] provider REPORT in addition to PROPFIND for pagination
oc:display-name: group display nameMembershipNode, name is the custom group URIoc:role(int) whether this member is also a group adminoc:rolepropertyMembershipNodewhere name is group id