예제 #1
0
 /**
  * Process partial/complete file download
  * @param array $args - array containing session id as an element with a key es_id 
  */
 public static function serve($args)
 {
     $session = new Db_Session();
     $session->load(@$args['es_id']);
     self::preDispatchGuest();
     $filename = $session->getGenesisUrl() ? $session->getGenesisUrl() : '';
     $download = new Download($session->getOwner(), $filename);
     $download->sendResponse();
 }
 /**
  * Process partial/complete file download
  * @param array $args - array containing session id as an element with a key es_id 
  */
 public static function serve($args)
 {
     $session = new Db_Session();
     $sessionData = $session->load(@$args['es_id'])->getData();
     $file = new File(@$sessionData['file_id']);
     if (!$file->isPublicShare()) {
         self::preDispatch(false);
     } else {
         self::preDispatchGuest(false);
     }
     $filename = isset($sessionData['genesis_url']) ? $sessionData['genesis_url'] : '';
     $download = new Download($sessionData['owner'], $filename);
     $download->sendResponse();
 }
예제 #3
0
 protected function getUniqueSessionId()
 {
     $testSession = new Db_Session();
     do {
         $id = \OC_Util::generateRandomBytes(30);
     } while ($testSession->load($id)->hasData());
     return $id;
 }
예제 #4
0
파일: otpoll.php 프로젝트: hjimmy/owncloud
    protected $body = "";
    public function setBody($body)
    {
        $this->body = $body;
    }
    public function getBody()
    {
        return $this->body;
    }
}
$response = array();
try {
    $request = new Request();
    $esId = $request->getParam('args/es_id');
    $session = new Db_Session();
    $session->load($esId);
    $memberId = $request->getParam('args/member_id');
    $member = new Db_Member();
    $member->load($memberId);
    if ($member->getIsGuest() || is_null($member->getIsGuest())) {
        Controller::preDispatchGuest(false);
    } else {
        Controller::preDispatch(false);
    }
    try {
        $file = new File($session->getFileId());
    } catch (\Exception $e) {
        Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage());
        $ex = new BadRequestException();
        $ex->setBody($request->getRawRequest());
        throw $ex;
예제 #5
0
 /**
  * Store the document content to its origin
  */
 public static function save()
 {
     try {
         $esId = @$_SERVER['HTTP_WEBODF_SESSION_ID'];
         if (!$esId) {
             throw new \Exception('Session id can not be empty');
         }
         $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID'];
         $currentMember = new Db_Member();
         $currentMember->load($memberId);
         if (is_null($currentMember->getIsGuest()) || $currentMember->getIsGuest()) {
             self::preDispatchGuest();
         } else {
             $uid = self::preDispatch();
         }
         //check if member belongs to the session
         if ($esId != $currentMember->getEsId()) {
             throw new \Exception($memberId . ' does not belong to session ' . $esId);
         }
         // Extra info for future usage
         // $sessionRevision = Helper::getArrayValueByKey($_SERVER, 'HTTP_WEBODF_SESSION_REVISION');
         $stream = fopen('php://input', 'r');
         if (!$stream) {
             throw new \Exception('New content missing');
         }
         $content = stream_get_contents($stream);
         $session = new Db_Session();
         $session->load($esId);
         if (!$session->getEsId()) {
             throw new \Exception('Session does not exist');
         }
         try {
             if ($currentMember->getIsGuest()) {
                 $file = File::getByShareToken($currentMember->getToken());
             } else {
                 $file = new File($session->getFileId());
             }
             list($view, $path) = $file->getOwnerViewAndPath(true);
         } catch (\Exception $e) {
             //File was deleted or unshared. We need to save content as new file anyway
             //Sorry, but for guests it would be lost :(
             if (isset($uid)) {
                 $view = new \OC\Files\View('/' . $uid . '/files');
                 $dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', '');
                 $path = Helper::getNewFileName($view, $dir . 'New Document.odt');
             }
         }
         $member = new Db_Member();
         $members = $member->getActiveCollection($esId);
         $memberIds = array_map(function ($x) {
             return $x['member_id'];
         }, $members);
         // Active users except current user
         $memberCount = count($memberIds) - 1;
         if ($view->file_exists($path)) {
             $proxyStatus = \OC_FileProxy::$enabled;
             \OC_FileProxy::$enabled = false;
             $currentHash = sha1($view->file_get_contents($path));
             \OC_FileProxy::$enabled = $proxyStatus;
             if (!Helper::isVersionsEnabled() && $currentHash !== $session->getGenesisHash()) {
                 // Original file was modified externally. Save to a new one
                 $path = Helper::getNewFileName($view, $path, '-conflict');
             }
             $mimetype = $view->getMimeType($path);
         } else {
             $mimetype = Storage::MIMETYPE_LIBREOFFICE_WORDPROCESSOR;
         }
         $data = Filter::write($content, $mimetype);
         if ($view->file_put_contents($path, $data['content'])) {
             // Not a last user
             if ($memberCount > 0) {
                 // Update genesis hash to prevent conflicts
                 Helper::debugLog('Update hash');
                 $session->updateGenesisHash($esId, sha1($data['content']));
             } else {
                 // Last user. Kill session data
                 Db_Session::cleanUp($esId);
             }
             $view->touch($path);
         }
         \OCP\JSON::success();
     } catch (\Exception $e) {
         Helper::warnLog('Saving failed. Reason:' . $e->getMessage());
         //\OCP\JSON::error(array('message'=>$e->getMessage()));
         \OC_Response::setStatus(500);
     }
     exit;
 }
예제 #6
0
    protected $body = "";
    public function setBody($body)
    {
        $this->body = $body;
    }
    public function getBody()
    {
        return $this->body;
    }
}
$response = array();
try {
    $request = new Request();
    $esId = $request->getParam('args/es_id');
    $session = new Db_Session();
    $sessionData = $session->load($esId)->getData();
    try {
        $file = new File(@$sessionData['file_id']);
    } catch (\Exception $e) {
        Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage());
        $ex = new BadRequestException();
        $ex->setBody("{err:'bad request: [" . $request->getRawRequest() . "]'}");
        throw $ex;
    }
    if (!$file->isPublicShare()) {
        Controller::preDispatch(false);
    } else {
        Controller::preDispatchGuest(false);
    }
    $command = $request->getParam('command');
    switch ($command) {
 /**
  * Store the document content to its origin
  */
 public static function save()
 {
     try {
         $esId = @$_SERVER['HTTP_WEBODF_SESSION_ID'];
         if (!$esId) {
             throw new \Exception('Session id can not be empty');
         }
         $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID'];
         $sessionRevision = @$_SERVER['HTTP_WEBODF_SESSION_REVISION'];
         $stream = fopen('php://input', 'r');
         if (!$stream) {
             throw new \Exception('New content missing');
         }
         $content = stream_get_contents($stream);
         $session = new Db_Session();
         $session->load($esId);
         if (!$session->hasData()) {
             throw new \Exception('Session does not exist');
         }
         $sessionData = $session->getData();
         $file = new File($sessionData['file_id']);
         if (!$file->isPublicShare()) {
             self::preDispatch();
         } else {
             self::preDispatchGuest();
         }
         list($view, $path) = $file->getOwnerViewAndPath();
         $isWritable = $view->file_exists($path) && $view->isUpdatable($path) || $view->isCreatable($path);
         if (!$isWritable) {
             throw new \Exception($path . ' does not exist or is not writable for user ' . $uid);
         }
         $member = new Db_Member();
         $members = $member->getActiveCollection($esId);
         $memberIds = array_map(function ($x) {
             return $x['member_id'];
         }, $members);
         //check if member belongs to the session
         if (!in_array($memberId, $memberIds)) {
             throw new \Exception($memberId . ' does not belong to session ' . $esId);
         }
         // Active users except current user
         $memberCount = count($memberIds) - 1;
         if ($view->file_exists($path)) {
             $proxyStatus = \OC_FileProxy::$enabled;
             \OC_FileProxy::$enabled = false;
             $currentHash = sha1($view->file_get_contents($path));
             \OC_FileProxy::$enabled = $proxyStatus;
             if (!Helper::isVersionsEnabled() && $currentHash !== $sessionData['genesis_hash']) {
                 // Original file was modified externally. Save to a new one
                 $path = Helper::getNewFileName($view, $path, '-conflict');
             }
         }
         if ($view->file_put_contents($path, $content)) {
             // Not a last user
             if ($memberCount > 0) {
                 // Update genesis hash to prevent conflicts
                 Helper::debugLog('Update hash');
                 $session->updateGenesisHash($esId, sha1($content));
             } else {
                 // Last user. Kill session data
                 Db_Session::cleanUp($esId);
             }
             $view->touch($path);
         }
         \OCP\JSON::success();
         exit;
     } catch (\Exception $e) {
         Helper::warnLog('Saving failed. Reason:' . $e->getMessage());
         \OCP\JSON::error(array('message' => $e->getMessage()));
         exit;
     }
 }
예제 #8
0
 protected function getUniqueSessionId()
 {
     $testSession = new Db_Session();
     do {
         // this prevents branching for stable5 for now:
         // OC_Util::generate_random_bytes was camelCased
         if (method_exists('\\OC_Util', 'generate_random_bytes')) {
             $id = \OC_Util::generate_random_bytes(30);
         } else {
             $id = \OC_Util::generateRandomBytes(30);
         }
     } while ($testSession->load($id)->hasData());
     return $id;
 }