Esempio n. 1
0
 /**
  * @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;
 }