}
$encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys);
-
- $this->keymanager->setFileKey($path, $encryptedKeyfiles['data']);
- foreach ($encryptedKeyfiles['keys'] as $uid => $keyFile) {
- $this->keymanager->setShareKey($path, $uid, $keyFile);
- }
+ $this->keymanager->setAllFileKeys($path, $encryptedKeyfiles);
}
return $result;
}
* update encrypted file, e.g. give additional users access to the file
*
* @param string $path path to the file which should be updated
+ * @param string $uid of the user who performs the operation
* @param array $accessList who has access to the file contains the key 'users' and 'public'
* @return boolean
*/
- public function update($path, $accessList) {
- // TODO: Implement update() method.
+ public function update($path, $uid, $accessList) {
+ $fileKey = $this->keymanager->getFileKey($path, $uid);
+ foreach ($accessList['users'] as $user) {
+ $publicKeys[$user] = $this->keymanager->getPublicKey($user);
+ }
+ $encryptedFileKey = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
+
+ $this->keymanager->deleteAllFileKeys($path);
+
+ $this->keymanager->setAllFileKeys($path, $encryptedFileKey);
+
+ return true;
}
/**
return $this->keyStorage->setFileKey($path, $this->fileKeyId, $key);
}
+ /**
+ * set all file keys (the file key and the corresponding share keys)
+ *
+ * @param string $path
+ * @param array $keys
+ */
+ public function setAllFileKeys($path, $keys) {
+ $this->setFileKey($path, $keys['data']);
+ foreach ($keys['keys'] as $uid => $keyFile) {
+ $this->setShareKey($path, $uid, $keyFile);
+ }
+ }
+
/**
* write share key to the key storage
*
return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId);
}
+ public function deleteAllFileKeys($path) {
+ return $this->keyStorage->deleteAllFileKeys($path);
+ }
+
/**
* @param array $userIds
* @return array