Content
View differences
Updated by Andreas Pfohl over 3 years ago
* Check what permission can be set and changed through the API
* Check if the API is usable as we intend
API parts to check:
* [x] [ ] Access control on group folders
* [x] [ ] Membership management of a specific group
* [x] [ ] Get ID of group by name _OpenProject_
* [x] [ ] Complexity of certain requests (e.g. delete all permissions, readd all permissions)
Acceptance Criteria:
* [ ] list of curl commands
Findings:
User Provisioning APIs: [https://docs.nextcloud.com/server/latest/admin\_manual/configuration\_user/user\_provisioning\_api.html](https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_provisioning_api.html)
**GroupFolders**
ACLs: https://github.com/nextcloud/server/blob/b4f36d44c43aac0efdc6c70ff8e46473341a9bfe/lib/public/Constants.php#L65
Fetching ACLs for a folder:
```curl
curl --request PROPFIND \
--url https://nextcloud.local/remote.php/dav/files/OpenProject/OpenProject \
--header 'Authorization: Basic T3BlblByb2plY3Q6Q240WDUtZGdzWkYtdGpHd0otMm9TbmUtVHBFQXM=' \
--data '<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns">
<d:prop>
<nc:acl-list />
</d:prop>
</d:propfind>'
```
Response:
```xml
<?xml version="1.0"?>
<d:multistatus
xmlns:d="DAV:"
xmlns:s="http://sabredav.org/ns"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns">
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>1</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/Project%20A/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>0</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>andreas</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Andreas</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>member</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Member</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/Project%20B/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>0</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>andreas</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Andreas</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
</d:multistatus>
```
* Check if the API is usable as we intend
API parts to check:
* [x]
* [x]
* [x]
* [x]
Acceptance Criteria:
* [ ] list of curl commands
Findings:
User Provisioning APIs: [https://docs.nextcloud.com/server/latest/admin\_manual/configuration\_user/user\_provisioning\_api.html](https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_provisioning_api.html)
**GroupFolders**
ACLs: https://github.com/nextcloud/server/blob/b4f36d44c43aac0efdc6c70ff8e46473341a9bfe/lib/public/Constants.php#L65
Fetching ACLs for a folder:
```curl
curl --request PROPFIND \
--url https://nextcloud.local/remote.php/dav/files/OpenProject/OpenProject \
--header 'Authorization: Basic T3BlblByb2plY3Q6Q240WDUtZGdzWkYtdGpHd0otMm9TbmUtVHBFQXM=' \
--data '<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns">
<d:prop>
<nc:acl-list />
</d:prop>
</d:propfind>'
```
Response:
```xml
<?xml version="1.0"?>
<d:multistatus
xmlns:d="DAV:"
xmlns:s="http://sabredav.org/ns"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns">
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>1</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/Project%20A/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>0</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>andreas</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Andreas</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>member</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Member</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>/remote.php/dav/files/OpenProject/OpenProject/Project%20B/</d:href>
<d:propstat>
<d:prop>
<nc:acl-list>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>group</nc:acl-mapping-type>
<nc:acl-mapping-id>OpenProject</nc:acl-mapping-id>
<nc:acl-mapping-display-name>OpenProject</nc:acl-mapping-display-name>
<nc:acl-mask>31</nc:acl-mask>
<nc:acl-permissions>0</nc:acl-permissions>
</nc:acl>
<nc:acl>
<nc:acl-mapping-type>user</nc:acl-mapping-type>
<nc:acl-mapping-id>andreas</nc:acl-mapping-id>
<nc:acl-mapping-display-name>Andreas</nc:acl-mapping-display-name>
<nc:acl-mask>0</nc:acl-mask>
<nc:acl-permissions>31</nc:acl-permissions>
</nc:acl>
</nc:acl-list>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
</d:multistatus>
```