/** * @brief Find all files and their encryption status within a directory * @param string $directory The path of the parent directory to search * @param bool $found the founded files if called again * @return mixed false if 0 found, array on success. Keys: name, path * @note $directory needs to be a path relative to OC data dir. e.g. * /admin/files NOT /backup OR /home/www/oc/data/admin/files */ public function findEncFiles($directory, &$found = false) { // Disable proxy - we don't want files to be decrypted before // we handle them \OC_FileProxy::$enabled = false; if ($found === false) { $found = array('plain' => array(), 'encrypted' => array(), 'legacy' => array()); } if ($this->view->is_dir($directory) && ($handle = $this->view->opendir($directory))) { if (is_resource($handle)) { while (false !== ($file = readdir($handle))) { if ($file !== "." && $file !== "..") { $filePath = $directory . '/' . $this->view->getRelativePath('/' . $file); $relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath); // If the path is a directory, search // its contents if ($this->view->is_dir($filePath)) { $this->findEncFiles($filePath, $found); // If the path is a file, determine // its encryption status } elseif ($this->view->is_file($filePath)) { // Disable proxies again, some- // where they got re-enabled :/ \OC_FileProxy::$enabled = false; $isEncryptedPath = $this->isEncryptedPath($filePath); // If the file is encrypted // NOTE: If the userId is // empty or not set, file will // detected as plain // NOTE: This is inefficient; // scanning every file like this // will eat server resources :( if (Keymanager::getFileKey($this->view, $this, $relPath) && $isEncryptedPath) { $found['encrypted'][] = array('name' => $file, 'path' => $filePath); // If the file uses old // encryption system } elseif (Crypt::isLegacyEncryptedContent($isEncryptedPath, $relPath)) { $found['legacy'][] = array('name' => $file, 'path' => $filePath); // If the file is not encrypted } else { $found['plain'][] = array('name' => $file, 'path' => $relPath); } } } } } \OC_FileProxy::$enabled = true; if (empty($found)) { return false; } else { return $found; } } \OC_FileProxy::$enabled = true; return false; }