|
|
|
|
@ -228,7 +228,7 @@ class Recovery {
|
|
|
|
|
$publicKeys[$uid] = $this->keyManager->getPublicKey($uid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys);
|
|
|
|
|
$publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $this->user->getUID());
|
|
|
|
|
|
|
|
|
|
$encryptedKeyfiles = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
|
|
|
|
|
$this->keyManager->setAllFileKeys($filePath, $encryptedKeyfiles);
|
|
|
|
|
@ -264,33 +264,39 @@ class Recovery {
|
|
|
|
|
$privateKey = $this->crypt->decryptPrivateKey($encryptedKey,
|
|
|
|
|
$recoveryPassword);
|
|
|
|
|
|
|
|
|
|
$this->recoverAllFiles('/' . $user . '/files/', $privateKey);
|
|
|
|
|
$this->recoverAllFiles('/' . $user . '/files/', $privateKey, $user);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $path
|
|
|
|
|
* @param $privateKey
|
|
|
|
|
* recover users files
|
|
|
|
|
*
|
|
|
|
|
* @param string $path
|
|
|
|
|
* @param string $privateKey
|
|
|
|
|
* @param string $uid
|
|
|
|
|
*/
|
|
|
|
|
private function recoverAllFiles($path, $privateKey) {
|
|
|
|
|
private function recoverAllFiles($path, $privateKey, $uid) {
|
|
|
|
|
$dirContent = $this->view->getDirectoryContent($path);
|
|
|
|
|
|
|
|
|
|
foreach ($dirContent as $item) {
|
|
|
|
|
// Get relative path from encryption/keyfiles
|
|
|
|
|
$filePath = $item->getPath();
|
|
|
|
|
if ($this->view->is_dir($filePath)) {
|
|
|
|
|
$this->recoverAllFiles($filePath . '/', $privateKey);
|
|
|
|
|
$this->recoverAllFiles($filePath . '/', $privateKey, $uid);
|
|
|
|
|
} else {
|
|
|
|
|
$this->recoverFile($filePath, $privateKey);
|
|
|
|
|
$this->recoverFile($filePath, $privateKey, $uid);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* recover file
|
|
|
|
|
*
|
|
|
|
|
* @param string $path
|
|
|
|
|
* @param string $privateKey
|
|
|
|
|
* @param string $uid
|
|
|
|
|
*/
|
|
|
|
|
private function recoverFile($path, $privateKey) {
|
|
|
|
|
private function recoverFile($path, $privateKey, $uid) {
|
|
|
|
|
$encryptedFileKey = $this->keyManager->getEncryptedFileKey($path);
|
|
|
|
|
$shareKey = $this->keyManager->getShareKey($path, $this->keyManager->getRecoveryKeyId());
|
|
|
|
|
|
|
|
|
|
@ -303,11 +309,11 @@ class Recovery {
|
|
|
|
|
if (!empty($fileKey)) {
|
|
|
|
|
$accessList = $this->file->getAccessList($path);
|
|
|
|
|
$publicKeys = array();
|
|
|
|
|
foreach ($accessList['users'] as $uid) {
|
|
|
|
|
$publicKeys[$uid] = $this->keyManager->getPublicKey($uid);
|
|
|
|
|
foreach ($accessList['users'] as $user) {
|
|
|
|
|
$publicKeys[$user] = $this->keyManager->getPublicKey($user);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys);
|
|
|
|
|
$publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $uid);
|
|
|
|
|
|
|
|
|
|
$encryptedKeyfiles = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
|
|
|
|
|
$this->keyManager->setAllFileKeys($path, $encryptedKeyfiles);
|
|
|
|
|
|