PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/apps/files_encryption/tests/share.php

https://github.com/sezuan/core
PHP | 920 lines | 465 code | 210 blank | 245 comment | 6 complexity | 79a97a3d36c5b6ed8646a1e3a350d1b0 MD5 | raw file
Possible License(s): AGPL-3.0, AGPL-1.0, MPL-2.0-no-copyleft-exception
  1. <?php
  2. /**
  3. * ownCloud
  4. *
  5. * @author Florin Peter
  6. * @copyright 2013 Florin Peter <owncloud@florin-peter.de>
  7. *
  8. * This library is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  10. * License as published by the Free Software Foundation; either
  11. * version 3 of the License, or any later version.
  12. *
  13. * This library is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public
  19. * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  20. *
  21. */
  22. require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php');
  23. require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
  24. require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
  25. require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
  26. require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
  27. require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
  28. require_once realpath(dirname(__FILE__) . '/../lib/util.php');
  29. require_once realpath(dirname(__FILE__) . '/../lib/helper.php');
  30. require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
  31. require_once realpath(dirname(__FILE__) . '/util.php');
  32. use OCA\Encryption;
  33. /**
  34. * Class Test_Encryption_Share
  35. */
  36. class Test_Encryption_Share extends \PHPUnit_Framework_TestCase {
  37. const TEST_ENCRYPTION_SHARE_USER1 = "test-share-user1";
  38. const TEST_ENCRYPTION_SHARE_USER2 = "test-share-user2";
  39. const TEST_ENCRYPTION_SHARE_USER3 = "test-share-user3";
  40. const TEST_ENCRYPTION_SHARE_USER4 = "test-share-user4";
  41. const TEST_ENCRYPTION_SHARE_GROUP1 = "test-share-group1";
  42. public $stateFilesTrashbin;
  43. public $filename;
  44. public $dataShort;
  45. /**
  46. * @var OC_FilesystemView
  47. */
  48. public $view;
  49. public $folder1;
  50. public $subfolder;
  51. public $subsubfolder;
  52. public static function setUpBeforeClass() {
  53. // reset backend
  54. \OC_User::clearBackends();
  55. \OC_User::useBackend('database');
  56. // enable resharing
  57. \OC_Appconfig::setValue('core', 'shareapi_allow_resharing', 'yes');
  58. // clear share hooks
  59. \OC_Hook::clear('OCP\\Share');
  60. \OC::registerShareHooks();
  61. \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
  62. // Sharing related hooks
  63. \OCA\Encryption\Helper::registerShareHooks();
  64. // Filesystem related hooks
  65. \OCA\Encryption\Helper::registerFilesystemHooks();
  66. // clear and register hooks
  67. \OC_FileProxy::clearProxies();
  68. \OC_FileProxy::register(new OCA\Encryption\Proxy());
  69. // create users
  70. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true);
  71. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, true);
  72. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, true);
  73. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, true);
  74. // create group and assign users
  75. \OC_Group::createGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  76. \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  77. \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  78. }
  79. function setUp() {
  80. $this->dataShort = 'hats';
  81. $this->view = new \OC_FilesystemView('/');
  82. $this->folder1 = '/folder1';
  83. $this->subfolder = '/subfolder1';
  84. $this->subsubfolder = '/subsubfolder1';
  85. $this->filename = 'share-tmp.test';
  86. // we don't want to tests with app files_trashbin enabled
  87. \OC_App::disable('files_trashbin');
  88. // remember files_trashbin state
  89. $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
  90. }
  91. function tearDown() {
  92. // reset app files_trashbin
  93. if ($this->stateFilesTrashbin) {
  94. OC_App::enable('files_trashbin');
  95. } else {
  96. OC_App::disable('files_trashbin');
  97. }
  98. }
  99. public static function tearDownAfterClass() {
  100. // clean group
  101. \OC_Group::deleteGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  102. // cleanup users
  103. \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  104. \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  105. \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  106. \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
  107. }
  108. /**
  109. * @medium
  110. * @param bool $withTeardown
  111. */
  112. function testShareFile($withTeardown = true) {
  113. // login as admin
  114. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  115. // save file with content
  116. $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  117. // test that data was successfully written
  118. $this->assertTrue(is_int($cryptedFile));
  119. // disable encryption proxy to prevent recursive calls
  120. $proxyStatus = \OC_FileProxy::$enabled;
  121. \OC_FileProxy::$enabled = false;
  122. // get the file info from previous created file
  123. $fileInfo = $this->view->getFileInfo(
  124. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  125. // check if we have a valid file info
  126. $this->assertTrue(is_array($fileInfo));
  127. // check if the unencrypted file size is stored
  128. $this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
  129. // re-enable the file proxy
  130. \OC_FileProxy::$enabled = $proxyStatus;
  131. // share the file
  132. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
  133. // login as admin
  134. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  135. // check if share key for user1 exists
  136. $this->assertTrue($this->view->file_exists(
  137. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  138. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  139. // login as user1
  140. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  141. // get file contents
  142. $retrievedCryptedFile = $this->view->file_get_contents(
  143. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared/' . $this->filename);
  144. // check if data is the same as we previously written
  145. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  146. // cleanup
  147. if ($withTeardown) {
  148. // login as admin
  149. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  150. // unshare the file
  151. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  152. // check if share key not exists
  153. $this->assertFalse($this->view->file_exists(
  154. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  155. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  156. // cleanup
  157. $this->view->unlink(
  158. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  159. // check if share key not exists
  160. $this->assertFalse($this->view->file_exists(
  161. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  162. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  163. }
  164. }
  165. /**
  166. * @medium
  167. * @param bool $withTeardown
  168. */
  169. function testReShareFile($withTeardown = true) {
  170. $this->testShareFile(false);
  171. // login as user1
  172. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  173. // get the file info
  174. $fileInfo = $this->view->getFileInfo(
  175. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared/' . $this->filename);
  176. // share the file with user2
  177. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
  178. // login as admin
  179. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  180. // check if share key for user2 exists
  181. $this->assertTrue($this->view->file_exists(
  182. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  183. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  184. // login as user2
  185. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  186. // get file contents
  187. $retrievedCryptedFile = $this->view->file_get_contents(
  188. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared/' . $this->filename);
  189. // check if data is the same as previously written
  190. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  191. // cleanup
  192. if ($withTeardown) {
  193. // login as user1
  194. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  195. // unshare the file with user2
  196. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  197. // login as admin
  198. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  199. // check if share key not exists
  200. $this->assertFalse($this->view->file_exists(
  201. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  202. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  203. // unshare the file with user1
  204. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  205. // check if share key not exists
  206. $this->assertFalse($this->view->file_exists(
  207. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  208. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  209. // cleanup
  210. $this->view->unlink(
  211. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  212. // check if share key not exists
  213. $this->assertFalse($this->view->file_exists(
  214. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  215. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  216. }
  217. }
  218. /**
  219. * @medium
  220. * @param bool $withTeardown
  221. * @return array
  222. */
  223. function testShareFolder($withTeardown = true) {
  224. // login as admin
  225. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  226. // create folder structure
  227. $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
  228. $this->view->mkdir(
  229. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
  230. $this->view->mkdir(
  231. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
  232. . $this->subsubfolder);
  233. // save file with content
  234. $cryptedFile = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  235. . $this->filename, $this->dataShort);
  236. // test that data was successfully written
  237. $this->assertTrue(is_int($cryptedFile));
  238. // disable encryption proxy to prevent recursive calls
  239. $proxyStatus = \OC_FileProxy::$enabled;
  240. \OC_FileProxy::$enabled = false;
  241. // get the file info from previous created folder
  242. $fileInfo = $this->view->getFileInfo(
  243. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
  244. // check if we have a valid file info
  245. $this->assertTrue(is_array($fileInfo));
  246. // re-enable the file proxy
  247. \OC_FileProxy::$enabled = $proxyStatus;
  248. // share the folder with user1
  249. \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
  250. // login as admin
  251. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  252. // check if share key for user1 exists
  253. $this->assertTrue($this->view->file_exists(
  254. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
  255. . $this->subfolder . $this->subsubfolder . '/'
  256. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  257. // login as user1
  258. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  259. // get file contents
  260. $retrievedCryptedFile = $this->view->file_get_contents(
  261. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared' . $this->folder1
  262. . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
  263. // check if data is the same
  264. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  265. // cleanup
  266. if ($withTeardown) {
  267. // login as admin
  268. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  269. // unshare the folder with user1
  270. \OCP\Share::unshare('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  271. // check if share key not exists
  272. $this->assertFalse($this->view->file_exists(
  273. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  274. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  275. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  276. // cleanup
  277. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
  278. // check if share key not exists
  279. $this->assertFalse($this->view->file_exists(
  280. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  281. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  282. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  283. }
  284. return $fileInfo;
  285. }
  286. /**
  287. * @medium
  288. * @param bool $withTeardown
  289. */
  290. function testReShareFolder($withTeardown = true) {
  291. $fileInfoFolder1 = $this->testShareFolder(false);
  292. // login as user1
  293. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  294. // disable encryption proxy to prevent recursive calls
  295. $proxyStatus = \OC_FileProxy::$enabled;
  296. \OC_FileProxy::$enabled = false;
  297. // get the file info from previous created folder
  298. $fileInfoSubFolder = $this->view->getFileInfo(
  299. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared' . $this->folder1
  300. . $this->subfolder);
  301. // check if we have a valid file info
  302. $this->assertTrue(is_array($fileInfoSubFolder));
  303. // re-enable the file proxy
  304. \OC_FileProxy::$enabled = $proxyStatus;
  305. // share the file with user2
  306. \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL);
  307. // login as admin
  308. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  309. // check if share key for user2 exists
  310. $this->assertTrue($this->view->file_exists(
  311. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
  312. . $this->subfolder . $this->subsubfolder . '/'
  313. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  314. // login as user2
  315. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  316. // get file contents
  317. $retrievedCryptedFile = $this->view->file_get_contents(
  318. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared' . $this->subfolder
  319. . $this->subsubfolder . '/' . $this->filename);
  320. // check if data is the same
  321. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  322. // get the file info
  323. $fileInfo = $this->view->getFileInfo(
  324. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared' . $this->subfolder
  325. . $this->subsubfolder . '/' . $this->filename);
  326. // check if we have fileInfos
  327. $this->assertTrue(is_array($fileInfo));
  328. // share the file with user3
  329. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, OCP\PERMISSION_ALL);
  330. // login as admin
  331. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  332. // check if share key for user3 exists
  333. $this->assertTrue($this->view->file_exists(
  334. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1
  335. . $this->subfolder . $this->subsubfolder . '/'
  336. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
  337. // login as user3
  338. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
  339. // get file contents
  340. $retrievedCryptedFile = $this->view->file_get_contents(
  341. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '/files/Shared/' . $this->filename);
  342. // check if data is the same
  343. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  344. // cleanup
  345. if ($withTeardown) {
  346. // login as user2
  347. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  348. // unshare the file with user3
  349. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4);
  350. // check if share key not exists
  351. $this->assertFalse($this->view->file_exists(
  352. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  353. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  354. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
  355. // login as user1
  356. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  357. // unshare the folder with user2
  358. \OCP\Share::unshare('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  359. // check if share key not exists
  360. $this->assertFalse($this->view->file_exists(
  361. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  362. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  363. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  364. // login as admin
  365. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  366. // unshare the folder1 with user1
  367. \OCP\Share::unshare('folder', $fileInfoFolder1['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  368. // check if share key not exists
  369. $this->assertFalse($this->view->file_exists(
  370. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  371. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  372. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  373. // cleanup
  374. $this->view->unlink(
  375. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
  376. . $this->subsubfolder . '/' . $this->filename);
  377. // check if share key not exists
  378. $this->assertFalse($this->view->file_exists(
  379. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys'
  380. . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  381. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  382. }
  383. }
  384. function testPublicShareFile() {
  385. // login as admin
  386. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  387. // save file with content
  388. $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  389. // test that data was successfully written
  390. $this->assertTrue(is_int($cryptedFile));
  391. // disable encryption proxy to prevent recursive calls
  392. $proxyStatus = \OC_FileProxy::$enabled;
  393. \OC_FileProxy::$enabled = false;
  394. // get the file info from previous created file
  395. $fileInfo = $this->view->getFileInfo(
  396. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  397. // check if we have a valid file info
  398. $this->assertTrue(is_array($fileInfo));
  399. // check if the unencrypted file size is stored
  400. $this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
  401. // re-enable the file proxy
  402. \OC_FileProxy::$enabled = $proxyStatus;
  403. // share the file
  404. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, OCP\PERMISSION_ALL);
  405. // login as admin
  406. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  407. $publicShareKeyId = \OC_Appconfig::getValue('files_encryption', 'publicShareKeyId');
  408. // check if share key for public exists
  409. $this->assertTrue($this->view->file_exists(
  410. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  411. . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
  412. // some hacking to simulate public link
  413. $GLOBALS['app'] = 'files_sharing';
  414. $GLOBALS['fileOwner'] = \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1;
  415. \OC_User::setUserId(false);
  416. // get file contents
  417. $retrievedCryptedFile = file_get_contents('crypt://' . $this->filename);
  418. // check if data is the same as we previously written
  419. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  420. // tear down
  421. // login as admin
  422. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  423. // unshare the file
  424. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null);
  425. // check if share key not exists
  426. $this->assertFalse($this->view->file_exists(
  427. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  428. . $this->filename . '.' . $publicShareKeyId . '.shareKey'));
  429. // cleanup
  430. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  431. // check if share key not exists
  432. $this->assertFalse($this->view->file_exists(
  433. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  434. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  435. }
  436. /**
  437. * @medium
  438. */
  439. function testShareFileWithGroup() {
  440. // login as admin
  441. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  442. // save file with content
  443. $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  444. // test that data was successfully written
  445. $this->assertTrue(is_int($cryptedFile));
  446. // disable encryption proxy to prevent recursive calls
  447. $proxyStatus = \OC_FileProxy::$enabled;
  448. \OC_FileProxy::$enabled = false;
  449. // get the file info from previous created file
  450. $fileInfo = $this->view->getFileInfo(
  451. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  452. // check if we have a valid file info
  453. $this->assertTrue(is_array($fileInfo));
  454. // check if the unencrypted file size is stored
  455. $this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
  456. // re-enable the file proxy
  457. \OC_FileProxy::$enabled = $proxyStatus;
  458. // share the file
  459. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
  460. // login as admin
  461. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  462. // check if share key for user2 and user3 exists
  463. $this->assertTrue($this->view->file_exists(
  464. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  465. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  466. $this->assertTrue($this->view->file_exists(
  467. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  468. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
  469. // login as user1
  470. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3);
  471. // get file contents
  472. $retrievedCryptedFile = $this->view->file_get_contents(
  473. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared/' . $this->filename);
  474. // check if data is the same as we previously written
  475. $this->assertEquals($this->dataShort, $retrievedCryptedFile);
  476. // login as admin
  477. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  478. // unshare the file
  479. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  480. // check if share key not exists
  481. $this->assertFalse($this->view->file_exists(
  482. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  483. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  484. $this->assertFalse($this->view->file_exists(
  485. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  486. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey'));
  487. // cleanup
  488. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  489. // check if share key not exists
  490. $this->assertFalse($this->view->file_exists(
  491. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  492. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  493. }
  494. /**
  495. * @large
  496. */
  497. function testRecoveryFile() {
  498. // login as admin
  499. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  500. \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
  501. $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
  502. // login as admin
  503. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  504. $util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  505. // check if recovery password match
  506. $this->assertTrue($util->checkRecoveryPassword('test123'));
  507. // enable recovery for admin
  508. $this->assertTrue($util->setRecoveryForUser(1));
  509. // create folder structure
  510. $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1);
  511. $this->view->mkdir(
  512. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder);
  513. $this->view->mkdir(
  514. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder
  515. . $this->subsubfolder);
  516. // save file with content
  517. $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  518. $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  519. . $this->filename, $this->dataShort);
  520. // test that data was successfully written
  521. $this->assertTrue(is_int($cryptedFile1));
  522. $this->assertTrue(is_int($cryptedFile2));
  523. // check if share key for admin and recovery exists
  524. $this->assertTrue($this->view->file_exists(
  525. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  526. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  527. $this->assertTrue($this->view->file_exists(
  528. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  529. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  530. $this->assertTrue($this->view->file_exists(
  531. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
  532. . $this->subfolder . $this->subsubfolder . '/'
  533. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey'));
  534. $this->assertTrue($this->view->file_exists(
  535. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
  536. . $this->subfolder . $this->subsubfolder . '/'
  537. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  538. // disable recovery for admin
  539. $this->assertTrue($util->setRecoveryForUser(0));
  540. // remove all recovery keys
  541. $util->removeRecoveryKeys('/');
  542. // check if share key for recovery not exists
  543. $this->assertFalse($this->view->file_exists(
  544. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  545. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  546. $this->assertFalse($this->view->file_exists(
  547. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
  548. . $this->subfolder . $this->subsubfolder . '/'
  549. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  550. // enable recovery for admin
  551. $this->assertTrue($util->setRecoveryForUser(1));
  552. // remove all recovery keys
  553. $util->addRecoveryKeys('/');
  554. // check if share key for admin and recovery exists
  555. $this->assertTrue($this->view->file_exists(
  556. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  557. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  558. $this->assertTrue($this->view->file_exists(
  559. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
  560. . $this->subfolder . $this->subsubfolder . '/'
  561. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  562. // cleanup
  563. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  564. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1);
  565. // check if share key for recovery not exists
  566. $this->assertFalse($this->view->file_exists(
  567. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  568. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  569. $this->assertFalse($this->view->file_exists(
  570. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1
  571. . $this->subfolder . $this->subsubfolder . '/'
  572. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  573. $this->assertTrue(\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'));
  574. $this->assertTrue(\OCA\Encryption\Helper::adminDisableRecovery('test123'));
  575. $this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
  576. }
  577. /**
  578. * @large
  579. */
  580. function testRecoveryForUser() {
  581. // login as admin
  582. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  583. \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123');
  584. $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
  585. // login as user1
  586. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  587. $util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2);
  588. // enable recovery for admin
  589. $this->assertTrue($util->setRecoveryForUser(1));
  590. // create folder structure
  591. $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
  592. $this->view->mkdir(
  593. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder);
  594. $this->view->mkdir(
  595. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder
  596. . $this->subsubfolder);
  597. // save file with content
  598. $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  599. $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/'
  600. . $this->filename, $this->dataShort);
  601. // test that data was successfully written
  602. $this->assertTrue(is_int($cryptedFile1));
  603. $this->assertTrue(is_int($cryptedFile2));
  604. // check if share key for user and recovery exists
  605. $this->assertTrue($this->view->file_exists(
  606. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
  607. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  608. $this->assertTrue($this->view->file_exists(
  609. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
  610. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  611. $this->assertTrue($this->view->file_exists(
  612. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
  613. . $this->subfolder . $this->subsubfolder . '/'
  614. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  615. $this->assertTrue($this->view->file_exists(
  616. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
  617. . $this->subfolder . $this->subsubfolder . '/'
  618. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  619. // login as admin
  620. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  621. // change password
  622. \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123');
  623. // login as user1
  624. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test');
  625. // get file contents
  626. $retrievedCryptedFile1 = file_get_contents('crypt://' . $this->filename);
  627. $retrievedCryptedFile2 = file_get_contents(
  628. 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename);
  629. // check if data is the same as we previously written
  630. $this->assertEquals($this->dataShort, $retrievedCryptedFile1);
  631. $this->assertEquals($this->dataShort, $retrievedCryptedFile2);
  632. // cleanup
  633. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1);
  634. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->filename);
  635. // check if share key for user and recovery exists
  636. $this->assertFalse($this->view->file_exists(
  637. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
  638. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  639. $this->assertFalse($this->view->file_exists(
  640. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/'
  641. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  642. $this->assertFalse($this->view->file_exists(
  643. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
  644. . $this->subfolder . $this->subsubfolder . '/'
  645. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
  646. $this->assertFalse($this->view->file_exists(
  647. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1
  648. . $this->subfolder . $this->subsubfolder . '/'
  649. . $this->filename . '.' . $recoveryKeyId . '.shareKey'));
  650. // enable recovery for admin
  651. $this->assertTrue($util->setRecoveryForUser(0));
  652. \OCA\Encryption\Helper::adminDisableRecovery('test123');
  653. $this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled'));
  654. }
  655. /**
  656. * @medium
  657. */
  658. function testFailShareFile() {
  659. // login as admin
  660. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  661. // save file with content
  662. $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort);
  663. // test that data was successfully written
  664. $this->assertTrue(is_int($cryptedFile));
  665. // disable encryption proxy to prevent recursive calls
  666. $proxyStatus = \OC_FileProxy::$enabled;
  667. \OC_FileProxy::$enabled = false;
  668. // get the file info from previous created file
  669. $fileInfo = $this->view->getFileInfo(
  670. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  671. // check if we have a valid file info
  672. $this->assertTrue(is_array($fileInfo));
  673. // check if the unencrypted file size is stored
  674. $this->assertGreaterThan(0, $fileInfo['unencrypted_size']);
  675. // break users public key
  676. $this->view->rename('/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key',
  677. '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup');
  678. // re-enable the file proxy
  679. \OC_FileProxy::$enabled = $proxyStatus;
  680. // share the file
  681. \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL);
  682. // login as admin
  683. \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
  684. // check if share key for user1 not exists
  685. $this->assertFalse($this->view->file_exists(
  686. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  687. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  688. // disable encryption proxy to prevent recursive calls
  689. $proxyStatus = \OC_FileProxy::$enabled;
  690. \OC_FileProxy::$enabled = false;
  691. // break user1 public key
  692. $this->view->rename(
  693. '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup',
  694. '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key');
  695. // remove share file
  696. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  697. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3
  698. . '.shareKey');
  699. // re-enable the file proxy
  700. \OC_FileProxy::$enabled = $proxyStatus;
  701. // unshare the file with user1
  702. \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1);
  703. // check if share key not exists
  704. $this->assertFalse($this->view->file_exists(
  705. '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/'
  706. . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey'));
  707. // cleanup
  708. $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
  709. }
  710. }