From 857c03a10314a0df3dc4ee367dd3ce5a8a630474 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 16:57:42 +0300 Subject: [PATCH 01/17] Move File out of controller --- ajax/sessionController.php | 29 +++++++++++++++++------------ lib/db/session.php | 3 ++- lib/file.php | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/ajax/sessionController.php b/ajax/sessionController.php index b3db8bb8..285ac262 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -15,12 +15,15 @@ namespace OCA\Documents; class SessionController extends Controller{ public static function joinAsGuest($args){ - $uid = self::preDispatchGuest(); - $uid = substr(@$_POST['name'], 0, 16) .' '. $uid; - $token = @$args['token']; + $postfix = self::preDispatchGuest(); + + $uid = Helper::getArrayValueByKey($_POST, 'name'); + $guestUid = substr($uid, 0, 16) .' '. $postfix; + try { - $file = File::getByShareToken($token); - self::join($uid, $file); + $token = Helper::getArrayValueByKey($args, 'token'); + $fileId = File::getIdByShareToken($token); + self::join($guestUid, $fileId); } catch (\Exception $e){ Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); \OCP\JSON::error(); @@ -33,13 +36,15 @@ class SessionController extends Controller{ $fileId = intval(@$args['file_id']); try { - $file = new File($fileId); - - if ($file->getPermissions() & \OCP\PERMISSION_UPDATE) { - self::join($uid, $file); + $view = \OC\Files\Filesystem::getView(); + $path = $view->getPath($fileId); + + if ($view->isUpdatable($path)) { + self::join($uid, $fileId); } else { + $info = $view->getFileInfo(); \OCP\JSON::success(array( - 'permissions' => $file->getPermissions(), + 'permissions' => $info['permissions'], 'id' => $fileId )); } @@ -51,8 +56,8 @@ class SessionController extends Controller{ } } - protected static function join($uid, $file){ - $session = Db_Session::start($uid, $file); + protected static function join($uid, $fileId){ + $session = Db_Session::start($uid, $fileId); \OCP\JSON::success($session); exit(); } diff --git a/lib/db/session.php b/lib/db/session.php index f892859f..40c99f43 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -35,7 +35,8 @@ class Db_Session extends \OCA\Documents\Db { * @return array * @throws \Exception */ - public static function start($uid, File $file){ + public static function start($uid, $fileId){ + $file = new File($fileId); list($ownerView, $path) = $file->getOwnerViewAndPath(); // Create a directory to store genesis diff --git a/lib/file.php b/lib/file.php index 349b5223..0f132beb 100644 --- a/lib/file.php +++ b/lib/file.php @@ -47,6 +47,23 @@ class File { } } + public static function getIdByShareToken($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); + $fileOwner = $rootLinkItem['uid_owner']; + } else { + throw new \Exception('This file was probably unshared'); + } + + if (!isset($rootLinkItem['path']) && isset($rootLinkItem['file_target'])){ + $rootLinkItem['path'] = $rootLinkItem['file_target']; + } + + return $rootLinkItem['file_source']; + } + public static function getByShareToken($token){ $linkItem = \OCP\Share::getShareByToken($token, false); if (is_array($linkItem) && isset($linkItem['uid_owner'])) { From a341ca775ad1fde997ddef28b8519c1d03629458 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 16:59:18 +0300 Subject: [PATCH 02/17] OC6 as a least required version --- appinfo/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index e51570d8..9c191ca7 100755 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -5,7 +5,7 @@ An ownCloud app to work with office documents AGPL Frank Karlitschek - 5.0.19 + 6.0 true From 61576a83742469702efa2eece9824e679a3a8afb Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 17:14:53 +0300 Subject: [PATCH 03/17] Add db flag for guests --- appinfo/database.xml | 8 ++++++++ appinfo/update.php | 4 ++++ appinfo/version | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/appinfo/database.xml b/appinfo/database.xml index 864fb299..7a193802 100644 --- a/appinfo/database.xml +++ b/appinfo/database.xml @@ -91,6 +91,14 @@ true 4 + + is_guest + integer + 0 + true + true + 1 + status integer diff --git a/appinfo/update.php b/appinfo/update.php index 18ed6554..7a5274fb 100644 --- a/appinfo/update.php +++ b/appinfo/update.php @@ -28,4 +28,8 @@ if (version_compare($installedVersion, '0.7', '<=')) { )); } +} +if (version_compare($installedVersion, '0.8', '<')) { + $query = \OC_DB::prepare('UPDATE `*PREFIX*documents_member` SET `is_guest`=1 WHERE `uid` LIKE \'%(guest)\' '); + $query->execute(array()); } \ No newline at end of file diff --git a/appinfo/version b/appinfo/version index d5cc44d1..ce609caf 100755 --- a/appinfo/version +++ b/appinfo/version @@ -1 +1 @@ -0.7.2 \ No newline at end of file +0.8 \ No newline at end of file From 8f47b862782b13068b7067561183573378285b57 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 17:48:48 +0300 Subject: [PATCH 04/17] Add translatable guest postfix for guests --- ajax/sessionController.php | 15 ++++++--------- ajax/userController.php | 11 +++++++---- lib/config.php | 4 ++++ lib/db/member.php | 11 ++++++++--- lib/db/session.php | 12 ++++++++---- 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/ajax/sessionController.php b/ajax/sessionController.php index 285ac262..9acd3e6e 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -15,15 +15,16 @@ namespace OCA\Documents; class SessionController extends Controller{ public static function joinAsGuest($args){ - $postfix = self::preDispatchGuest(); + self::preDispatchGuest(); $uid = Helper::getArrayValueByKey($_POST, 'name'); - $guestUid = substr($uid, 0, 16) .' '. $postfix; + $guestUid = substr($uid, 0, 16); try { $token = Helper::getArrayValueByKey($args, 'token'); $fileId = File::getIdByShareToken($token); - self::join($guestUid, $fileId); + $session = Db_Session::start($uid, $fileId, true); + \OCP\JSON::success($session); } catch (\Exception $e){ Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); \OCP\JSON::error(); @@ -40,7 +41,8 @@ class SessionController extends Controller{ $path = $view->getPath($fileId); if ($view->isUpdatable($path)) { - self::join($uid, $fileId); + $session = Db_Session::start($uid, $fileId, false); + \OCP\JSON::success($session); } else { $info = $view->getFileInfo(); \OCP\JSON::success(array( @@ -56,11 +58,6 @@ class SessionController extends Controller{ } } - protected static function join($uid, $fileId){ - $session = Db_Session::start($uid, $fileId); - \OCP\JSON::success($session); - exit(); - } /** * Store the document content to its origin diff --git a/ajax/userController.php b/ajax/userController.php index 94111c9b..b1878358 100644 --- a/ajax/userController.php +++ b/ajax/userController.php @@ -45,12 +45,15 @@ class UserController extends Controller{ $member = new Db_Member(); $member->load($memberId); $memberData = $member->getData(); - if (count($memberData) && $memberData['status']==Db_Member::MEMBER_STATUS_ACTIVE - && preg_match('/.* \(guest\)$/', $memberData['uid']) + if (count($memberData) + && $memberData['status']==Db_Member::MEMBER_STATUS_ACTIVE + && $memberData['is_guest'] ){ - if (!preg_match('/.* \(guest\)$/', $name)){ - $name .= ' (guest)'; + $guestMark = Db_Member::getGuestPostfix(); + if (substr($name, -strlen($guestMark)) !== $guestMark){ + $name = $name . ' ' . $guestMark; } + $op = new Db_Op(); $op->changeNick($memberData['es_id'], $memberId, $name); } diff --git a/lib/config.php b/lib/config.php index d8b7be4b..52ee7825 100644 --- a/lib/config.php +++ b/lib/config.php @@ -15,6 +15,10 @@ namespace OCA\Documents; class Config { const APP_NAME = 'documents'; + public static function getL10n(){ + return \OCP\Util::getL10N(self::APP_NAME); + } + public static function getConverter(){ return self::getAppValue('converter', 'local'); } diff --git a/lib/db/member.php b/lib/db/member.php index 1fe827f1..7e544590 100644 --- a/lib/db/member.php +++ b/lib/db/member.php @@ -15,7 +15,7 @@ namespace OCA\Documents; class Db_Member extends Db{ const DB_TABLE = '`*PREFIX*documents_member`'; - + const ACTIVITY_THRESHOLD = 90; // 1.5 Minutes const MEMBER_STATUS_ACTIVE = 1; @@ -23,11 +23,16 @@ class Db_Member extends Db{ protected $tableName = '`*PREFIX*documents_member`'; - protected $insertStatement = 'INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`) - VALUES (?, ?, ?, ?)'; + protected $insertStatement = 'INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`, `is_guest`) + VALUES (?, ?, ?, ?, ?)'; protected $loadStatement = 'SELECT * FROM `*PREFIX*documents_member` WHERE `member_id`= ?'; + public static function getGuestPostfix(){ + return '(' . Config::getL10n()->t('guest') . ')'; + } + + public function updateActivity($memberId){ return $this->execute( 'UPDATE ' . $this->tableName . ' SET `last_activity`=?, `status`=? WHERE `member_id`=?', diff --git a/lib/db/session.php b/lib/db/session.php index 40c99f43..3fa77bf3 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -35,7 +35,7 @@ class Db_Session extends \OCA\Documents\Db { * @return array * @throws \Exception */ - public static function start($uid, $fileId){ + public static function start($uid, $fileId, $isGuest){ $file = new File($fileId); list($ownerView, $path) = $file->getOwnerViewAndPath(); @@ -72,7 +72,8 @@ class Db_Session extends \OCA\Documents\Db { $session['es_id'], $uid, $memberColor, - time() + time(), + intval($isGuest) )); if ($member->insert()){ @@ -101,14 +102,15 @@ class Db_Session extends \OCA\Documents\Db { */ } - + + $displayName = $isGuest ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); $session['member_id'] = (string) $member->getLastInsertId(); $op = new Db_Op(); $op->addMember( $session['es_id'], $session['member_id'], - \OCP\User::getDisplayName($uid), + $displayName, $memberColor, $imageUrl ); @@ -116,6 +118,8 @@ class Db_Session extends \OCA\Documents\Db { throw new \Exception('Failed to add member into database'); } + + $session['permissions'] = $ownerView->getFilePermissions($path); return $session; From 5b5eff37248ec423d41c29dc02428bd936950ed2 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 17:50:58 +0300 Subject: [PATCH 05/17] Check CSRF token on nick change --- ajax/userController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ajax/userController.php b/ajax/userController.php index b1878358..e03207f8 100644 --- a/ajax/userController.php +++ b/ajax/userController.php @@ -40,6 +40,8 @@ class UserController extends Controller{ } public static function rename($args){ + self::preDispatchGuest(); + $memberId = Helper::getArrayValueByKey($args, 'member_id'); $name = Helper::getArrayValueByKey($_POST, 'name'); $member = new Db_Member(); From dd8e3242fbd315d93ee8fed66c3b2118e69800fc Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 17:55:29 +0300 Subject: [PATCH 06/17] Do not imitate real user. No uid for guests --- ajax/controller.php | 1 - 1 file changed, 1 deletion(-) diff --git a/ajax/controller.php b/ajax/controller.php index 39d6663d..348e6999 100644 --- a/ajax/controller.php +++ b/ajax/controller.php @@ -37,7 +37,6 @@ class Controller { \OCP\JSON::callCheck(); } \OCP\JSON::checkAppEnabled('documents'); - return '(guest)'; } } From caf3678ce0f096f9180fedb8ae222fc0fbba6864 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 18:54:22 +0300 Subject: [PATCH 07/17] Unify translation --- ajax/admin.php | 4 +--- ajax/documentController.php | 14 +++++--------- appinfo/app.php | 4 +--- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/ajax/admin.php b/ajax/admin.php index 585d6834..086ffeed 100644 --- a/ajax/admin.php +++ b/ajax/admin.php @@ -5,8 +5,6 @@ namespace OCA\Documents; \OCP\JSON::callCheck(); \OCP\JSON::checkAdminUser(); -$l10n = \OCP\Util::getL10N('documents'); - $converter = isset($_POST['converter']) ? $_POST['converter'] : null; $url = isset($_POST['url']) ? $_POST['url'] : null; try { @@ -21,7 +19,7 @@ try { if (Config::getConverter()!='local'){ if (!Converter::checkConnection()){ Helper::warnLog('Bad response from Format Filter Server'); - \OCP\JSON::error(array('message' => $l10n->t('Format filter server is down or misconfigured') )); + \OCP\JSON::error(array('message' => Config::getL10n()->t('Format filter server is down or misconfigured') )); exit(); } } diff --git a/ajax/documentController.php b/ajax/documentController.php index cf007641..a790b61c 100644 --- a/ajax/documentController.php +++ b/ajax/documentController.php @@ -16,8 +16,6 @@ class DocumentController extends Controller{ const ODT_TEMPLATE = 'UEsDBBQAAAgAAC6aLENexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAALposQ9dwh9LYAgAA2AIAABgAAABUaHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAxgAAAQAIAgAAAGc/nhcAAAKfSURBVHic7dKxCQAwDMCwDvn/5fQJQ6FIF3jw7O6BzrwO4DeWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYheoVwb+sqPDzwAAAABJRU5ErkJgglBLAwQUAAgICAAumixDAAAAAAAAAAAAAAAACwAAAGNvbnRlbnQueG1s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bj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiB4bWxuczptYXRoPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiB4bWxuczpmb3JtPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiB4bWxuczpvb289Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIgeG1sbnM6Z3JkZGw9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48b2ZmaWNlOm1ldGE+PG1ldGE6aW5pdGlhbC1jcmVhdG9yPlZpY3RvciBEdWJpbml1azwvbWV0YTppbml0aWFsLWNyZWF0b3I+PG1ldGE6Y3JlYXRpb24tZGF0ZT4yMDEzLTA5LTEyVDIyOjE3OjAzPC9tZXRhOmNyZWF0aW9uLWRhdGU+PG1ldGE6ZG9jdW1lbnQtc3RhdGlzdGljIG1ldGE6dGFibGUtY291bnQ9IjAiIG1ldGE6aW1hZ2UtY291bnQ9IjAiIG1ldGE6b2JqZWN0LWNvdW50PSIwIiBtZXRhOnBhZ2UtY291bnQ9IjEiIG1ldGE6cGFyYWdyYXBoLWNvdW50PSIwIiBtZXRhOndvcmQtY291bnQ9IjAiIG1ldGE6Y2hhcmFjdGVyLWNvdW50PSIwIiBtZXRhOm5vbi13aGl0ZXNwYWNlLWNoYXJhY3Rlci1jb3VudD0iMCIvPjxtZXRhOmdlbmVyYXRvcj5MaWJyZU9mZmljZS8zLjYkTGludXhfWDg2XzY0IExpYnJlT2ZmaWNlX3Byb2pl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'; public static function create($args){ - $l10n = \OCP\Util::getL10N('documents'); - $uid = self::preDispatch(); $view = new \OC\Files\View('/' . $uid . '/files'); @@ -42,7 +40,7 @@ class DocumentController extends Controller{ \OCP\JSON::success(array ('fileid' => $info['fileid']) ); } else { \OCP\JSON::error( - array ('message' => $l10n->t('Can\'t create document')) + array ('message' => Config::getL10n()->t('Can\'t create document')) ); } } @@ -73,13 +71,11 @@ class DocumentController extends Controller{ public static function rename($args){ $uid = self::preDispatch(); - $fileId = intval(@$args['file_id']); - $name = @$_POST['name']; - + $fileId = intval(Helper::getArrayValueByKey($args, 'file_id', 0)); + $name = Helper::getArrayValueByKey($_POST, 'name'); + $view = \OC\Files\Filesystem::getView(); $path = $view->getPath($fileId); - - $l = new \OC_L10n('documents'); if (isset($name) && $view->is_file($path) && $view->isUpdatable($path)) { $newPath = dirname($path) . '/' . $name; @@ -89,7 +85,7 @@ class DocumentController extends Controller{ } } \OCP\JSON::error(array( - 'message' => $l->t('You don\'t have permission to rename this document') + 'message' => Config::getL10n()->t('You don\'t have permission to rename this document') )); } diff --git a/appinfo/app.php b/appinfo/app.php index 03a57a17..b9786995 100755 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -26,14 +26,12 @@ OCP\App::register(array('order' => 70, 'id' => 'documents', 'name' => 'Documents \OCP\App::registerAdmin('documents', 'admin'); OCP\App::registerPersonal('documents', 'personal'); -$l10n = \OCP\Util::getL10N('documents'); - OCP\App::addNavigationEntry(array( 'id' => 'documents_index', 'order' => 2, 'href' => OCP\Util::linkTo('documents', 'index.php'), 'icon' => OCP\Util::imagePath('documents', 'documents.svg'), - 'name' => $l10n->t('Documents')) + 'name' => OCA\Documents\Config::getL10n()->t('Documents')) ); OC::$CLASSPATH['OCA\Documents\Controller'] = 'documents/ajax/controller.php'; From 65ea9a891ab7df568e277761aa73898c5b884426 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Wed, 9 Apr 2014 19:04:33 +0300 Subject: [PATCH 08/17] Fix year in copyright --- appinfo/app.php | 2 +- index.php | 2 +- lib/storage.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/appinfo/app.php b/appinfo/app.php index b9786995..ae84f71b 100755 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -4,7 +4,7 @@ * ownCloud - Documents App * * @author Frank Karlitschek - * @copyright 2011 Frank Karlitschek karlitschek@kde.org + * @copyright 2013-2014 Frank Karlitschek karlitschek@kde.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE diff --git a/index.php b/index.php index 235192b3..5ad10608 100755 --- a/index.php +++ b/index.php @@ -4,7 +4,7 @@ * ownCloud - Documents App * * @author Frank Karlitschek - * @copyright 2011 Frank Karlitschek karlitschek@kde.org + * @copyright 2013-2014 Frank Karlitschek karlitschek@kde.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE diff --git a/lib/storage.php b/lib/storage.php index d8f0e3fc..141d8014 100644 --- a/lib/storage.php +++ b/lib/storage.php @@ -4,7 +4,7 @@ * ownCloud - Documents App * * @author Frank Karlitschek - * @copyright 2012 Frank Karlitschek frank@owncloud.org + * @copyright 2013-2014 Frank Karlitschek frank@owncloud.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE From 461c3ef999d67a6297c704988c356782fb85abd9 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 17:13:19 +0300 Subject: [PATCH 09/17] Cleanup Session class --- lib/db/session.php | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/lib/db/session.php b/lib/db/session.php index 3fa77bf3..37fb47eb 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -36,6 +36,7 @@ class Db_Session extends \OCA\Documents\Db { * @throws \Exception */ public static function start($uid, $fileId, $isGuest){ + $file = new File($fileId); list($ownerView, $path) = $file->getOwnerViewAndPath(); @@ -79,28 +80,9 @@ class Db_Session extends \OCA\Documents\Db { if ($member->insert()){ // Do we have OC_Avatar in out disposal? if (!class_exists('\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true){ - //$x['avatar_url'] = \OCP\Util::linkToRoute('documents_user_avatar'); $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } else { - // https://github.com/owncloud/documents/issues/51 - // Temporary stub $imageUrl = $uid; - - /* - $avatar = new \OC_Avatar($uid); - $image = $avatar->get(64); - // User has an avatar - if ($image instanceof \OC_Image) { - $imageUrl = \OC_Helper::linkToRoute( - 'core_avatar_get', - array( 'user' => $uid, 'size' => 64) - ) . '?requesttoken=' . \OC::$session->get('requesttoken'); - } else { - //shortcircuit if it's not an image - $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; - } - - */ } $displayName = $isGuest ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); @@ -201,14 +183,8 @@ class Db_Session extends \OCA\Documents\Db { 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()); + $id = \OC_Util::generateRandomBytes(30); + } while ($testSession->load($id)->hasData()); return $id; } From a3cc3b3ce3d597200fe51bae108ebf362278ef4a Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 19:53:56 +0300 Subject: [PATCH 10/17] Pass file instance to genesys --- lib/db/session.php | 11 +++-------- lib/genesis.php | 9 +++++---- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/db/session.php b/lib/db/session.php index 37fb47eb..aa9bdff9 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -38,12 +38,10 @@ class Db_Session extends \OCA\Documents\Db { public static function start($uid, $fileId, $isGuest){ $file = new File($fileId); - list($ownerView, $path) = $file->getOwnerViewAndPath(); - // Create a directory to store genesis + $genesis = new Genesis($file); - $genesis = new Genesis($ownerView, $path, $file->getOwner()); - + list($ownerView, $path) = $file->getOwnerViewAndPath(); $oldSession = new Db_Session(); $oldSession->loadBy('file_id', $file->getFileId()); @@ -65,10 +63,8 @@ class Db_Session extends \OCA\Documents\Db { ->loadBy('file_id', $file->getFileId()) ->getData() ; - $session['title'] = basename($path); $memberColor = Helper::getMemberColor($uid); - $member = new Db_Member(array( $session['es_id'], $uid, @@ -100,8 +96,7 @@ class Db_Session extends \OCA\Documents\Db { throw new \Exception('Failed to add member into database'); } - - + $session['title'] = basename($path); $session['permissions'] = $ownerView->getFilePermissions($path); return $session; diff --git a/lib/genesis.php b/lib/genesis.php index c038d699..02c047b5 100644 --- a/lib/genesis.php +++ b/lib/genesis.php @@ -35,11 +35,12 @@ class Genesis { /** * Create new genesis document - * @param OCA\Documents\View $view Filesystem view with root '/user/files' - * @param string $path relative path - * @param string $owner file owner + * @param OCA\Documents\File $file * */ - public function __construct(\OCA\Documents\View $view, $path, $owner){ + public function __construct(\OCA\Documents\File $file){ + $owner = $file->getOwner(); + list($ownerView, $path) = $file->getOwnerViewAndPath(); + $this->view = new View('/' . $owner); if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)){ From cd4f4d97f526d7df8d3a1af806d37eaa720145f5 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 20:14:45 +0300 Subject: [PATCH 11/17] Check token by member type, not by file --- ajax/sessionController.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/ajax/sessionController.php b/ajax/sessionController.php index 9acd3e6e..8cfcd219 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -70,6 +70,19 @@ class SessionController extends Controller{ } $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID']; + $currentMember = new Db_Member(); + $currentMemberData = $currentMember->load($memberId)->getData(); + if (isset($currentMemberData['is_guest']) && $currentMemberData['is_guest']){ + self::preDispatchGuest(); + } else { + self::preDispatch(); + } + + //check if member belongs to the session + if (!isset($currentMemberData['es_id']) || $esId!=$currentMemberData['es_id']){ + throw new \Exception($memberId . ' does not belong to session ' . $esId); + } + $sessionRevision = @$_SERVER['HTTP_WEBODF_SESSION_REVISION']; $stream = fopen('php://input','r'); @@ -87,11 +100,6 @@ class SessionController extends Controller{ $sessionData = $session->getData(); try { $file = new File($sessionData['file_id']); - if (!$file->isPublicShare()){ - self::preDispatch(); - } else { - self::preDispatchGuest(); - } list($view, $path) = $file->getOwnerViewAndPath(); } catch (\Exception $e){ //File was deleted or unshared. We need to save content as new file anyway @@ -111,11 +119,6 @@ class SessionController extends Controller{ }, $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; From 6dde8f11bdc345ae9ea7e2b2ffdb2124d9afb796 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 20:34:29 +0300 Subject: [PATCH 12/17] Fix warning in logs --- lib/filter/office.php | 4 ++-- lib/genesis.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/filter/office.php b/lib/filter/office.php index f04456af..6b375d7f 100644 --- a/lib/filter/office.php +++ b/lib/filter/office.php @@ -15,8 +15,8 @@ namespace OCA\Documents; class Filter_Office { const NATIVE_MIMETYPE = 'application/vnd.oasis.opendocument.text'; - private static $readSpec; - private static $writeSpec; + private $readSpec; + private $writeSpec; /* sample mimespec array ( diff --git a/lib/genesis.php b/lib/genesis.php index 02c047b5..7731387e 100644 --- a/lib/genesis.php +++ b/lib/genesis.php @@ -39,7 +39,7 @@ class Genesis { * */ public function __construct(\OCA\Documents\File $file){ $owner = $file->getOwner(); - list($ownerView, $path) = $file->getOwnerViewAndPath(); + list($view, $path) = $file->getOwnerViewAndPath(); $this->view = new View('/' . $owner); From 8a5f3ca076267e138939b5619eee420c06a1d5f4 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 20:36:25 +0300 Subject: [PATCH 13/17] Fix warning when guest starting a session --- public.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/public.php b/public.php index 52cbcffc..59ac1683 100644 --- a/public.php +++ b/public.php @@ -41,8 +41,13 @@ if (isset($_GET['t'])) { if ($file->getFileId()){ $session = new Db_Session(); $sessionData = $session->loadBy('file_id', $file->getFileId())->getData(); - $member = new Db_Member(); - $members = $member->getCollectionBy('es_id', $sessionData['es_id']); + + if (isset($sessionData['es_id'])){ + $member = new Db_Member(); + $members = $member->getCollectionBy('es_id', $sessionData['es_id']); + } else { + $members = 0; + } $tmpl->assign('total', count($members)+1); } else { $tmpl->assign('total', 1); From f81e41dc631b0d1f9d8fd3a5789934efa2b2dcc3 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Thu, 10 Apr 2014 21:23:26 +0300 Subject: [PATCH 14/17] Further switch to member is_guest property --- ajax/documentController.php | 8 +------- ajax/otpoll.php | 17 +++++++++------- ajax/sessionController.php | 17 ++++++++++------ lib/db/session.php | 8 +++----- lib/file.php | 39 ++++++++++--------------------------- 5 files changed, 35 insertions(+), 54 deletions(-) diff --git a/ajax/documentController.php b/ajax/documentController.php index a790b61c..42c657a9 100644 --- a/ajax/documentController.php +++ b/ajax/documentController.php @@ -51,16 +51,10 @@ class DocumentController extends Controller{ * @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(); - } else { - self::preDispatchGuest(); - } + self::preDispatchGuest(); $filename = isset($sessionData['genesis_url']) ? $sessionData['genesis_url'] : ''; $download = new Download($sessionData['owner'], $filename); diff --git a/ajax/otpoll.php b/ajax/otpoll.php index 6a83f824..7a2d2e44 100644 --- a/ajax/otpoll.php +++ b/ajax/otpoll.php @@ -33,6 +33,16 @@ try{ $session = new Db_Session(); $sessionData = $session->load($esId)->getData(); + + $memberId = $request->getParam('args/member_id'); + $member = new Db_Member(); + $memberData = $member->load($memberId)->getData(); + + if (isset($memberData['is_guest']) && $memberData['is_guest']){ + Controller::preDispatchGuest(false); + } else { + Controller::preDispatch(false); + } try { $file = new File(@$sessionData['file_id']); @@ -42,25 +52,18 @@ try{ $ex->setBody($request->getRawRequest()); throw $ex; } - if (!$file->isPublicShare()){ - Controller::preDispatch(false); - } else { - Controller::preDispatchGuest(false); - } $command = $request->getParam('command'); switch ($command){ case 'sync_ops': $seqHead = (string) $request->getParam('args/seq_head'); if (!is_null($seqHead)){ - $memberId = $request->getParam('args/member_id'); $ops = $request->getParam('args/client_ops'); $hasOps = is_array($ops) && count($ops)>0; $op = new Db_Op(); $currentHead = $op->getHeadSeq($esId); - $member = new Db_Member(); try { $member->updateActivity($memberId); } catch (\Exception $e){ diff --git a/ajax/sessionController.php b/ajax/sessionController.php index 8cfcd219..51502570 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -22,8 +22,8 @@ class SessionController extends Controller{ try { $token = Helper::getArrayValueByKey($args, 'token'); - $fileId = File::getIdByShareToken($token); - $session = Db_Session::start($uid, $fileId, true); + $file = File::getByShareToken($token); + $session = Db_Session::start($uid, $file, true); \OCP\JSON::success($session); } catch (\Exception $e){ Helper::warnLog('Starting a session failed. Reason: ' . $e->getMessage()); @@ -34,14 +34,15 @@ class SessionController extends Controller{ public static function joinAsUser($args){ $uid = self::preDispatch(); - $fileId = intval(@$args['file_id']); + $fileId = Helper::getArrayValueByKey($args, 'file_id'); try { $view = \OC\Files\Filesystem::getView(); $path = $view->getPath($fileId); if ($view->isUpdatable($path)) { - $session = Db_Session::start($uid, $fileId, false); + $file = new File($fileId); + $session = Db_Session::start($uid, $file); \OCP\JSON::success($session); } else { $info = $view->getFileInfo(); @@ -73,7 +74,8 @@ class SessionController extends Controller{ $currentMember = new Db_Member(); $currentMemberData = $currentMember->load($memberId)->getData(); if (isset($currentMemberData['is_guest']) && $currentMemberData['is_guest']){ - self::preDispatchGuest(); + $uid = self::preDispatchGuest(); + $isGuest = true; } else { self::preDispatch(); } @@ -100,11 +102,14 @@ class SessionController extends Controller{ $sessionData = $session->getData(); try { $file = new File($sessionData['file_id']); + if ($isGuest){ + $file->setToken('yes'); + } + list($view, $path) = $file->getOwnerViewAndPath(); } 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 :( - $uid = self::preDispatch(); $view = new \OC\Files\View('/' . $uid . '/files'); $dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', ''); diff --git a/lib/db/session.php b/lib/db/session.php index aa9bdff9..19f123da 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -35,9 +35,7 @@ class Db_Session extends \OCA\Documents\Db { * @return array * @throws \Exception */ - public static function start($uid, $fileId, $isGuest){ - - $file = new File($fileId); + public static function start($uid, $file){ // Create a directory to store genesis $genesis = new Genesis($file); @@ -70,7 +68,7 @@ class Db_Session extends \OCA\Documents\Db { $uid, $memberColor, time(), - intval($isGuest) + intval($file->isPublicShare()) )); if ($member->insert()){ @@ -81,7 +79,7 @@ class Db_Session extends \OCA\Documents\Db { $imageUrl = $uid; } - $displayName = $isGuest ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); + $displayName = $file->isPublicShare() ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); $session['member_id'] = (string) $member->getLastInsertId(); $op = new Db_Op(); diff --git a/lib/file.php b/lib/file.php index 0f132beb..c22b9533 100644 --- a/lib/file.php +++ b/lib/file.php @@ -28,6 +28,7 @@ class File { protected $owner; protected $path; protected $sharing; + protected $token =''; protected $passwordProtected = false; @@ -47,22 +48,6 @@ class File { } } - public static function getIdByShareToken($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); - $fileOwner = $rootLinkItem['uid_owner']; - } else { - throw new \Exception('This file was probably unshared'); - } - - if (!isset($rootLinkItem['path']) && isset($rootLinkItem['file_target'])){ - $rootLinkItem['path'] = $rootLinkItem['file_target']; - } - - return $rootLinkItem['file_source']; - } public static function getByShareToken($token){ $linkItem = \OCP\Share::getShareByToken($token, false); @@ -78,7 +63,7 @@ class File { $rootLinkItem['path'] = $rootLinkItem['file_target']; } $file = new File($rootLinkItem['file_source'], array($rootLinkItem)); - + $file->setToken($token); if (isset($rootLinkItem['uid_owner'])){ \OC_Util::tearDownFS(); @@ -106,16 +91,12 @@ class File { $this->path = $path; } + public function setToken($token){ + $this->token = $token; + } + public function isPublicShare(){ - foreach ($this->sharing as $share){ - if ( - $share['share_type'] == \OCP\Share::SHARE_TYPE_LINK - || $share['share_type'] == \OCP\Share::SHARE_TYPE_EMAIL - ){ - return true; - } - } - return false; + return !empty($this->token); } public function isPasswordProtected(){ @@ -217,11 +198,11 @@ class File { } else { $owner = false; } - \OC_Util::tearDownFS(); - \OC_Util::setupFS($owner); + $view = new View('/' . $owner . '/files'); + return array( $owner, - \OC\Files\Filesystem::getPath($rootLinkItem['file_source']) + $view->getPath($rootLinkItem['file_source']) ); } From 13b73b12c12a255a7fd4583a363eabe34907d98f Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Fri, 11 Apr 2014 00:59:51 +0300 Subject: [PATCH 15/17] Store share token to guest users --- ajax/sessionController.php | 9 +++-- appinfo/database.xml | 7 ++++ appinfo/version | 2 +- lib/db/member.php | 4 +-- lib/db/session.php | 3 +- lib/file.php | 67 +++++++++++++------------------------- lib/genesis.php | 2 +- 7 files changed, 39 insertions(+), 55 deletions(-) diff --git a/ajax/sessionController.php b/ajax/sessionController.php index 51502570..6405431d 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -101,9 +101,10 @@ class SessionController extends Controller{ } $sessionData = $session->getData(); try { - $file = new File($sessionData['file_id']); if ($isGuest){ - $file->setToken('yes'); + $file = File::getByShareToken($currentMemberData['token']); + } else { + $file = new File($sessionData['file_id']); } list($view, $path) = $file->getOwnerViewAndPath(); @@ -128,8 +129,7 @@ class SessionController extends Controller{ // Active users except current user $memberCount = count($memberIds) - 1; - if ($view->file_exists($path)){ - + if ($view->file_exists($path)){ $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $currentHash = sha1($view->file_get_contents($path)); @@ -152,7 +152,6 @@ class SessionController extends Controller{ 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 diff --git a/appinfo/database.xml b/appinfo/database.xml index 7a193802..e11d3913 100644 --- a/appinfo/database.xml +++ b/appinfo/database.xml @@ -99,6 +99,13 @@ true 1 + + token + text + + false + 32 + status integer diff --git a/appinfo/version b/appinfo/version index ce609caf..c18d72be 100755 --- a/appinfo/version +++ b/appinfo/version @@ -1 +1 @@ -0.8 \ No newline at end of file +0.8.1 \ No newline at end of file diff --git a/lib/db/member.php b/lib/db/member.php index 7e544590..73b13c22 100644 --- a/lib/db/member.php +++ b/lib/db/member.php @@ -23,8 +23,8 @@ class Db_Member extends Db{ protected $tableName = '`*PREFIX*documents_member`'; - protected $insertStatement = 'INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`, `is_guest`) - VALUES (?, ?, ?, ?, ?)'; + protected $insertStatement = 'INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`, `is_guest`, `token`) + VALUES (?, ?, ?, ?, ?, ?)'; protected $loadStatement = 'SELECT * FROM `*PREFIX*documents_member` WHERE `member_id`= ?'; diff --git a/lib/db/session.php b/lib/db/session.php index 19f123da..1cd726f3 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -68,7 +68,8 @@ class Db_Session extends \OCA\Documents\Db { $uid, $memberColor, time(), - intval($file->isPublicShare()) + intval($file->isPublicShare()), + $file->getToken() )); if ($member->insert()){ diff --git a/lib/file.php b/lib/file.php index c22b9533..1dad0133 100644 --- a/lib/file.php +++ b/lib/file.php @@ -54,23 +54,12 @@ class File { if (is_array($linkItem) && isset($linkItem['uid_owner'])) { // seems to be a valid share $rootLinkItem = \OCP\Share::resolveReShare($linkItem); - $fileOwner = $rootLinkItem['uid_owner']; } else { throw new \Exception('This file was probably unshared'); } - if (!isset($rootLinkItem['path']) && isset($rootLinkItem['file_target'])){ - $rootLinkItem['path'] = $rootLinkItem['file_target']; - } $file = new File($rootLinkItem['file_source'], array($rootLinkItem)); $file->setToken($token); - - if (isset($rootLinkItem['uid_owner'])){ - \OC_Util::tearDownFS(); - \OC_Util::setupFS($rootLinkItem['uid_owner']); - $file->setOwner($rootLinkItem['uid_owner']); - $file->setPath(\OC\Files\Filesystem::getPath($linkItem['file_source'])); - } if (isset($linkItem['share_with']) && !empty($linkItem['share_with'])){ $file->setPasswordProtected(true); @@ -79,6 +68,10 @@ class File { return $file; } + public function getToken($token){ + return $this->token; + } + public function getFileId(){ return $this->fileId; } @@ -156,28 +149,34 @@ class File { * @throws \Exception */ public function getOwnerViewAndPath(){ - if (!$this->owner || !$this->path){ - if ($this->isPublicShare()){ - list($owner, $path) = $this->getSharedFileOwnerAndPath(); + if ($this->isPublicShare()){ + $rootLinkItem = \OCP\Share::resolveReShare($this->sharing[0]); + if (isset($rootLinkItem['uid_owner'])){ + $owner = $rootLinkItem['uid_owner']; } else { - $owner = \OCP\User::getUser(); - $path = Storage::resolvePath($this->fileId); - if (!$path){ - throw new \Exception($this->fileId . ' can not be resolved'); - } + throw new \Exception($this->fileId . ' is a broken share'); } - - $this->path = $path; - $this->owner = $owner; + $view = new View('/' . $owner . '/files'); + $path = $rootLinkItem['file_target']; + } else { + $owner = \OCP\User::getUser(); + $view = new View('/' . $this->owner); + $path = $view->getPath($this->fileId); } + + if (!$path){ + throw new \Exception($this->fileId . ' can not be resolved'); + } + $this->path = $path; + $this->owner = $owner; - $view = new View('/' . $this->owner . '/files'); if (!$view->file_exists($this->path)){ throw new \Exception($this->path . ' doesn\'t exist'); } return array($view, $this->path); } + public function getOwner(){ if (!$this->owner){ @@ -186,28 +185,6 @@ class File { return $this->owner; } - /** - * public links only - * @return array - */ - protected function getSharedFileOwnerAndPath(){ - foreach ($this->sharing as $share){ - $rootLinkItem = \OCP\Share::resolveReShare($share); - if (isset($rootLinkItem['uid_owner'])){ - $owner = $rootLinkItem['uid_owner']; - } else { - $owner = false; - } - $view = new View('/' . $owner . '/files'); - - return array( - $owner, - $view->getPath($rootLinkItem['file_source']) - ); - } - - return $result; - } protected function getPassword(){ return $this->sharing[0]['share_with']; diff --git a/lib/genesis.php b/lib/genesis.php index 7731387e..c00c197b 100644 --- a/lib/genesis.php +++ b/lib/genesis.php @@ -38,8 +38,8 @@ class Genesis { * @param OCA\Documents\File $file * */ public function __construct(\OCA\Documents\File $file){ - $owner = $file->getOwner(); list($view, $path) = $file->getOwnerViewAndPath(); + $owner = $file->getOwner(); $this->view = new View('/' . $owner); From 8f3bc0daa824ef5c4ac9d7772da495a0a8740010 Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Fri, 11 Apr 2014 23:12:23 +0300 Subject: [PATCH 16/17] Reduce complexicity --- ajax/documentController.php | 6 +++--- ajax/otpoll.php | 8 ++++---- ajax/sessionController.php | 19 +++++++++---------- ajax/userController.php | 13 ++++++------- lib/db.php | 11 +++++++++++ lib/db/session.php | 16 ++++++++-------- lib/storage.php | 13 +++++-------- public.php | 6 +++--- 8 files changed, 49 insertions(+), 43 deletions(-) diff --git a/ajax/documentController.php b/ajax/documentController.php index 42c657a9..f71addcc 100644 --- a/ajax/documentController.php +++ b/ajax/documentController.php @@ -52,12 +52,12 @@ class DocumentController extends Controller{ */ public static function serve($args){ $session = new Db_Session(); - $sessionData = $session->load(@$args['es_id'])->getData(); + $session->load(@$args['es_id']); self::preDispatchGuest(); - $filename = isset($sessionData['genesis_url']) ? $sessionData['genesis_url'] : ''; - $download = new Download($sessionData['owner'], $filename); + $filename = $session->getGenesisUrl() ? $session->getGenesisUrl() : ''; + $download = new Download($session->getOwner(), $filename); $download->sendResponse(); } diff --git a/ajax/otpoll.php b/ajax/otpoll.php index 7a2d2e44..bb3e30e6 100644 --- a/ajax/otpoll.php +++ b/ajax/otpoll.php @@ -32,20 +32,20 @@ try{ $esId = $request->getParam('args/es_id'); $session = new Db_Session(); - $sessionData = $session->load($esId)->getData(); + $session->load($esId); $memberId = $request->getParam('args/member_id'); $member = new Db_Member(); - $memberData = $member->load($memberId)->getData(); + $member->load($memberId); - if (isset($memberData['is_guest']) && $memberData['is_guest']){ + if ($member->getIsGuest() || is_null($member->getIsGuest())){ Controller::preDispatchGuest(false); } else { Controller::preDispatch(false); } try { - $file = new File(@$sessionData['file_id']); + $file = new File($session->getFileId()); } catch (\Exception $e){ Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage()); $ex = new BadRequestException(); diff --git a/ajax/sessionController.php b/ajax/sessionController.php index 6405431d..6750116c 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -72,16 +72,15 @@ class SessionController extends Controller{ $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID']; $currentMember = new Db_Member(); - $currentMemberData = $currentMember->load($memberId)->getData(); - if (isset($currentMemberData['is_guest']) && $currentMemberData['is_guest']){ + $currentMember->load($memberId); + if (is_null($currentMember->getIsGuest()) || $currentMember->getIsGuest()){ $uid = self::preDispatchGuest(); - $isGuest = true; } else { self::preDispatch(); } //check if member belongs to the session - if (!isset($currentMemberData['es_id']) || $esId!=$currentMemberData['es_id']){ + if ($esId != $currentMember->getEsId()){ throw new \Exception($memberId . ' does not belong to session ' . $esId); } @@ -96,15 +95,15 @@ class SessionController extends Controller{ $session = new Db_Session(); $session->load($esId); - if (!$session->hasData()){ + if (!$session->getEsId()){ throw new \Exception('Session does not exist'); } - $sessionData = $session->getData(); + try { - if ($isGuest){ - $file = File::getByShareToken($currentMemberData['token']); + if ($currentMember->getIsGuest()){ + $file = File::getByShareToken($currentMember->getToken()); } else { - $file = new File($sessionData['file_id']); + $file = new File($session->getFileId()); } list($view, $path) = $file->getOwnerViewAndPath(); @@ -135,7 +134,7 @@ class SessionController extends Controller{ $currentHash = sha1($view->file_get_contents($path)); \OC_FileProxy::$enabled = $proxyStatus; - if (!Helper::isVersionsEnabled() && $currentHash !== $sessionData['genesis_hash']){ + if (!Helper::isVersionsEnabled() && $currentHash !== $session->getGenesisHash()){ // Original file was modified externally. Save to a new one $path = Helper::getNewFileName($view, $path, '-conflict'); } diff --git a/ajax/userController.php b/ajax/userController.php index e03207f8..e47d2a31 100644 --- a/ajax/userController.php +++ b/ajax/userController.php @@ -29,8 +29,7 @@ class UserController extends Controller{ $member = new Db_Member(); $member->loadBy('member_id', $args['member_id']); if ($esId && $member->hasData()){ - $memberData = $member->getData(); - if ($memberData['es_id']===$esId && $memberData['status']==Db_Member::MEMBER_STATUS_ACTIVE){ + if ($member->getEsId() === $esId && $member->getStatus() == Db_Member::MEMBER_STATUS_ACTIVE){ $member->deactivate(array($args['member_id'])); $op = new Db_Op(); $op->removeMember($esId, $args['member_id']); @@ -46,10 +45,10 @@ class UserController extends Controller{ $name = Helper::getArrayValueByKey($_POST, 'name'); $member = new Db_Member(); $member->load($memberId); - $memberData = $member->getData(); - if (count($memberData) - && $memberData['status']==Db_Member::MEMBER_STATUS_ACTIVE - && $memberData['is_guest'] + + if ($member->getEsId() + && $member->getStatus() == Db_Member::MEMBER_STATUS_ACTIVE + && $member->getIsGuest() ){ $guestMark = Db_Member::getGuestPostfix(); if (substr($name, -strlen($guestMark)) !== $guestMark){ @@ -57,7 +56,7 @@ class UserController extends Controller{ } $op = new Db_Op(); - $op->changeNick($memberData['es_id'], $memberId, $name); + $op->changeNick($member->getEsId(), $memberId, $name); } \OCP\JSON::success(); } diff --git a/lib/db.php b/lib/db.php index c1a799c4..ec7141ef 100644 --- a/lib/db.php +++ b/lib/db.php @@ -206,4 +206,15 @@ abstract class Db { return $result; } + + protected function __call($name, $arguments){ + if (substr($name, 0, 3) === 'get'){ + $requestedProperty = substr($name, 3); + $property = strtolower(preg_replace('/(.)([A-Z])/', "$1_$2", $requestedProperty)); + if (isset($this->data[$property])){ + return $this->data[$property]; + } + } + return null; + } } diff --git a/lib/db/session.php b/lib/db/session.php index 1cd726f3..0c4b40d6 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -57,14 +57,14 @@ class Db_Session extends \OCA\Documents\Db { } } - $session = $oldSession + $sessionData = $oldSession ->loadBy('file_id', $file->getFileId()) ->getData() ; $memberColor = Helper::getMemberColor($uid); $member = new Db_Member(array( - $session['es_id'], + $sessionData['es_id'], $uid, $memberColor, time(), @@ -82,11 +82,11 @@ class Db_Session extends \OCA\Documents\Db { $displayName = $file->isPublicShare() ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); - $session['member_id'] = (string) $member->getLastInsertId(); + $sessionData['member_id'] = (string) $member->getLastInsertId(); $op = new Db_Op(); $op->addMember( - $session['es_id'], - $session['member_id'], + $sessionData['es_id'], + $sessionData['member_id'], $displayName, $memberColor, $imageUrl @@ -95,10 +95,10 @@ class Db_Session extends \OCA\Documents\Db { throw new \Exception('Failed to add member into database'); } - $session['title'] = basename($path); - $session['permissions'] = $ownerView->getFilePermissions($path); + $sessionData['title'] = basename($path); + $sessionData['permissions'] = $ownerView->getFilePermissions($path); - return $session; + return $sessionData; } public static function cleanUp($esId){ diff --git a/lib/storage.php b/lib/storage.php index 141d8014..3efd58c9 100644 --- a/lib/storage.php +++ b/lib/storage.php @@ -71,25 +71,22 @@ class Storage { return; } - $sessionObj = new Db_Session(); - $session = $sessionObj - ->loadBy('file_id', $fileId) - ->getData() - ; + $session = new Db_Session(); + $session->loadBy('file_id', $fileId); - if (!is_array($session) || !isset($session['es_id'])){ + if (!$session->getEsId()){ return; } $member = new Db_Member(); - $sessionMembers = $member->getCollectionBy('es_id', $session['es_id']); + $sessionMembers = $member->getCollectionBy('es_id', $session->getEsId()); foreach ($sessionMembers as $memberData){ if (intval($memberData['status'])===Db_Member::MEMBER_STATUS_ACTIVE){ return; } } - Db_Session::cleanUp($session['es_id']); + Db_Session::cleanUp($session->getEsId()); } protected static function searchDocuments(){ diff --git a/public.php b/public.php index 59ac1683..22938b9e 100644 --- a/public.php +++ b/public.php @@ -40,11 +40,11 @@ if (isset($_GET['t'])) { \OCP\Util::addScript('documents', 'documents'); if ($file->getFileId()){ $session = new Db_Session(); - $sessionData = $session->loadBy('file_id', $file->getFileId())->getData(); + $session->loadBy('file_id', $file->getFileId()); - if (isset($sessionData['es_id'])){ + if ($session->getEsId()){ $member = new Db_Member(); - $members = $member->getCollectionBy('es_id', $sessionData['es_id']); + $members = $member->getCollectionBy('es_id', $session->getEsId()); } else { $members = 0; } From d8cee62f7696f3f6b56cbeac8b06ba4e55892a9b Mon Sep 17 00:00:00 2001 From: Victor Dubiniuk Date: Mon, 14 Apr 2014 18:05:18 +0300 Subject: [PATCH 17/17] Reflect recent master changes --- ajax/documentController.php | 13 ++++++++----- js/documents.js | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ajax/documentController.php b/ajax/documentController.php index f71addcc..b5eb322c 100644 --- a/ajax/documentController.php +++ b/ajax/documentController.php @@ -90,13 +90,16 @@ class DocumentController extends Controller{ public static function listAll(){ self::preDispatch(); - $documents = Storage::getDocuments(); + $found = Storage::getDocuments(); $fileIds = array(); - - //$previewAvailable = \OCP\Preview::show($file); - foreach ($documents as $key=>$document) { - //\OCP\Preview::show($document['path']); + $documents = array(); + foreach ($found as $key=>$document) { + if (is_object($document)){ + $documents[] = $document->getData(); + } else { + $documents[$key] = $document; + } $documents[$key]['icon'] = preg_replace('/\.png$/', '.svg', \OC_Helper::mimetypeIcon($document['mimetype'])); $fileIds[] = $document['fileid']; } diff --git a/js/documents.js b/js/documents.js index 66619f89..19065839 100644 --- a/js/documents.js +++ b/js/documents.js @@ -714,9 +714,9 @@ var Files = Files || { if ( $('#isPublic').length ) { urlSpec.t = $('#dirToken').val(); - previewURL = OC.Router.generate('core_ajax_public_preview', urlSpec); + previewURL = OC.generateUrl('core_ajax_public_preview/{url_spec}', {url_spec : urlSpec}); } else { - previewURL = OC.Router.generate('core_ajax_preview', urlSpec); + previewURL = OC.generateUrl('core_ajax_preview/{url_spec}', {url_spec : urlSpec}); } previewURL = previewURL.replace('(', '%28'); previewURL = previewURL.replace(')', '%29');