|
|
|
@ -38,6 +38,7 @@ class Proxy extends \OC_FileProxy { |
|
|
|
|
|
|
|
|
|
private static $blackList = null; //mimetypes blacklisted from encryption |
|
|
|
|
private static $unencryptedSizes = array(); // remember unencrypted size |
|
|
|
|
private static $fopenMode = array(); // remember the fopen mode |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Check if a file requires encryption |
|
|
|
@ -213,6 +214,16 @@ class Proxy extends \OC_FileProxy { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @brief remember initial fopen mode because sometimes it gets changed during the request |
|
|
|
|
* @param string $path path |
|
|
|
|
* @param string $mode type of access |
|
|
|
|
*/ |
|
|
|
|
public function preFopen($path, $mode) { |
|
|
|
|
self::$fopenMode[$path] = $mode; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param $path |
|
|
|
|
* @param $result |
|
|
|
@ -240,7 +251,15 @@ class Proxy extends \OC_FileProxy { |
|
|
|
|
$proxyStatus = \OC_FileProxy::$enabled; |
|
|
|
|
\OC_FileProxy::$enabled = false; |
|
|
|
|
|
|
|
|
|
$meta = stream_get_meta_data($result); |
|
|
|
|
// if we remember the mode from the pre proxy we re-use it |
|
|
|
|
// oterwise we fall back to stream_get_meta_data() |
|
|
|
|
if (isset(self::$fopenMode[$path])) { |
|
|
|
|
$mode = self::$fopenMode[$path]; |
|
|
|
|
unset(self::$fopenMode[$path]); |
|
|
|
|
} else { |
|
|
|
|
$meta = stream_get_meta_data($result); |
|
|
|
|
$mode = $meta['mode']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$view = new \OC_FilesystemView(''); |
|
|
|
|
|
|
|
|
@ -258,14 +277,15 @@ class Proxy extends \OC_FileProxy { |
|
|
|
|
|
|
|
|
|
// Open the file using the crypto stream wrapper |
|
|
|
|
// protocol and let it do the decryption work instead |
|
|
|
|
$result = fopen('crypt://' . $path, $meta['mode']); |
|
|
|
|
$result = fopen('crypt://' . $path, $mode); |
|
|
|
|
|
|
|
|
|
} elseif ( |
|
|
|
|
self::shouldEncrypt($path) |
|
|
|
|
and $meta['mode'] !== 'r' |
|
|
|
|
and $meta['mode'] !== 'rb' |
|
|
|
|
self::shouldEncrypt($path) |
|
|
|
|
and $mode !== 'r' |
|
|
|
|
and $mode !== 'rb' |
|
|
|
|
|
|
|
|
|
) { |
|
|
|
|
$result = fopen('crypt://' . $path, $meta['mode']); |
|
|
|
|
$result = fopen('crypt://' . $path, $mode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Re-enable the proxy |
|
|
|
|