예제 #1
0
 public function testContent()
 {
     $this->instance = $this->getExisting();
     $dir = \OC::$SERVERROOT . '/tests/data';
     $textFile = $dir . '/lorem.txt';
     $this->assertEquals(file_get_contents($textFile), $this->instance->getFile('lorem.txt'));
     $tmpFile = \OCP\Files::tmpFile('.txt');
     $this->instance->extractFile('lorem.txt', $tmpFile);
     $this->assertEquals(file_get_contents($textFile), file_get_contents($tmpFile));
 }
예제 #2
0
 /**
  * convert via openOffice hosted on the same server
  * @param string $input
  * @param string $targetFilter
  * @param string $targetExtension
  * @return string
  */
 protected static function convertLocal($input, $targetFilter, $targetExtension)
 {
     $infile = \OCP\Files::tmpFile();
     $outdir = \OCP\Files::tmpFolder();
     $cmd = Helper::findOpenOffice();
     $params = ' --headless --convert-to ' . $targetFilter . ' --outdir ' . escapeshellarg($outdir) . ' --writer ' . escapeshellarg($infile) . ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir() . '/owncloud-' . \OC_Util::getInstanceId() . '/');
     file_put_contents($infile, $input);
     shell_exec($cmd . $params);
     $output = file_get_contents($outdir . '/' . basename($infile) . '.' . $targetExtension);
     return $output;
 }
예제 #3
0
 public static function getPackage($url, $version)
 {
     self::$package = \OCP\Files::tmpFile();
     if (!self::$package) {
         throw new \Exception('Unable to create a temporary file');
     }
     try {
         if (self::fetch($url) === false) {
             throw new \Exception("Error storing package content");
         }
         if (preg_match('/\\.zip$/i', $url)) {
             rename(self::$package, self::$package . '.zip');
             self::$package .= '.zip';
         } elseif (preg_match('/(\\.tgz|\\.tar\\.gz)$/i', $url)) {
             rename(self::$package, self::$package . '.tgz');
             self::$package .= '.tgz';
         } elseif (preg_match('/\\.tar\\.bz2$/i', $url)) {
             rename(self::$package, self::$package . '.tar.bz2');
             self::$package .= '.tar.bz2';
         } else {
             throw new \Exception('Unable to extract package');
         }
         $extractDir = self::getPackageDir($version);
         Helper::mkdir($extractDir, true);
         $archive = \OC_Archive::open(self::$package);
         if (!$archive || !$archive->extract($extractDir)) {
             throw new \Exception(self::$package . " extraction error");
         }
     } catch (\Exception $e) {
         App::log('Retrieving ' . $url);
         self::cleanUp($version);
         throw $e;
     }
     Helper::removeIfExists(self::$package);
     //  Prepare extracted data
     //  to have '3rdparty', 'apps' and 'core' subdirectories
     $sources = Helper::getSources($version);
     $baseDir = $extractDir . '/' . self::PACKAGE_ROOT;
     rename($baseDir . '/' . Helper::THIRDPARTY_DIRNAME, $sources[Helper::THIRDPARTY_DIRNAME]);
     rename($baseDir . '/' . Helper::APP_DIRNAME, $sources[Helper::APP_DIRNAME]);
     rename($baseDir, $sources[Helper::CORE_DIRNAME]);
 }
예제 #4
0
 public static function testConversion()
 {
     $targetFilter = 'odt:writer8';
     $targetExtension = 'odt';
     $input = file_get_contents(dirname(__DIR__) . self::TEST_DOC_PATH);
     $infile = \OCP\Files::tmpFile();
     $outdir = \OCP\Files::tmpFolder();
     $outfile = $outdir . '/' . basename($infile) . '.' . $targetExtension;
     $cmd = Helper::findOpenOffice();
     $params = ' --headless --convert-to ' . escapeshellarg($targetFilter) . ' --outdir ' . escapeshellarg($outdir) . ' --writer ' . escapeshellarg($infile) . ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir() . '/owncloud-' . \OC_Util::getInstanceId() . '/') . ' 2>&1';
     file_put_contents($infile, $input);
     $result = shell_exec($cmd . $params);
     $exists = file_exists($outfile);
     if (!$exists) {
         Helper::warnLog('Conversion test failed. Raw output:' . $result);
         return false;
     } else {
         unlink($outfile);
     }
     return true;
 }
