make skeleton compatible with objectstore
suspend encryption proxy when copying skeleton
This commit is contained in:
parent
87da62072b
commit
9b0f0df7f5
|
@ -126,9 +126,9 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
|
|||
}
|
||||
|
||||
\OC_Util::tearDownFS();
|
||||
\OC_User::setUserId('');
|
||||
\OC::$server->getUserSession()->setUser(null);
|
||||
\OC\Files\Filesystem::tearDown();
|
||||
\OC_User::setUserId($user);
|
||||
\OC::$server->getUserSession()->login($user, $password);
|
||||
\OC_Util::setupFS($user);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,12 +34,6 @@ class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IH
|
|||
}
|
||||
$this->user = $params['user'];
|
||||
parent::__construct($params);
|
||||
|
||||
|
||||
//initialize cache with root directory in cache
|
||||
if ( ! $this->is_dir('files') ) {
|
||||
$this->mkdir('files');
|
||||
}
|
||||
}
|
||||
|
||||
public function getId () {
|
||||
|
|
|
@ -291,6 +291,8 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
return null;
|
||||
}
|
||||
$userId = $user->getUID();
|
||||
} else {
|
||||
$user = $this->getUserManager()->get($userId);
|
||||
}
|
||||
$dir = '/' . $userId;
|
||||
$root = $this->getRootFolder();
|
||||
|
@ -305,6 +307,19 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
$dir = '/files';
|
||||
if (!$folder->nodeExists($dir)) {
|
||||
$folder = $folder->newFolder($dir);
|
||||
|
||||
if (\OCP\App::isEnabled('files_encryption')) {
|
||||
// disable encryption proxy to prevent recursive calls
|
||||
$proxyStatus = \OC_FileProxy::$enabled;
|
||||
\OC_FileProxy::$enabled = false;
|
||||
}
|
||||
|
||||
\OC_Util::copySkeleton($user, $folder);
|
||||
|
||||
if (\OCP\App::isEnabled('files_encryption')) {
|
||||
// re-enable proxy - our work is done
|
||||
\OC_FileProxy::$enabled = $proxyStatus;
|
||||
}
|
||||
} else {
|
||||
$folder = $folder->get($dir);
|
||||
}
|
||||
|
|
|
@ -115,16 +115,6 @@ class OC_Util {
|
|||
return $storage;
|
||||
});
|
||||
|
||||
// copy skeleton for local storage only
|
||||
if (!isset($objectStore)) {
|
||||
$userRoot = OC_User::getHome($user);
|
||||
$userDirectory = $userRoot . '/files';
|
||||
if (!is_dir($userDirectory)) {
|
||||
mkdir($userDirectory, 0755, true);
|
||||
OC_Util::copySkeleton($userDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
$userDir = '/' . $user . '/files';
|
||||
|
||||
//jail the user into his "home" directory
|
||||
|
@ -133,6 +123,9 @@ class OC_Util {
|
|||
$fileOperationProxy = new OC_FileProxy_FileOperations();
|
||||
OC_FileProxy::register($fileOperationProxy);
|
||||
|
||||
//trigger creation of user home and /files folder
|
||||
\OC::$server->getUserFolder($user);
|
||||
|
||||
OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $userDir));
|
||||
}
|
||||
return true;
|
||||
|
@ -208,33 +201,44 @@ class OC_Util {
|
|||
}
|
||||
|
||||
/**
|
||||
* copies the user skeleton files into the fresh user home files
|
||||
* copies the skeleton to the users /files
|
||||
*
|
||||
* @param string $userDirectory
|
||||
* @param \OC\User\User $user
|
||||
* @param \OCP\Files\Folder $userDirectory
|
||||
*/
|
||||
public static function copySkeleton($userDirectory) {
|
||||
$skeletonDirectory = OC_Config::getValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
|
||||
public static function copySkeleton(\OC\User\User $user, \OCP\Files\Folder $userDirectory) {
|
||||
|
||||
$skeletonDirectory = \OCP\Config::getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
|
||||
|
||||
if (!empty($skeletonDirectory)) {
|
||||
OC_Util::copyr($skeletonDirectory, $userDirectory);
|
||||
\OCP\Util::writeLog(
|
||||
'files_skeleton',
|
||||
'copying skeleton for '.$user->getUID().' from '.$skeletonDirectory.' to '.$userDirectory->getFullPath('/'),
|
||||
\OCP\Util::DEBUG
|
||||
);
|
||||
self::copyr($skeletonDirectory, $userDirectory);
|
||||
// update the file cache
|
||||
$userDirectory->getStorage()->getScanner()->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* copies a directory recursively
|
||||
* copies a directory recursively by using streams
|
||||
*
|
||||
* @param string $source
|
||||
* @param string $target
|
||||
* @param \OCP\Files\Folder $target
|
||||
* @return void
|
||||
*/
|
||||
public static function copyr($source, $target) {
|
||||
public static function copyr($source, \OCP\Files\Folder $target) {
|
||||
$dir = opendir($source);
|
||||
@mkdir($target);
|
||||
while (false !== ($file = readdir($dir))) {
|
||||
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
|
||||
if (is_dir($source . '/' . $file)) {
|
||||
OC_Util::copyr($source . '/' . $file, $target . '/' . $file);
|
||||
$child = $target->newFolder($file);
|
||||
self::copyr($source . '/' . $file, $child);
|
||||
} else {
|
||||
copy($source . '/' . $file, $target . '/' . $file);
|
||||
$child = $target->newFile($file);
|
||||
stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue