/** * @param string $path Path of file from which has been read * @param string $data Data that has been read from file */ public function postFile_get_contents($path, $data) { $plainData = null; $view = new \OC_FilesystemView('/'); // init session $session = new \OCA\Encryption\Session($view); // If data is a catfile if (Crypt::mode() === 'server' && Crypt::isCatfileContent($data)) { $handle = fopen('crypt://' . $path, 'r'); if (is_resource($handle)) { while (($plainDataChunk = fgets($handle, 8192)) !== false) { $plainData .= $plainDataChunk; } } } elseif (Crypt::mode() == 'server' && \OC::$session->exists('legacyenckey') && Crypt::isEncryptedMeta($path)) { // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $plainData = Crypt::legacyBlockDecrypt($data, $session->getLegacyKey()); \OC_FileProxy::$enabled = $proxyStatus; } if (!isset($plainData)) { $plainData = $data; } return $plainData; }
/** * Check if a given path identifies an encrypted file * @param string $path * @return boolean */ public function isEncryptedPath($path) { // Disable encryption proxy so data retrieved is in its // original form $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $data = ''; // we only need 24 byte from the last chunk if ($this->view->file_exists($path)) { $handle = $this->view->fopen($path, 'r'); if (is_resource($handle)) { // suppress fseek warining, we handle the case that fseek doesn't // work in the else branch if (@fseek($handle, -24, SEEK_END) === 0) { $data = fgets($handle); } else { // if fseek failed on the storage we create a local copy from the file // and read this one fclose($handle); $localFile = $this->view->getLocalFile($path); $handle = fopen($localFile, 'r'); if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) { $data = fgets($handle); } } fclose($handle); } } // re-enable proxy \OC_FileProxy::$enabled = $proxyStatus; return Crypt::isCatfileContent($data); }
/** * @param string $path Path of file from which has been read * @param string $data Data that has been read from file */ public function postFile_get_contents($path, $data) { $plainData = null; $view = new \OC\Files\View('/'); // If data is a catfile if (Crypt::mode() === 'server' && Crypt::isCatfileContent($data)) { $handle = fopen('crypt://' . $path, 'r'); if (is_resource($handle)) { while (($plainDataChunk = fgets($handle, 8192)) !== false) { $plainData .= $plainDataChunk; } } } if (!isset($plainData)) { $plainData = $data; } return $plainData; }
/** * @brief Check if a given path identifies an encrypted file * @param string $path * @return boolean */ public function isEncryptedPath($path) { // Disable encryption proxy so data retrieved is in its // original form $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // we only need 24 byte from the last chunk $data = ''; $handle = $this->view->fopen($path, 'r'); if (is_resource($handle) && !fseek($handle, -24, SEEK_END)) { $data = fgets($handle); } // re-enable proxy \OC_FileProxy::$enabled = $proxyStatus; return Crypt::isCatfileContent($data); }