예제 #5
0
파일: ftp.php 프로젝트: CDN-Sparks/owncloud
 public function fopen($path, $mode)
 {
     switch ($mode) {
         case 'r':
         case 'rb':
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
             //these are supported by the wrapper
             $context = stream_context_create(array('ftp' => array('overwrite' => true)));
             return fopen($this->constructUrl($path), $mode, false, $context);
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             //emulate these
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $this->getFile($path, $tmpFile);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
     return false;
 }
예제 #6
0
 protected function getNew()
 {
     return new ZIP(\OCP\Files::tmpFile('.zip'));
 }
예제 #7
0
파일: TAR.php 프로젝트: GitHubUser4234/core
 /**
  * get a file handler
  *
  * @param string $path
  * @param string $mode
  * @return resource
  */
 function getStream($path, $mode)
 {
     if (strrpos($path, '.') !== false) {
         $ext = substr($path, strrpos($path, '.'));
     } else {
         $ext = '';
     }
     $tmpFile = \OCP\Files::tmpFile($ext);
     if ($this->fileExists($path)) {
         $this->extractFile($path, $tmpFile);
     } elseif ($mode == 'r' or $mode == 'rb') {
         return false;
     }
     if ($mode == 'r' or $mode == 'rb') {
         return fopen($tmpFile, $mode);
     } else {
         \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
         self::$tempFiles[$tmpFile] = $path;
         return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #8
0
 public function fopen($path, $mode)
 {
     $path = $this->normalizePath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             $tmpFile = \OCP\Files::tmpFile();
             self::$tmpFiles[$tmpFile] = $path;
             try {
                 $this->getConnection()->getObject(array('Bucket' => $this->bucket, 'Key' => $path, 'SaveAs' => $tmpFile));
             } catch (S3Exception $e) {
                 \OCP\Util::logException('files_external', $e);
                 return false;
             }
             return fopen($tmpFile, 'r');
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $source = $this->fopen($path, 'r');
                 file_put_contents($tmpFile, $source);
             }
             self::$tmpFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
     return false;
 }
예제 #9
0
            Helper::warnLog('Bad response from Format Filter Server');
            \OCP\JSON::error(array('data' => array('message' => Config::getL10n()->t('Format filter server is down or misconfigured'))));
            exit;
        }
    } else {
        $targetFilter = 'odt:writer8';
        $targetExtension = 'odt';
        $input = '0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAKQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8hAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAP7///8iAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA/v///yoAAAD+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAAgAAAD+////CgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAP7///9FAAAA/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAAUAQAACQAAAAEAAABQAAAAAgAAAFgAAAAEAAAAvAAAAAgAAADIAAAACQAAANgAAAAKAAAA5AAAAAsAAADwAAAADAAAAPwAAAANAAAACAEAAAIAAADp/QAAHgAAAFwAAADQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LHQsNC90LrQvtCy0YHQutCw0Y8g0YHQuNGB0YLQtdC80LAgwqvQodCiLdCR0LDQvdC6wrsgAB4AAAADAAAAUEMAAB4AAAAHAAAAZnN2Y3h2AAAeAAAAAgAAADMAAABAAAAAAAAAAAAAAABAAAAAABzeaCTYywFAAAAAABzXRbJzzAFAAAAAwJREgxIAigAKAAEAWwAPAAIAAAAAAAAAegAAEPH/AgB6AAAABgBOAG8AcgBtAGEAbAAAACwAAAASZGgBAQADJANhJAMxJABehAAAXYQAAGCExQJBJAAqJAE3JAE1JAEzJAEvAEIqAE9KBABRSgQAQ0oYAG1IGQRzSBkEUEoEAF5KBABhShQAX0gBBG5IBAh0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AwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA1ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA0ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA3ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAyADQAXwA4ADMANAAxADAANgAwADMAOAAZAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA2AF8AOAAzADQAMQAwADYAMAAzADgAGQBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADgAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADIAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMANgBfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADMAOABfADgAMwA0ADEAMAA2ADAAMwA4ABoAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADQAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIAMgBfADgAMwA0ADEAMAA2ADAAMwA4ACgAXw
AlAEQAMAAlAEEAMAAlAEQAMAAlAEIAOAAlAEQAMQAlADgAMQAlAEQAMQAlADgAMwAlAEQAMAAlAEIARAAlAEQAMAAlAEIARQAlAEQAMAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADIANABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMgA2AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAyADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADMAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAzADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMwA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMAAyADkAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANAA0AF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQA0ADYAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADQAOABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAwAF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMAAlAEIAMAA0ADEAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA4ADgAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADAAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADIAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADQAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADYAXwA4ADMANAAxADAANgAwADMAOAAaAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwA5ADgAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAAMABfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEANQAyAF8AOAAzADQAMQAwADYAMAAzADgAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAwADQAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADAANgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXwBfAFIAZQBmAEgAZQBhAGQAaQBuAGcAXwBfADEAMAA4AF8AOAAzADQAMQAwADYAMAAzADgACAAlAEQAMQAlADgAMwAxADMAGwBfAF8AUgBlAGYASABlAGEAZABpAG4AZwBfAF8AMQAxADAAXwA4ADMANAAxADAANgAwADMAOAAbAF8AXwBSAGUAZgBIAGUAYQBkAGkAbgBnAF8AXwAxADEAMgBfADgAMwA0ADEAMAA2ADAAMwA4ABsAXw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AEAAIAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITcAAGICAAAAAAAAAAAAAIwzAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCHAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiGgAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAshkAADgAAADMGgAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8DAAAB4AAABgMwAAGAAAAAAAAAAAAAAA6hkAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeDMAAAgAAAAAAAAAAAAAAIAzAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AGUAcwB0AAwAEwAgAFQATwBDACAAFAAVAAwACAANAA0ADQANAA0AEwAgAFAAQQBHAEUAIAAUADEAFQANAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKCAAADAgAABYIAAAYCAAAGggAABwIAAAeCAAAKAgAACoIAAA2CAAAOAgAADoIAAA8CAAAQggAAAD9AP39APgA8e7x7vEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDBKaQAADTBKaQADagAAAABVCAEJA2oAAAAAVQgBA1UIAQAOAAgAAAoIAAAcCAAAIAgAACIIAAAkCAAAJggAACgIAAA+CAAAQAgAAEIIAABECAAA+QAAAAAAAAAAAAAAAPcAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAPEAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAAAOsAAAAAAAAAAAAAAADpAAAAAAAAAAAAAAAA5wAAAAAAAAAAAAAAAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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';
        $infile = \OCP\Files::tmpFile();
        $outdir = \OCP\Files::tmpFolder();
        $outfile = $outdir . '/' . basename($infile) . '.' . $targetExtension;
        $cmd = Helper::findOpenOffice();
        $params = ' --headless --convert-to ' . escapeshellarg($targetFilter) . ' --outdir ' . escapeshellarg($outdir) . ' --writer ' . escapeshellarg($infile) . ' -env:UserInstallation=file://' . escapeshellarg(get_temp_dir()) . ' 2>&1';
        file_put_contents($infile, $input);
        $result = shell_exec($cmd . $params);
        $exists = file_exists($outfile);
        if (!$exists) {
            Helper::warnLog('Conversion failed. Raw output:' . $result);
            \OCP\JSON::error(array('data' => array('message' => Config::getL10n()->t('Conversion failed. Check log for details.'))));
            exit;
        } else {
            unlink($outfile);
        }
    }
