/** * Create new genesis document * @param File $file * */ public function __construct(File $file) { $view = $file->getOwnerView(); $path = $file->getPath(); $owner = $file->getOwner(); $this->view = new View('/' . $owner); if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)) { $this->view->mkdir(self::DOCUMENTS_DIRNAME); } $this->validate($view, $path); $this->hash = $view->hash('sha1', $path, false); $this->path = self::DOCUMENTS_DIRNAME . '/' . $this->hash . '.odt'; if (!$this->view->file_exists($this->path)) { //copy new genesis to /user/documents/{hash}.odt // get decrypted content $content = $view->file_get_contents($path); $mimetype = $view->getMimeType($path); $data = Filter::read($content, $mimetype); $this->view->file_put_contents($this->path, $data['content']); } try { $this->validate($this->view, $this->path); } catch (\Exception $e) { throw new \Exception('Failed to copy genesis'); } }
public static function getByShareToken($token) { $linkItem = \OCP\Share::getShareByToken($token, false); if (is_array($linkItem) && isset($linkItem['uid_owner'])) { // seems to be a valid share $rootLinkItem = \OCP\Share::resolveReShare($linkItem); } else { throw new \Exception('This file was probably unshared'); } $file = new File($rootLinkItem['file_source'], $rootLinkItem, $token); if (isset($linkItem['share_with']) && !empty($linkItem['share_with'])) { $file->setPasswordProtected(true); } return $file; }
protected function validateSession($session) { try { if (is_null($this->shareToken)) { new File($session->getFileId()); } else { File::getByShareToken($this->shareToken); } } catch (\Exception $e) { $this->logger->warning('Error. Session no longer exists. ' . $e->getMessage(), ['app' => $this->appName]); $ex = new BadRequestException(); $ex->setBody(implode(',', $this->request->getParams())); throw $ex; } }
/** * Start a editing session or return an existing one * @param string $uid of the user starting a session * @param \OCA\Richdocuments\File $file - file object * @return array * @throws \Exception */ public static function start($uid, $file) { // Create a directory to store genesis $genesis = new \OCA\Richdocuments\Genesis($file); $oldSession = new Session(); $oldSession->loadBy('file_id', $file->getFileId()); //If there is no existing session we need to start a new one if (!$oldSession->hasData()) { $newSession = new Session(array($genesis->getPath(), $genesis->getHash(), $file->getOwner(), $file->getFileId())); if (!$newSession->insert()) { throw new \Exception('Failed to add session into database'); } } $sessionData = $oldSession->loadBy('file_id', $file->getFileId())->getData(); $memberColor = \OCA\Richdocuments\Helper::getMemberColor($uid); $member = new \OCA\Richdocuments\Db\Member([$sessionData['es_id'], $uid, $memberColor, time(), intval($file->isPublicShare()), $file->getToken()]); if (!$member->insert()) { throw new \Exception('Failed to add member into database'); } $sessionData['member_id'] = (string) $member->getLastInsertId(); // Do we have OC_Avatar in out disposal? if (\OC::$server->getConfig()->getSystemValue('enable_avatars', true) !== true) { $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } else { $imageUrl = $uid; } $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Richdocuments\Db\Member::getGuestPostfix() : \OC::$server->getUserSession()->getUser()->getDisplayName($uid); $userId = $file->isPublicShare() ? $displayName : \OC::$server->getUserSession()->getUser()->getUID(); $op = new \OCA\Richdocuments\Db\Op(); $op->addMember($sessionData['es_id'], $sessionData['member_id'], $displayName, $userId, $memberColor, $imageUrl); $sessionData['title'] = basename($file->getPath()); $sessionData['permissions'] = $file->getPermissions(); return $sessionData; }