From b3a974d8bbcd88602a54cf32cd472802583ab4aa Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 5 Feb 2012 21:49:22 +0100 Subject: [PATCH] only trigger hooks for the default filesystem view --- apps/files_encryption/lib/crypt.php | 41 ++++++++++++++--------------- lib/filesystemview.php | 22 +++++++++------- lib/user.php | 3 ++- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index 4e7739b1d0..0a593b98c4 100644 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -44,19 +44,20 @@ class OC_Crypt { } public static function init($login,$password) { - if(OC_User::isLoggedIn()){ - $view=new OC_FilesystemView('/'.$login); - if(!$view->file_exists('/encryption.key')){// does key exist? - OC_Crypt::createkey($password); - } - $key=$view->file_get_contents('/encryption.key'); - $_SESSION['enckey']=OC_Crypt::decrypt($key, $password); + $view=new OC_FilesystemView('/'.$login); + OC_FileProxy::$enabled=false; + if(!$view->file_exists('/encryption.key')){// does key exist? + OC_Crypt::createkey($login,$password); } + $key=$view->file_get_contents('/encryption.key'); + OC_FileProxy::$enabled=true; + $_SESSION['enckey']=OC_Crypt::decrypt($key, $password); } /** * get the blowfish encryption handeler for a key * @param string $key (optional) + * @return Crypt_Blowfish * * if the key is left out, the default handeler will be used */ @@ -74,21 +75,19 @@ class OC_Crypt { } } - public static function createkey($passcode) { - if(OC_User::isLoggedIn()){ - // generate a random key - $key=mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999); + public static function createkey($username,$passcode) { + // generate a random key + $key=mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999); - // encrypt the key with the passcode of the user - $enckey=OC_Crypt::encrypt($key,$passcode); + // encrypt the key with the passcode of the user + $enckey=OC_Crypt::encrypt($key,$passcode); - // Write the file - $username=OC_USER::getUser(); - OC_FileProxy::$enabled=false; - $view=new OC_FilesystemView('/'.$username); - $view->file_put_contents('/encryption.key',$enckey); - OC_FileProxy::$enabled=true; - } + // Write the file + $proxyEnabled=OC_FileProxy::$enabled; + OC_FileProxy::$enabled=false; + $view=new OC_FilesystemView('/'.$username); + $view->file_put_contents('/encryption.key',$enckey); + OC_FileProxy::$enabled=$proxyEnabled; } public static function changekeypasscode($oldPassword, $newPassword) { @@ -133,7 +132,7 @@ class OC_Crypt { */ public static function decrypt( $content, $key='') { $bf = self::getBlowfish($key); - return($bf->encrypt($contents)); + return($bf->decrypt($content)); } /** diff --git a/lib/filesystemview.php b/lib/filesystemview.php index a7003e84f1..0ce803be2b 100644 --- a/lib/filesystemview.php +++ b/lib/filesystemview.php @@ -303,11 +303,13 @@ class OC_FilesystemView { if(OC_FileProxy::runPreProxies($operation,$path, $extraParam) and OC_Filesystem::isValidPath($path) and $storage=$this->getStorage($path)){ $interalPath=$this->getInternalPath($path); $run=true; - foreach($hooks as $hook){ - if($hook!='read'){ - OC_Hook::emit( OC_Filesystem::CLASSNAME, $hook, array( OC_Filesystem::signal_param_path => $path, OC_Filesystem::signal_param_run => &$run)); - }else{ - OC_Hook::emit( OC_Filesystem::CLASSNAME, $hook, array( OC_Filesystem::signal_param_path => $path)); + if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()){ + foreach($hooks as $hook){ + if($hook!='read'){ + OC_Hook::emit( OC_Filesystem::CLASSNAME, $hook, array( OC_Filesystem::signal_param_path => $path, OC_Filesystem::signal_param_run => &$run)); + }else{ + OC_Hook::emit( OC_Filesystem::CLASSNAME, $hook, array( OC_Filesystem::signal_param_path => $path)); + } } } if($run){ @@ -317,10 +319,12 @@ class OC_FilesystemView { $result=$storage->$operation($interalPath); } $result=OC_FileProxy::runPostProxies($operation,$path,$result); - if($operation!='fopen'){//no post hooks for fopen, the file stream is still open - foreach($hooks as $hook){ - if($hook!='read'){ - OC_Hook::emit( OC_Filesystem::CLASSNAME, 'post_'.$hook, array( OC_Filesystem::signal_param_path => $path)); + if(OC_Filesystem::$loaded and $this->fakeRoot==OC_Filesystem::getRoot()){ + if($operation!='fopen'){//no post hooks for fopen, the file stream is still open + foreach($hooks as $hook){ + if($hook!='read'){ + OC_Hook::emit( OC_Filesystem::CLASSNAME, 'post_'.$hook, array( OC_Filesystem::signal_param_path => $path)); + } } } } diff --git a/lib/user.php b/lib/user.php index aa828de52f..826215b228 100644 --- a/lib/user.php +++ b/lib/user.php @@ -195,8 +195,9 @@ class OC_User { if( $run ){ $uid=self::checkPassword( $uid, $password ); if($uid){ - return self::setUserId($uid); + self::setUserId($uid); OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid, 'password'=>$password )); + return true; } } return false;