예제 #10
0
파일: swift.php 프로젝트: kenwi/core
 public function fopen($path, $mode)
 {
     $path = $this->normalizePath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             $tmpFile = \OCP\Files::tmpFile();
             self::$tmpFiles[$tmpFile] = $path;
             try {
                 $object = $this->getContainer()->getObject($path);
             } catch (ClientErrorResponseException $e) {
                 \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
                 return false;
             } catch (Exception\ObjectNotFoundException $e) {
                 \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
                 return false;
             }
             try {
                 $objectContent = $object->getContent();
                 $objectContent->rewind();
                 $stream = $objectContent->getStream();
                 file_put_contents($tmpFile, $stream);
             } catch (Exceptions\IOError $e) {
                 \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
                 return false;
             }
             return fopen($tmpFile, 'r');
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             // Fetch existing file if required
             if ($mode[0] !== 'w' && $this->file_exists($path)) {
                 if ($mode[0] === 'x') {
                     // File cannot already exist
                     return false;
                 }
                 $source = $this->fopen($path, 'r');
                 file_put_contents($tmpFile, $source);
                 // Seek to end if required
                 if ($mode[0] === 'a') {
                     fseek($tmpFile, 0, SEEK_END);
                 }
             }
             self::$tmpFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #11
0
	/**
	 * {@inheritdoc}
	 */
	public function fopen($path, $mode) {
		$fullPath = $this->buildPath($path);
		$useExisting = true;
		switch ($mode) {
			case 'r':
			case 'rb':
				try {
					return $this->flysystem->readStream($fullPath);
				} catch (FileNotFoundException $e) {
					return false;
				}
			case 'w':
			case 'w+':
			case 'wb':
			case 'wb+':
				$useExisting = false;
			case 'a':
			case 'ab':
			case 'r+':
			case 'a+':
			case 'x':
			case 'x+':
			case 'c':
			case 'c+':
				//emulate these
				if ($useExisting and $this->file_exists($path)) {
					if (!$this->isUpdatable($path)) {
						return false;
					}
					$tmpFile = $this->getCachedFile($path);
				} else {
					if (!$this->isCreatable(dirname($path))) {
						return false;
					}
					$tmpFile = \OCP\Files::tmpFile();
				}
				$source = fopen($tmpFile, $mode);
				return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath) {
					$this->flysystem->putStream($fullPath, fopen($tmpFile, 'r'));
					unlink($tmpFile);
				});
		}
		return false;
	}
