From e2b49541760dabbdfce11bcc8063d31139b6caa3 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 22 Oct 2011 14:11:15 +0200 Subject: [PATCH] simple file encryption wip --- apps/files_encryption/lib/cryptstream.php | 7 +++++-- apps/files_encryption/lib/proxy.php | 17 +++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php index e4544313f63..7fbfeaa7a86 100644 --- a/apps/files_encryption/lib/cryptstream.php +++ b/apps/files_encryption/lib/cryptstream.php @@ -29,9 +29,12 @@ class OC_CryptStream{ public function stream_open($path, $mode, $options, &$opened_path){ $path=str_replace('crypt://','',$path); - $this->source=OC_FileSystem::fopen($path.'.enc',$mode); + OC_Log::write('files_encryption','open encrypted '.$path. ' in '.$mode,OC_Log::DEBUG); + OC_FileProxy::$enabled=false;//disable fileproxies so we can open the source file + $this->source=OC_FileSystem::fopen($path,$mode); + OC_FileProxy::$enabled=true; if(!is_resource($this->source)){ - OC_Log::write('files_encryption','failed to open '.$path.'.enc',OC_Log::ERROR); + OC_Log::write('files_encryption','failed to open '.$path,OC_Log::ERROR); } return is_resource($this->source); } diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index f7a991a344b..053ac786c33 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -28,7 +28,6 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ public function preFile_put_contents($path,&$data){ if(substr($path,-4)=='.enc'){ - OC_Log::write('files_encryption','file put contents',OC_Log::DEBUG); if (is_resource($data)) { $newData=''; while(!feof($data)){ @@ -44,27 +43,33 @@ class OC_FileProxy_Encryption extends OC_FileProxy{ public function postFile_get_contents($path,$data){ if(substr($path,-4)=='.enc'){ - OC_Log::write('files_encryption','file get contents',OC_Log::DEBUG); return OC_Crypt::blockDecrypt($data); } } public function postFopen($path,&$result){ if(substr($path,-4)=='.enc'){ - OC_Log::write('files_encryption','fopen',OC_Log::DEBUG); + $meta=stream_get_meta_data($result); fclose($result); - $result=fopen('crypt://'.substr($path,0,-4));//remove the .enc extention so we don't catch the fopen request made by cryptstream + OC_log::write('file_encryption','mode: '.$meta['mode']); + $result=fopen('crypt://'.$path,$meta['mode']); } } public function preReadFile($path){ if(substr($path,-4)=='.enc'){ - OC_Log::write('files_encryption','readline',OC_Log::DEBUG); - $stream=fopen('crypt://'.substr($path,0,-4)); + $stream=fopen('crypt://'.$path,'r'); while(!feof($stream)){ print(fread($stream,8192)); } return false;//cancel the original request } } + + public function postGetMimeType($path,$result){ + if(substr($path,-4)=='.enc'){ + return 'text/plain'; + } + return $result; + } } -- 2.39.5