Merge branch 'files_encryption' of https://github.com/owncloud/core into files_encryption
This commit is contained in:
commit
2827004634
|
@ -193,8 +193,18 @@ class Hooks {
|
|||
$util = new Util($view, $userId);
|
||||
$path = $util->fileIdToPath($params['itemSource']);
|
||||
|
||||
//check if this is a reshare action, that's true if the item source is already shared with me
|
||||
$sharedItem = \OCP\Share::getItemSharedWithBySource($params['itemType'], $params['itemSource']);
|
||||
if ($sharedItem) {
|
||||
// if it is a re-share than the file is located in my Shared folder
|
||||
$path = '/Shared'.$sharedItem['file_target'];
|
||||
} else {
|
||||
$path = $util->fileIdToPath($params['itemSource']);
|
||||
}
|
||||
|
||||
$sharingEnabled = \OCP\Share::isEnabled();
|
||||
|
||||
// if a folder was shared, get a list if all (sub-)folders
|
||||
if ($params['itemType'] === 'folder') {
|
||||
$allFiles = $util->getAllFiles($path);
|
||||
} else {
|
||||
|
@ -243,12 +253,14 @@ class Hooks {
|
|||
$util = new Util( $view, $userId );
|
||||
$path = $util->fileIdToPath( $params['itemSource'] );
|
||||
|
||||
// for group shares get a list of the group members
|
||||
if ($params['shareType'] == \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
$userIds = \OC_Group::usersInGroup($params['shareWith']);
|
||||
} else {
|
||||
$userIds = array($params['shareWith']);
|
||||
}
|
||||
|
||||
// if we unshare a folder we need a list of all (sub-)files
|
||||
if ($params['itemType'] === 'folder') {
|
||||
$allFiles = $util->getAllFiles($path);
|
||||
} else {
|
||||
|
|
|
@ -54,7 +54,7 @@ class Keymanager {
|
|||
|
||||
\OC_FileProxy::$enabled = false;
|
||||
|
||||
return $view->file_get_contents( '/public-keys/' . '/' . $userId . '.public.key' );
|
||||
return $view->file_get_contents( '/public-keys/' . $userId . '.public.key' );
|
||||
|
||||
\OC_FileProxy::$enabled = true;
|
||||
|
||||
|
@ -392,6 +392,25 @@ class Keymanager {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief delete all share keys of a given file
|
||||
* @param \OC_FilesystemView $view
|
||||
* @param type $userId owner of the file
|
||||
* @param type $filePath path to the file, relative to the owners file dir
|
||||
*/
|
||||
public static function delAllShareKeys(\OC_FilesystemView $view, $userId, $filePath) {
|
||||
|
||||
if ($view->is_dir($userId.'/files/'.$filePath)) {
|
||||
$view->unlink($userId.'/files_encryption/share-keys/'.$filePath);
|
||||
} else {
|
||||
$localKeyPath = $view->getLocalFile($userId.'/files_encryption/share-keys/'.$filePath);
|
||||
$matches = glob(preg_quote($localKeyPath).'*.shareKey');
|
||||
foreach ($matches as $ma) {
|
||||
unlink($ma);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Delete a single user's shareKey for a single file
|
||||
*/
|
||||
|
|
|
@ -256,18 +256,13 @@ class Proxy extends \OC_FileProxy {
|
|||
// Format path to be relative to user files dir
|
||||
$relPath = $util->stripUserFilesPath( $path );
|
||||
|
||||
// list( $owner, $ownerPath ) = $util->getUidAndFilename( $relPath );
|
||||
|
||||
$fileOwner = \OC\Files\Filesystem::getOwner( $path );
|
||||
$ownerPath = $util->stripUserFilesPath( $path ); // TODO: Don't trust $path, fetch owner path
|
||||
|
||||
$filePath = $fileOwner . '/' . 'files_encryption' . '/' . 'keyfiles' . '/'. $ownerPath;
|
||||
list( $owner, $ownerPath ) = $util->getUidAndFilename( $relPath );
|
||||
|
||||
// Delete keyfile & shareKey so it isn't orphaned
|
||||
if (
|
||||
! (
|
||||
Keymanager::deleteFileKey( $view, $fileOwner, $ownerPath )
|
||||
&& Keymanager::delShareKey( $view, $fileOwner, $ownerPath )
|
||||
Keymanager::deleteFileKey( $view, $owner, $ownerPath )
|
||||
&& Keymanager::delAllShareKeys( $view, $owner, $ownerPath )
|
||||
)
|
||||
) {
|
||||
|
||||
|
|
|
@ -668,7 +668,7 @@ class Util {
|
|||
// public system user 'ownCloud' (for public shares)
|
||||
if (
|
||||
$util->ready()
|
||||
or $user == 'ownCloud'
|
||||
or $user == 'owncloud'
|
||||
) {
|
||||
|
||||
// Construct array of ready UIDs for Keymanager{}
|
||||
|
@ -805,15 +805,10 @@ class Util {
|
|||
// Make sure that a share key is generated for the owner too
|
||||
list($owner, $ownerPath) = $this->getUidAndFilename($filePath);
|
||||
|
||||
//$userIds = array( $this->userId );
|
||||
$userIds = array();
|
||||
|
||||
if ( $sharingEnabled ) {
|
||||
|
||||
// Find out who, if anyone, is sharing the file
|
||||
$shareUids = \OCP\Share::getUsersSharingFile( $ownerPath, $owner,true, true, true );
|
||||
|
||||
$userIds = array_merge( $userIds, $shareUids );
|
||||
$userIds = \OCP\Share::getUsersSharingFile( $ownerPath, $owner,true, true, true );
|
||||
|
||||
}
|
||||
|
||||
|
@ -894,14 +889,14 @@ class Util {
|
|||
}
|
||||
|
||||
/**
|
||||
*@ brief geo recursively through a dir and collect all files and sub files.
|
||||
* @brief geo recursively through a dir and collect all files and sub files.
|
||||
* @param type $dir relative to the users files folder
|
||||
* @return array with list of files relative to the users files folder
|
||||
*/
|
||||
public function getAllFiles($dir) {
|
||||
$result = array();
|
||||
$path = $this->view->getLocalFile();
|
||||
$content = $this->view->getDirectoryContent("/".$this->userFilesDir.'/'.$this->filesFolderName.$dir);
|
||||
|
||||
$content = $this->view->getDirectoryContent($this->userFilesDir.$dir);
|
||||
|
||||
foreach ($content as $c) {
|
||||
if ($c['type'] === "dir" ) {
|
||||
|
|
|
@ -150,10 +150,10 @@ class Share {
|
|||
FROM
|
||||
`*PREFIX*share`
|
||||
WHERE
|
||||
item_source = ? AND share_type = ? AND uid_owner = ?'
|
||||
item_source = ? AND share_type = ?'
|
||||
);
|
||||
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_USER, $user ) );
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_USER ) );
|
||||
|
||||
if ( \OC_DB::isError( $result ) ) {
|
||||
\OC_Log::write( 'OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR );
|
||||
|
@ -170,10 +170,10 @@ class Share {
|
|||
FROM
|
||||
`*PREFIX*share`
|
||||
WHERE
|
||||
item_source = ? AND share_type = ? AND uid_owner = ?'
|
||||
item_source = ? AND share_type = ?'
|
||||
);
|
||||
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_GROUP, $user ) );
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_GROUP ) );
|
||||
|
||||
if ( \OC_DB::isError( $result ) ) {
|
||||
\OC_Log::write( 'OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR );
|
||||
|
@ -190,17 +190,17 @@ class Share {
|
|||
FROM
|
||||
`*PREFIX*share`
|
||||
WHERE
|
||||
item_source = ? AND share_type = ? AND uid_owner = ?'
|
||||
item_source = ? AND share_type = ?'
|
||||
);
|
||||
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_LINK, $user ) );
|
||||
$result = $query->execute( array( $source, self::SHARE_TYPE_LINK ) );
|
||||
|
||||
if ( \OC_DB::isError( $result ) ) {
|
||||
\OC_Log::write( 'OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR );
|
||||
}
|
||||
|
||||
if ($result->fetchRow()) {
|
||||
$shares[] = "ownCloud";
|
||||
$shares[] = "owncloud";
|
||||
}
|
||||
}
|
||||
// Include owner in list of users, if requested
|
||||
|
|
Loading…
Reference in New Issue