Browse Source

make sharing and unsharing work

tags/v8.1.0alpha1
Bjoern Schiessle 9 years ago
parent
commit
37e8268447
2 changed files with 31 additions and 7 deletions
  1. 14
    7
      apps/encryption/lib/crypto/encryption.php
  2. 17
    0
      apps/encryption/lib/keymanager.php

+ 14
- 7
apps/encryption/lib/crypto/encryption.php View File

@@ -122,11 +122,7 @@ class Encryption implements IEncryptionModule {
}

$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;
}
@@ -218,11 +214,22 @@ class Encryption implements IEncryptionModule {
* 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;
}

/**

+ 17
- 0
apps/encryption/lib/keymanager.php View File

@@ -183,6 +183,19 @@ class KeyManager {
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
*
@@ -405,6 +418,10 @@ class KeyManager {
return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId);
}

public function deleteAllFileKeys($path) {
return $this->keyStorage->deleteAllFileKeys($path);
}

/**
* @param array $userIds
* @return array

Loading…
Cancel
Save