예제 #12
0
 protected function setUp()
 {
     parent::setUp();
     $this->tmpFile = \OCP\Files::tmpFile('.tar.gz');
     $this->instance = new \OC\Files\Storage\Archive(array('archive' => $this->tmpFile));
 }
예제 #13
0
파일: dropbox.php 프로젝트: evanjt/core
 public function fopen($path, $mode)
 {
     $path = $this->root . $path;
     switch ($mode) {
         case 'r':
         case 'rb':
             $tmpFile = \OCP\Files::tmpFile();
             try {
                 $data = $this->dropbox->getFile($path);
                 file_put_contents($tmpFile, $data);
                 return fopen($tmpFile, 'r');
             } catch (\Exception $exception) {
                 \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
                 return false;
             }
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $source = $this->fopen($path, 'r');
                 file_put_contents($tmpFile, $source);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
     return false;
 }
예제 #14
0
 public function fopen($path, $mode)
 {
     $path = $this->normalizePath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             try {
                 $c = $this->getContainer();
                 $streamFactory = new \Guzzle\Stream\PhpStreamRequestFactory();
                 $streamInterface = $streamFactory->fromRequest($c->getClient()->get($c->getUrl($path)));
                 $streamInterface->rewind();
                 $stream = $streamInterface->getStream();
                 stream_context_set_option($stream, 'swift', 'content', $streamInterface);
                 if (!strrpos($streamInterface->getMetaData('wrapper_data')[0], '404 Not Found')) {
                     return $stream;
                 }
                 return false;
             } catch (\Guzzle\Http\Exception\BadResponseException $e) {
                 \OCP\Util::writeLog('files_external', $e->getMessage(), \OCP\Util::ERROR);
                 return false;
             }
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             // Fetch existing file if required
             if ($mode[0] !== 'w' && $this->file_exists($path)) {
                 if ($mode[0] === 'x') {
                     // File cannot already exist
                     return false;
                 }
                 $source = $this->fopen($path, 'r');
                 file_put_contents($tmpFile, $source);
                 // Seek to end if required
                 if ($mode[0] === 'a') {
                     fseek($tmpFile, 0, SEEK_END);
                 }
             }
             self::$tmpFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #15
0
 /**
  * get a file handler
  * @param string $path
  * @param string $mode
  * @return resource
  */
 function getStream($path, $mode)
 {
     if ($mode == 'r' or $mode == 'rb') {
         return $this->zip->getStream($path);
     } else {
         //since we can't directly get a writable stream,
         //make a temp copy of the file and put it back
         //in the archive when the stream is closed
         if (strrpos($path, '.') !== false) {
             $ext = substr($path, strrpos($path, '.'));
         } else {
             $ext = '';
         }
         $tmpFile = \OCP\Files::tmpFile($ext);
         \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
         if ($this->fileExists($path)) {
             $this->extractFile($path, $tmpFile);
         }
         self::$tempFiles[$tmpFile] = $path;
         return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #16
0
 protected function getNew()
 {
     return new TAR(\OCP\Files::tmpFile('.tar.gz'));
 }
예제 #17
0
 public function fopen($path, $mode)
 {
     $pos = strrpos($path, '.');
     if ($pos !== false) {
         $ext = substr($path, $pos);
     } else {
         $ext = '';
     }
     switch ($mode) {
         case 'r':
         case 'rb':
             $file = $this->getDriveFile($path);
             if ($file) {
                 $exportLinks = $file->getExportLinks();
                 $mimetype = $this->getMimeType($path);
                 $downloadUrl = null;
                 if ($exportLinks && isset($exportLinks[$mimetype])) {
                     $downloadUrl = $exportLinks[$mimetype];
                 } else {
                     $downloadUrl = $file->getDownloadUrl();
                 }
                 if (isset($downloadUrl)) {
                     $request = new \Google_Http_Request($downloadUrl, 'GET', null, null);
                     $httpRequest = $this->client->getAuth()->authenticatedRequest($request);
                     if ($httpRequest->getResponseHttpCode() == 200) {
                         $tmpFile = \OCP\Files::tmpFile($ext);
                         $data = $httpRequest->getResponseBody();
                         file_put_contents($tmpFile, $data);
                         return fopen($tmpFile, $mode);
                     }
                 }
             }
             return false;
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $source = $this->fopen($path, 'rb');
                 file_put_contents($tmpFile, $source);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #18
0
 public function fopen($path, $mode)
 {
     $path = $this->root . $path;
     switch ($mode) {
         case 'r':
         case 'rb':
             try {
                 // slashes need to stay
                 $encodedPath = str_replace('%2F', '/', rawurlencode(trim($path, '/')));
                 $downloadUrl = 'https://api-content.dropbox.com/1/files/auto/' . $encodedPath;
                 $headers = $this->oauth->getOAuthHeader($downloadUrl, [], 'GET');
                 $client = \OC::$server->getHTTPClientService()->newClient();
                 try {
                     $response = $client->get($downloadUrl, ['headers' => $headers, 'stream' => true]);
                 } catch (RequestException $e) {
                     if (!is_null($e->getResponse())) {
                         if ($e->getResponse()->getStatusCode() === 404) {
                             return false;
                         } else {
                             throw $e;
                         }
                     } else {
                         throw $e;
                     }
                 }
                 $handle = $response->getBody();
                 return RetryWrapper::wrap($handle);
             } catch (\Exception $exception) {
                 \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
                 return false;
             }
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $source = $this->fopen($path, 'r');
                 file_put_contents($tmpFile, $source);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
     return false;
 }
예제 #19
0
파일: storage.php 프로젝트: anolisti/apps
 private function toTmpFile($path)
 {
     $tmpFile = \OCP\Files::tmpFile();
     $this->archive->extractFile($path, $tmpFile);
     return $tmpFile;
 }
예제 #20
0
파일: storage.php 프로젝트: anolisti/apps
 public function setUp()
 {
     $this->tmpFile = \OCP\Files::tmpFile('.tar.gz');
     $this->instance = new \OC\Files\Storage\Archive(array('archive' => $this->tmpFile));
 }
예제 #21
0
파일: smb.php 프로젝트: evanjt/core
 /**
  * @param string $path
  * @param string $mode
  * @return resource
  */
 public function fopen($path, $mode)
 {
     $fullPath = $this->buildPath($path);
     try {
         switch ($mode) {
             case 'r':
             case 'rb':
                 if (!$this->file_exists($path)) {
                     return false;
                 }
                 return $this->share->read($fullPath);
             case 'w':
             case 'wb':
                 return $this->share->write($fullPath);
             case 'a':
             case 'ab':
             case 'r+':
             case 'w+':
             case 'wb+':
             case 'a+':
             case 'x':
             case 'x+':
             case 'c':
             case 'c+':
                 //emulate these
                 if (strrpos($path, '.') !== false) {
                     $ext = substr($path, strrpos($path, '.'));
                 } else {
                     $ext = '';
                 }
                 if ($this->file_exists($path)) {
                     if (!$this->isUpdatable($path)) {
                         return false;
                     }
                     $tmpFile = $this->getCachedFile($path);
                 } else {
                     if (!$this->isCreatable(dirname($path))) {
                         return false;
                     }
                     $tmpFile = \OCP\Files::tmpFile($ext);
                 }
                 $source = fopen($tmpFile, $mode);
                 $share = $this->share;
                 return CallBackWrapper::wrap($source, null, null, function () use($tmpFile, $fullPath, $share) {
                     $share->put($tmpFile, $fullPath);
                     unlink($tmpFile);
                 });
         }
         return false;
     } catch (NotFoundException $e) {
         return false;
     }
 }
예제 #22
0
파일: dav.php 프로젝트: unrealbato/core
 /** {@inheritdoc} */
 public function fopen($path, $mode)
 {
     $this->init();
     $path = $this->cleanPath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             if (!$this->file_exists($path)) {
                 return false;
             }
             $response = $this->httpClientService->newClient()->get($this->createBaseUri() . $this->encodePath($path), ['auth' => [$this->user, $this->password], 'stream' => true]);
             if ($response->getStatusCode() !== Http::STATUS_OK) {
                 if ($response->getStatusCode() === Http::STATUS_LOCKED) {
                     throw new \OCP\Lock\LockedException($path);
                 } else {
                     Util::writeLog("webdav client", 'Guzzle get returned status code ' . $response->getStatusCode(), Util::ERROR);
                 }
             }
             return $response->getBody();
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             //emulate these
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             if ($this->file_exists($path)) {
                 if (!$this->isUpdatable($path)) {
                     return false;
                 }
                 $tmpFile = $this->getCachedFile($path);
             } else {
                 if (!$this->isCreatable(dirname($path))) {
                     return false;
                 }
                 $tmpFile = Files::tmpFile($ext);
             }
             Close::registerCallback($tmpFile, array($this, 'writeBack'));
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #23
0
파일: dav.php 프로젝트: nazar-pc/core
 /** {@inheritdoc} */
 public function fopen($path, $mode)
 {
     $this->init();
     $path = $this->cleanPath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             if (!$this->file_exists($path)) {
                 return false;
             }
             //straight up curl instead of sabredav here, sabredav put's the entire get result in memory
             $curl = curl_init();
             $fp = fopen('php://temp', 'r+');
             curl_setopt($curl, CURLOPT_USERPWD, $this->user . ':' . $this->password);
             curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . $this->encodePath($path));
             curl_setopt($curl, CURLOPT_FILE, $fp);
             curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
             if (defined('CURLOPT_PROTOCOLS')) {
                 curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
             }
             if (defined('CURLOPT_REDIR_PROTOCOLS')) {
                 curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
             }
             if ($this->secure === true) {
                 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
                 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
                 if ($this->certPath) {
                     curl_setopt($curl, CURLOPT_CAINFO, $this->certPath);
                 }
             }
             curl_exec($curl);
             $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
             if ($statusCode !== 200) {
                 Util::writeLog("webdav client", 'curl GET ' . curl_getinfo($curl, CURLINFO_EFFECTIVE_URL) . ' returned status code ' . $statusCode, Util::ERROR);
             }
             curl_close($curl);
             rewind($fp);
             return $fp;
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             //emulate these
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             if ($this->file_exists($path)) {
                 if (!$this->isUpdatable($path)) {
                     return false;
                 }
                 $tmpFile = $this->getCachedFile($path);
             } else {
                 if (!$this->isCreatable(dirname($path))) {
                     return false;
                 }
                 $tmpFile = Files::tmpFile($ext);
             }
             Close::registerCallback($tmpFile, array($this, 'writeBack'));
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #24
0
파일: google.php 프로젝트: gvde/core
 public function fopen($path, $mode)
 {
     $pos = strrpos($path, '.');
     if ($pos !== false) {
         $ext = substr($path, $pos);
     } else {
         $ext = '';
     }
     switch ($mode) {
         case 'r':
         case 'rb':
             $file = $this->getDriveFile($path);
             if ($file) {
                 $exportLinks = $file->getExportLinks();
                 $mimetype = $this->getMimeType($path);
                 $downloadUrl = null;
                 if ($exportLinks && isset($exportLinks[$mimetype])) {
                     $downloadUrl = $exportLinks[$mimetype];
                 } else {
                     $downloadUrl = $file->getDownloadUrl();
                 }
                 if (isset($downloadUrl)) {
                     $request = new \Google_Http_Request($downloadUrl, 'GET', null, null);
                     $httpRequest = $this->client->getAuth()->sign($request);
                     // the library's service doesn't support streaming, so we use Guzzle instead
                     $client = \OC::$server->getHTTPClientService()->newClient();
                     try {
                         $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($ext);
                         $client->get($downloadUrl, ['headers' => $httpRequest->getRequestHeaders(), 'save_to' => $tmpFile]);
                     } catch (RequestException $e) {
                         if (!is_null($e->getResponse())) {
                             if ($e->getResponse()->getStatusCode() === 404) {
                                 return false;
                             } else {
                                 throw $e;
                             }
                         } else {
                             throw $e;
                         }
                     }
                     return fopen($tmpFile, 'r');
                 }
             }
             return false;
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $source = $this->fopen($path, 'rb');
                 file_put_contents($tmpFile, $source);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }
예제 #25
0
 private function getTmpFile($path)
 {
     $this->init();
     $obj = $this->getObject($path);
     if (!is_null($obj)) {
         $tmpFile = \OCP\Files::tmpFile();
         $obj->save_to_filename($tmpFile);
         return $tmpFile;
     } else {
         return \OCP\Files::tmpFile();
     }
 }
예제 #26
0
 public function fopen($path, $mode)
 {
     $this->init();
     $path = $this->cleanPath($path);
     switch ($mode) {
         case 'r':
         case 'rb':
             if (!$this->file_exists($path)) {
                 return false;
             }
             //straight up curl instead of sabredav here, sabredav put's the entire get result in memory
             $curl = curl_init();
             $fp = fopen('php://temp', 'r+');
             curl_setopt($curl, CURLOPT_USERPWD, $this->user . ':' . $this->password);
             curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . str_replace(' ', '%20', $path));
             curl_setopt($curl, CURLOPT_FILE, $fp);
             curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
             curl_exec($curl);
             curl_close($curl);
             rewind($fp);
             return $fp;
         case 'w':
         case 'wb':
         case 'a':
         case 'ab':
         case 'r+':
         case 'w+':
         case 'wb+':
         case 'a+':
         case 'x':
         case 'x+':
         case 'c':
         case 'c+':
             //emulate these
             if (strrpos($path, '.') !== false) {
                 $ext = substr($path, strrpos($path, '.'));
             } else {
                 $ext = '';
             }
             $tmpFile = \OCP\Files::tmpFile($ext);
             \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
             if ($this->file_exists($path)) {
                 $this->getFile($path, $tmpFile);
             }
             self::$tempFiles[$tmpFile] = $path;
             return fopen('close://' . $tmpFile, $mode);
     }
 }