2012-07-26 01:08:18 +04:00
< ? php
/**
* ownCloud
*
* @ author Michael Gapczynski
* @ copyright 2012 Michael Gapczynski mtgap @ owncloud . com
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation ; either
* version 3 of the License , or any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details .
*
* You should have received a copy of the GNU Affero General Public
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
*/
2014-11-11 01:30:38 +03:00
class Test_Share extends \Test\TestCase {
2012-07-26 01:08:18 +04:00
protected $itemType ;
protected $userBackend ;
protected $user1 ;
protected $user2 ;
2014-01-21 15:07:08 +04:00
protected $user3 ;
protected $user4 ;
2014-11-17 15:09:13 +03:00
protected $groupAndUser ;
2012-07-26 01:08:18 +04:00
protected $groupBackend ;
protected $group1 ;
protected $group2 ;
2013-02-26 22:31:15 +04:00
protected $resharing ;
2013-09-13 01:37:43 +04:00
protected $dateInFuture ;
protected $dateInPast ;
2013-09-05 04:27:29 +04:00
2014-11-18 13:08:01 +03:00
protected function setUp () {
parent :: setUp ();
2014-11-11 01:30:38 +03:00
2012-07-26 01:08:18 +04:00
OC_User :: clearBackends ();
OC_User :: useBackend ( 'dummy' );
2014-11-18 13:08:01 +03:00
$this -> user1 = $this -> getUniqueID ( 'user1_' );
$this -> user2 = $this -> getUniqueID ( 'user2_' );
$this -> user3 = $this -> getUniqueID ( 'user3_' );
$this -> user4 = $this -> getUniqueID ( 'user4_' );
2015-01-20 15:09:39 +03:00
$this -> user5 = $this -> getUniqueID ( 'user5_' );
2014-11-18 13:08:01 +03:00
$this -> groupAndUser = $this -> getUniqueID ( 'groupAndUser_' );
2012-08-15 19:55:54 +04:00
OC_User :: createUser ( $this -> user1 , 'pass' );
OC_User :: createUser ( $this -> user2 , 'pass' );
OC_User :: createUser ( $this -> user3 , 'pass' );
2012-08-20 00:30:38 +04:00
OC_User :: createUser ( $this -> user4 , 'pass' );
2015-01-20 15:09:39 +03:00
OC_User :: createUser ( $this -> user5 , 'pass' );
2014-11-17 15:09:13 +03:00
OC_User :: createUser ( $this -> groupAndUser , 'pass' );
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user1 );
2012-07-26 01:08:18 +04:00
OC_Group :: clearBackends ();
OC_Group :: useBackend ( new OC_Group_Dummy );
2014-11-18 13:08:01 +03:00
$this -> group1 = $this -> getUniqueID ( 'group1_' );
$this -> group2 = $this -> getUniqueID ( 'group2_' );
2012-07-26 01:08:18 +04:00
OC_Group :: createGroup ( $this -> group1 );
OC_Group :: createGroup ( $this -> group2 );
2014-11-17 15:09:13 +03:00
OC_Group :: createGroup ( $this -> groupAndUser );
2012-08-15 19:55:54 +04:00
OC_Group :: addToGroup ( $this -> user1 , $this -> group1 );
OC_Group :: addToGroup ( $this -> user2 , $this -> group1 );
OC_Group :: addToGroup ( $this -> user3 , $this -> group1 );
2012-08-20 00:30:38 +04:00
OC_Group :: addToGroup ( $this -> user2 , $this -> group2 );
OC_Group :: addToGroup ( $this -> user4 , $this -> group2 );
2014-11-17 15:09:13 +03:00
OC_Group :: addToGroup ( $this -> user2 , $this -> groupAndUser );
OC_Group :: addToGroup ( $this -> user3 , $this -> groupAndUser );
2012-08-15 19:55:54 +04:00
OCP\Share :: registerBackend ( 'test' , 'Test_Share_Backend' );
2012-11-14 02:45:17 +04:00
OC_Hook :: clear ( 'OCP\\Share' );
2012-11-15 21:13:54 +04:00
OC :: registerShareHooks ();
2013-02-26 22:31:15 +04:00
$this -> resharing = OC_Appconfig :: getValue ( 'core' , 'shareapi_allow_resharing' , 'yes' );
OC_Appconfig :: setValue ( 'core' , 'shareapi_allow_resharing' , 'yes' );
2013-09-13 01:37:43 +04:00
// 20 Minutes in the past, 20 minutes in the future.
$now = time ();
$dateFormat = 'Y-m-d H:i:s' ;
$this -> dateInPast = date ( $dateFormat , $now - 20 * 60 );
$this -> dateInFuture = date ( $dateFormat , $now + 20 * 60 );
2012-07-26 01:08:18 +04:00
}
2014-11-18 13:08:01 +03:00
protected function tearDown () {
2012-08-25 03:52:27 +04:00
$query = OC_DB :: prepare ( 'DELETE FROM `*PREFIX*share` WHERE `item_type` = ?' );
2012-08-15 19:55:54 +04:00
$query -> execute ( array ( 'test' ));
2013-02-26 22:31:15 +04:00
OC_Appconfig :: setValue ( 'core' , 'shareapi_allow_resharing' , $this -> resharing );
2014-11-11 01:30:38 +03:00
2014-11-18 13:08:01 +03:00
parent :: tearDown ();
2012-07-26 01:08:18 +04:00
}
2012-08-15 19:55:54 +04:00
public function testShareInvalidShareType () {
2012-10-12 21:28:24 +04:00
$message = 'Share type foobar is not valid for test.txt' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , 'foobar' , $this -> user2 , \OCP\Constants :: PERMISSION_READ );
2012-10-12 21:28:24 +04:00
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-10-12 21:28:24 +04:00
}
2012-07-26 01:08:18 +04:00
}
2012-08-15 19:55:54 +04:00
public function testInvalidItemType () {
$message = 'Sharing backend for foobar not found' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'foobar' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
OCP\Share :: getItemsSharedWith ( 'foobar' );
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
OCP\Share :: getItemSharedWith ( 'foobar' , 'test.txt' );
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
OCP\Share :: getItemSharedWithBySource ( 'foobar' , 'test.txt' );
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
OCP\Share :: getItemShared ( 'foobar' , 'test.txt' );
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
OCP\Share :: unshare ( 'foobar' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 );
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: setPermissions ( 'foobar' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_UPDATE );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-07-26 01:08:18 +04:00
}
2013-09-05 04:45:52 +04:00
protected function shareUserOneTestFileWithUserTwo () {
2013-09-05 04:31:54 +04:00
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue (
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ),
2013-09-05 04:31:54 +04:00
'Failed asserting that user 1 successfully shared text.txt with user 2.'
);
2013-09-23 18:16:48 +04:00
$this -> assertContains (
'test.txt' ,
2013-09-05 04:31:54 +04:00
OCP\Share :: getItemShared ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that test.txt is a shared file of user 1.'
);
OC_User :: setUserId ( $this -> user2 );
2013-09-23 18:16:48 +04:00
$this -> assertContains (
'test.txt' ,
2013-09-05 04:31:54 +04:00
OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that user 2 has access to test.txt after initial sharing.'
);
}
2014-06-03 17:15:04 +04:00
protected function shareUserTestFileAsLink () {
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$result = OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_LINK , null , \OCP\Constants :: PERMISSION_READ );
2014-06-03 17:15:04 +04:00
$this -> assertTrue ( is_string ( $result ));
}
2014-02-19 12:31:54 +04:00
/**
* @ param string $sharer
* @ param string $receiver
*/
2014-01-10 05:08:29 +04:00
protected function shareUserTestFileWithUser ( $sharer , $receiver ) {
OC_User :: setUserId ( $sharer );
$this -> assertTrue (
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $receiver , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ),
2014-01-10 05:08:29 +04:00
'Failed asserting that ' . $sharer . ' successfully shared text.txt with ' . $receiver . '.'
);
$this -> assertContains (
'test.txt' ,
OCP\Share :: getItemShared ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that test.txt is a shared file of ' . $sharer . '.'
);
OC_User :: setUserId ( $receiver );
$this -> assertContains (
'test.txt' ,
OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that ' . $receiver . ' has access to test.txt after initial sharing.'
);
}
2012-08-15 19:55:54 +04:00
public function testShareWithUser () {
// Invalid shares
$message = 'Sharing test.txt failed, because the user ' . $this -> user1 . ' is the item owner' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user1 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
$message = 'Sharing test.txt failed, because the user foobar does not exist' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , 'foobar' , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-08-20 00:30:38 +04:00
$message = 'Sharing foobar failed, because the sharing backend for test could not find its source' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'foobar' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ );
2012-08-20 00:30:38 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-20 00:30:38 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Valid share
2013-09-05 04:31:54 +04:00
$this -> shareUserOneTestFileWithUserTwo ();
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt to share again
OC_User :: setUserId ( $this -> user1 );
$message = 'Sharing test.txt failed, because this item is already shared with ' . $this -> user2 ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Attempt to share back
OC_User :: setUserId ( $this -> user2 );
$message = 'Sharing test.txt failed, because the user ' . $this -> user1 . ' is the original sharer' ;
2012-08-15 19:55:54 +04:00
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user1 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Unshare
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshare ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt reshare without share permission
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
$message = 'Sharing test.txt failed, because resharing is not allowed' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-11-05 01:16:04 +04:00
// Owner grants share and update permission
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: setPermissions ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE | \OCP\Constants :: PERMISSION_SHARE ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt reshare with escalated permissions
OC_User :: setUserId ( $this -> user2 );
$message = 'Sharing test.txt failed, because the permissions exceed permissions granted to ' . $this -> user2 ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_DELETE );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Valid reshare
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE ));
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemShared ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ));
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt to escalate permissions
OC_User :: setUserId ( $this -> user2 );
$message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to ' . $this -> user2 ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: setPermissions ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_DELETE );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Remove update permission
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: setPermissions ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Remove share permission
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: setPermissions ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2014-03-06 17:00:12 +04:00
$this -> assertSame ( array (), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Reshare again, and then have owner unshare
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: setPermissions ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshare ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 ));
OC_User :: setUserId ( $this -> user2 );
2014-03-06 17:00:12 +04:00
$this -> assertSame ( array (), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2014-03-06 17:00:12 +04:00
$this -> assertSame ( array (), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' ));
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt target conflict
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'share.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2012-08-28 02:12:01 +04:00
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
2012-08-28 02:12:01 +04:00
$to_test = OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( 2 , count ( $to_test ));
2012-08-28 02:12:01 +04:00
$this -> assertTrue ( in_array ( 'test.txt' , $to_test ));
$this -> assertTrue ( in_array ( 'test1.txt' , $to_test ));
2012-08-22 19:35:30 +04:00
2014-08-23 14:05:19 +04:00
// Unshare from self
$this -> assertTrue ( OCP\Share :: unshareFromSelf ( 'test' , 'test.txt' ));
$this -> assertEquals ( array ( 'test1.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
// Unshare from self via source
$this -> assertTrue ( OCP\Share :: unshareFromSelf ( 'test' , 'share.txt' , true ));
$this -> assertEquals ( array (), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2014-08-23 14:05:19 +04:00
OC_User :: setUserId ( $this -> user3 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'share.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ ));
2014-08-23 14:05:19 +04:00
OC_User :: setUserId ( $this -> user2 );
$to_test = OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET );
$this -> assertEquals ( 2 , count ( $to_test ));
$this -> assertTrue ( in_array ( 'test.txt' , $to_test ));
$this -> assertTrue ( in_array ( 'test1.txt' , $to_test ));
2012-08-16 20:20:14 +04:00
// Remove user
2012-09-09 04:15:35 +04:00
OC_User :: setUserId ( $this -> user1 );
2012-08-20 00:30:38 +04:00
OC_User :: deleteUser ( $this -> user1 );
OC_User :: setUserId ( $this -> user2 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test1.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-08-15 19:55:54 +04:00
}
2012-07-26 01:08:18 +04:00
2013-09-05 04:45:52 +04:00
public function testShareWithUserExpirationExpired () {
2014-06-03 17:15:04 +04:00
OC_User :: setUserId ( $this -> user1 );
2013-09-04 19:26:30 +04:00
$this -> shareUserOneTestFileWithUserTwo ();
2014-06-03 17:15:04 +04:00
$this -> shareUserTestFileAsLink ();
2013-09-04 19:26:30 +04:00
2014-07-23 18:42:33 +04:00
// manipulate share table and set expire date to the past
$query = \OC_DB :: prepare ( 'UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `item_type` = ? AND `item_source` = ? AND `uid_owner` = ? AND `share_type` = ?' );
$query -> bindValue ( 1 , new \DateTime ( $this -> dateInPast ), 'datetime' );
$query -> bindValue ( 2 , 'test' );
$query -> bindValue ( 3 , 'test.txt' );
$query -> bindValue ( 4 , $this -> user1 );
$query -> bindValue ( 5 , \OCP\Share :: SHARE_TYPE_LINK );
$query -> execute ();
2013-09-04 19:26:30 +04:00
2014-06-03 17:15:04 +04:00
$shares = OCP\Share :: getItemsShared ( 'test' );
$this -> assertSame ( 1 , count ( $shares ));
$share = reset ( $shares );
$this -> assertSame ( \OCP\Share :: SHARE_TYPE_USER , $share [ 'share_type' ]);
2013-09-04 19:26:30 +04:00
}
2014-07-23 18:42:33 +04:00
public function testSetExpireDateInPast () {
OC_User :: setUserId ( $this -> user1 );
$this -> shareUserOneTestFileWithUserTwo ();
$this -> shareUserTestFileAsLink ();
$setExpireDateFailed = false ;
try {
$this -> assertTrue (
OCP\Share :: setExpirationDate ( 'test' , 'test.txt' , $this -> dateInPast , '' ),
'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
);
} catch ( \Exception $e ) {
$setExpireDateFailed = true ;
}
$this -> assertTrue ( $setExpireDateFailed );
}
2013-09-05 04:45:52 +04:00
public function testShareWithUserExpirationValid () {
2014-06-03 17:15:04 +04:00
OC_User :: setUserId ( $this -> user1 );
2013-09-04 19:26:30 +04:00
$this -> shareUserOneTestFileWithUserTwo ();
2014-06-03 17:15:04 +04:00
$this -> shareUserTestFileAsLink ();
2013-09-04 19:26:30 +04:00
$this -> assertTrue (
2014-07-23 18:42:33 +04:00
OCP\Share :: setExpirationDate ( 'test' , 'test.txt' , $this -> dateInFuture , '' ),
2013-09-04 19:26:30 +04:00
'Failed asserting that user 1 successfully set an expiration date for the test.txt share.'
2013-09-04 19:15:08 +04:00
);
2014-06-03 17:15:04 +04:00
$shares = OCP\Share :: getItemsShared ( 'test' );
$this -> assertSame ( 2 , count ( $shares ));
2013-09-04 19:26:30 +04:00
}
2013-09-04 19:15:08 +04:00
2014-07-29 00:35:11 +04:00
/*
* if user is in a group excluded from resharing , then the share permission should
* be removed
*/
public function testShareWithUserAndUserIsExcludedFromResharing () {
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue (
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user4 , \OCP\Constants :: PERMISSION_ALL ),
2014-07-29 00:35:11 +04:00
'Failed asserting that user 1 successfully shared text.txt with user 4.'
);
$this -> assertContains (
'test.txt' ,
OCP\Share :: getItemShared ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that test.txt is a shared file of user 1.'
);
// exclude group2 from sharing
\OC_Appconfig :: setValue ( 'core' , 'shareapi_exclude_groups_list' , $this -> group2 );
\OC_Appconfig :: setValue ( 'core' , 'shareapi_exclude_groups' , " yes " );
OC_User :: setUserId ( $this -> user4 );
$share = OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' );
2014-11-25 18:28:41 +03:00
$this -> assertSame ( \OCP\Constants :: PERMISSION_ALL & ~ \OCP\Constants :: PERMISSION_SHARE , $share [ 'permissions' ],
2014-07-29 00:35:11 +04:00
'Failed asserting that user 4 is excluded from re-sharing' );
\OC_Appconfig :: deleteKey ( 'core' , 'shareapi_exclude_groups_list' );
\OC_Appconfig :: deleteKey ( 'core' , 'shareapi_exclude_groups' );
}
2013-09-05 04:45:52 +04:00
protected function shareUserOneTestFileWithGroupOne () {
2013-09-05 04:41:24 +04:00
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue (
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , \OCP\Constants :: PERMISSION_READ ),
2013-09-05 04:41:24 +04:00
'Failed asserting that user 1 successfully shared text.txt with group 1.'
);
2013-09-23 18:16:48 +04:00
$this -> assertContains (
'test.txt' ,
2013-09-05 04:41:24 +04:00
OCP\Share :: getItemShared ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that test.txt is a shared file of user 1.'
);
OC_User :: setUserId ( $this -> user2 );
2013-09-23 18:16:48 +04:00
$this -> assertContains (
'test.txt' ,
2013-09-05 04:41:24 +04:00
OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that user 2 has access to test.txt after initial sharing.'
);
OC_User :: setUserId ( $this -> user3 );
2013-09-23 18:16:48 +04:00
$this -> assertContains (
'test.txt' ,
2013-09-05 04:41:24 +04:00
OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'Failed asserting that user 3 has access to test.txt after initial sharing.'
);
}
2012-08-15 19:55:54 +04:00
public function testShareWithGroup () {
// Invalid shares
$message = 'Sharing test.txt failed, because the group foobar does not exist' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , 'foobar' , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2014-06-04 13:07:31 +04:00
$policy = OC_Appconfig :: getValue ( 'core' , 'shareapi_only_share_with_group_members' , 'no' );
OC_Appconfig :: setValue ( 'core' , 'shareapi_only_share_with_group_members' , 'yes' );
2012-08-15 19:55:54 +04:00
$message = 'Sharing test.txt failed, because ' . $this -> user1 . ' is not a member of the group ' . $this -> group2 ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group2 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2014-06-04 13:07:31 +04:00
OC_Appconfig :: setValue ( 'core' , 'shareapi_only_share_with_group_members' , $policy );
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Valid share
2013-09-05 04:41:24 +04:00
$this -> shareUserOneTestFileWithGroupOne ();
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Attempt to share again
OC_User :: setUserId ( $this -> user1 );
$message = 'Sharing test.txt failed, because this item is already shared with ' . $this -> group1 ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , \OCP\Constants :: PERMISSION_READ );
2012-08-15 19:55:54 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-15 19:55:54 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Attempt to share back to owner of group share
OC_User :: setUserId ( $this -> user2 );
$message = 'Sharing test.txt failed, because the user ' . $this -> user1 . ' is the original sharer' ;
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user1 , \OCP\Constants :: PERMISSION_READ );
2012-08-20 00:30:38 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-20 00:30:38 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Attempt to share back to group
2012-08-22 19:35:30 +04:00
$message = 'Sharing test.txt failed, because this item is already shared with ' . $this -> group1 ;
2012-08-20 00:30:38 +04:00
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , \OCP\Constants :: PERMISSION_READ );
2012-08-20 00:30:38 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-20 00:30:38 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Attempt to share back to member of group
2012-08-22 19:35:30 +04:00
$message = 'Sharing test.txt failed, because this item is already shared with ' . $this -> user3 ;
2012-08-20 00:30:38 +04:00
try {
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , \OCP\Constants :: PERMISSION_READ );
2012-08-20 00:30:38 +04:00
$this -> fail ( 'Exception was expected: ' . $message );
} catch ( Exception $exception ) {
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( $message , $exception -> getMessage ());
2012-08-20 00:30:38 +04:00
}
2012-11-11 22:58:54 +04:00
2012-08-15 19:55:54 +04:00
// Unshare
2012-08-20 00:30:38 +04:00
OC_User :: setUserId ( $this -> user1 );
2012-08-15 19:55:54 +04:00
$this -> assertTrue ( OCP\Share :: unshare ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Valid share with same person - user then group
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_DELETE | \OCP\Constants :: PERMISSION_SHARE ));
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user2 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE | \OCP\Constants :: PERMISSION_DELETE | \OCP\Constants :: PERMISSION_SHARE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-08-15 19:55:54 +04:00
OC_User :: setUserId ( $this -> user3 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Valid reshare
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user4 , \OCP\Constants :: PERMISSION_READ ));
2012-08-20 00:30:38 +04:00
OC_User :: setUserId ( $this -> user4 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Unshare from user only
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshare ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 ));
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-08-20 00:30:38 +04:00
OC_User :: setUserId ( $this -> user4 );
2014-08-01 18:24:19 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Valid share with same person - group then user
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_DELETE ));
2012-08-20 00:30:38 +04:00
OC_User :: setUserId ( $this -> user2 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE | \OCP\Constants :: PERMISSION_DELETE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Unshare from group only
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshare ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 ));
OC_User :: setUserId ( $this -> user2 );
2014-11-25 18:28:41 +03:00
$this -> assertEquals ( array ( \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_DELETE ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_PERMISSIONS ));
2012-11-11 22:58:54 +04:00
2012-08-20 00:30:38 +04:00
// Attempt user specific target conflict
OC_User :: setUserId ( $this -> user3 );
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'share.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ));
2012-08-20 00:30:38 +04:00
OC_User :: setUserId ( $this -> user2 );
2012-08-28 02:35:10 +04:00
$to_test = OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( 2 , count ( $to_test ));
2012-08-28 02:35:10 +04:00
$this -> assertTrue ( in_array ( 'test.txt' , $to_test ));
$this -> assertTrue ( in_array ( 'test1.txt' , $to_test ));
2012-11-11 22:58:54 +04:00
2012-11-05 01:16:04 +04:00
// Valid reshare
2014-11-25 18:28:41 +03:00
$this -> assertTrue ( OCP\Share :: shareItem ( 'test' , 'share.txt' , OCP\Share :: SHARE_TYPE_USER , $this -> user4 , \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_SHARE ));
2012-09-03 02:23:09 +04:00
OC_User :: setUserId ( $this -> user4 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test1.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-09-03 02:23:09 +04:00
// Remove user from group
OC_Group :: removeFromGroup ( $this -> user2 , $this -> group1 );
OC_User :: setUserId ( $this -> user2 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-09-03 02:23:09 +04:00
OC_User :: setUserId ( $this -> user4 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array (), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-08-16 20:20:14 +04:00
// Add user to group
2012-09-03 02:23:09 +04:00
OC_Group :: addToGroup ( $this -> user4 , $this -> group1 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-09-09 04:15:35 +04:00
// Unshare from self
$this -> assertTrue ( OCP\Share :: unshareFromSelf ( 'test' , 'test.txt' ));
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array (), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-09-09 04:15:35 +04:00
OC_User :: setUserId ( $this -> user2 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2014-08-23 14:05:19 +04:00
// Unshare from self via source
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshareFromSelf ( 'test' , 'share.txt' , true ));
$this -> assertEquals ( array (), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-11-11 22:58:54 +04:00
2012-08-16 20:20:14 +04:00
// Remove group
2012-09-03 04:01:09 +04:00
OC_Group :: deleteGroup ( $this -> group1 );
2012-09-09 04:15:35 +04:00
OC_User :: setUserId ( $this -> user4 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array (), OCP\Share :: getItemsSharedWith ( 'test' , Test_Share_Backend :: FORMAT_TARGET ));
2012-09-03 04:01:09 +04:00
OC_User :: setUserId ( $this -> user3 );
2012-10-12 22:05:45 +04:00
$this -> assertEquals ( array (), OCP\Share :: getItemsShared ( 'test' ));
2012-07-26 01:08:18 +04:00
}
2015-01-20 15:09:39 +03:00
/**
* Test that unsharing from group will also delete all
* child entries
*/
public function testShareWithGroupThenUnshare () {
OC_User :: setUserId ( $this -> user5 );
OCP\Share :: shareItem (
'test' ,
'test.txt' ,
OCP\Share :: SHARE_TYPE_GROUP ,
$this -> group1 ,
\OCP\Constants :: PERMISSION_ALL
);
$targetUsers = array ( $this -> user1 , $this -> user2 , $this -> user3 );
foreach ( $targetUsers as $targetUser ) {
OC_User :: setUserId ( $targetUser );
$items = OCP\Share :: getItemsSharedWithUser (
'test' ,
$targetUser ,
Test_Share_Backend :: FORMAT_TARGET
);
$this -> assertEquals ( 1 , count ( $items ));
}
OC_User :: setUserId ( $this -> user5 );
OCP\Share :: unshare (
'test' ,
'test.txt' ,
OCP\Share :: SHARE_TYPE_GROUP ,
$this -> group1
);
// verify that all were deleted
foreach ( $targetUsers as $targetUser ) {
OC_User :: setUserId ( $targetUser );
$items = OCP\Share :: getItemsSharedWithUser (
'test' ,
$targetUser ,
Test_Share_Backend :: FORMAT_TARGET
);
$this -> assertEquals ( 0 , count ( $items ));
}
}
2014-11-17 15:09:13 +03:00
public function testShareWithGroupAndUserBothHaveTheSameId () {
$this -> shareUserTestFileWithUser ( $this -> user1 , $this -> groupAndUser );
OC_User :: setUserId ( $this -> groupAndUser );
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'"groupAndUser"-User does not see the file but it was shared with him' );
OC_User :: setUserId ( $this -> user2 );
$this -> assertEquals ( array (), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'User2 sees test.txt but it was only shared with the user "groupAndUser" and not with group' );
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshareAll ( 'test' , 'test.txt' ));
$this -> assertTrue (
2014-11-25 18:28:41 +03:00
OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_GROUP , $this -> groupAndUser , \OCP\Constants :: PERMISSION_READ ),
2014-11-17 15:09:13 +03:00
'Failed asserting that user 1 successfully shared text.txt with group 1.'
);
OC_User :: setUserId ( $this -> groupAndUser );
$this -> assertEquals ( array (), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'"groupAndUser"-User sees test.txt but it was only shared with the group "groupAndUser" and not with the user' );
OC_User :: setUserId ( $this -> user2 );
$this -> assertEquals ( array ( 'test.txt' ), OCP\Share :: getItemSharedWith ( 'test' , 'test.txt' , Test_Share_Backend :: FORMAT_SOURCE ),
'User2 does not see test.txt but it was shared with the group "groupAndUser"' );
OC_User :: setUserId ( $this -> user1 );
$this -> assertTrue ( OCP\Share :: unshareAll ( 'test' , 'test.txt' ));
}
2014-02-19 12:31:54 +04:00
/**
* @ param boolean | string $token
*/
2013-09-14 19:56:55 +04:00
protected function getShareByValidToken ( $token ) {
$row = OCP\Share :: getShareByToken ( $token );
$this -> assertInternalType (
'array' ,
$row ,
" Failed asserting that a share for token $token exists. "
);
return $row ;
}
2014-11-10 15:08:45 +03:00
public function testGetItemSharedWithUser () {
OC_User :: setUserId ( $this -> user1 );
//add dummy values to the share table
$query = \OC_DB :: prepare ( 'INSERT INTO `*PREFIX*share` ('
. ' `item_type`, `item_source`, `item_target`, `share_type`,'
. ' `share_with`, `uid_owner`) VALUES (?,?,?,?,?,?)' );
$args = array ( 'test' , 99 , 'target1' , OCP\Share :: SHARE_TYPE_USER , $this -> user2 , $this -> user1 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target2' , OCP\Share :: SHARE_TYPE_USER , $this -> user4 , $this -> user1 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target3' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , $this -> user2 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target4' , OCP\Share :: SHARE_TYPE_USER , $this -> user3 , $this -> user4 );
$query -> execute ( $args );
$result1 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , $this -> user2 , $this -> user1 );
$this -> assertSame ( 1 , count ( $result1 ));
$this -> verifyResult ( $result1 , array ( 'target1' ));
$result2 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , null , $this -> user1 );
$this -> assertSame ( 2 , count ( $result2 ));
$this -> verifyResult ( $result2 , array ( 'target1' , 'target2' ));
$result3 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , $this -> user3 );
$this -> assertSame ( 2 , count ( $result3 ));
$this -> verifyResult ( $result3 , array ( 'target3' , 'target4' ));
$result4 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , null , null );
$this -> assertSame ( 4 , count ( $result4 ));
$this -> verifyResult ( $result4 , array ( 'target1' , 'target2' , 'target3' , 'target4' ));
}
2015-01-16 20:11:13 +03:00
public function testGetItemSharedWithUserFromGroupShare () {
OC_User :: setUserId ( $this -> user1 );
//add dummy values to the share table
$query = \OC_DB :: prepare ( 'INSERT INTO `*PREFIX*share` ('
. ' `item_type`, `item_source`, `item_target`, `share_type`,'
. ' `share_with`, `uid_owner`) VALUES (?,?,?,?,?,?)' );
$args = array ( 'test' , 99 , 'target1' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , $this -> user1 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target2' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group2 , $this -> user1 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target3' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , $this -> user2 );
$query -> execute ( $args );
$args = array ( 'test' , 99 , 'target4' , OCP\Share :: SHARE_TYPE_GROUP , $this -> group1 , $this -> user4 );
$query -> execute ( $args );
// user2 is in group1 and group2
$result1 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , $this -> user2 , $this -> user1 );
$this -> assertSame ( 2 , count ( $result1 ));
$this -> verifyResult ( $result1 , array ( 'target1' , 'target2' ));
$result2 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , null , $this -> user1 );
$this -> assertSame ( 2 , count ( $result2 ));
$this -> verifyResult ( $result2 , array ( 'target1' , 'target2' ));
// user3 is in group1 and group2
$result3 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , $this -> user3 );
$this -> assertSame ( 3 , count ( $result3 ));
$this -> verifyResult ( $result3 , array ( 'target1' , 'target3' , 'target4' ));
$result4 = \OCP\Share :: getItemSharedWithUser ( 'test' , 99 , null , null );
$this -> assertSame ( 4 , count ( $result4 ));
$this -> verifyResult ( $result4 , array ( 'target1' , 'target2' , 'target3' , 'target4' ));
}
2014-11-10 15:08:45 +03:00
public function verifyResult ( $result , $expected ) {
foreach ( $result as $r ) {
if ( in_array ( $r [ 'item_target' ], $expected )) {
$key = array_search ( $r [ 'item_target' ], $expected );
unset ( $expected [ $key ]);
}
}
$this -> assertEmpty ( $expected , 'did not found all expected values' );
}
2013-09-14 19:56:55 +04:00
public function testShareItemWithLink () {
OC_User :: setUserId ( $this -> user1 );
2014-11-25 18:28:41 +03:00
$token = OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_LINK , null , \OCP\Constants :: PERMISSION_READ );
2013-09-14 19:56:55 +04:00
$this -> assertInternalType (
'string' ,
$token ,
'Failed asserting that user 1 successfully shared text.txt as link with token.'
);
// testGetShareByTokenNoExpiration
$row = $this -> getShareByValidToken ( $token );
$this -> assertEmpty (
$row [ 'expiration' ],
'Failed asserting that the returned row does not have an expiration date.'
);
// testGetShareByTokenExpirationValid
$this -> assertTrue (
2014-07-23 18:42:33 +04:00
OCP\Share :: setExpirationDate ( 'test' , 'test.txt' , $this -> dateInFuture , '' ),
2013-09-14 19:56:55 +04:00
'Failed asserting that user 1 successfully set a future expiration date for the test.txt share.'
);
$row = $this -> getShareByValidToken ( $token );
$this -> assertNotEmpty (
$row [ 'expiration' ],
'Failed asserting that the returned row has an expiration date.'
);
2014-07-23 18:42:33 +04:00
// manipulate share table and set expire date to the past
$query = \OC_DB :: prepare ( 'UPDATE `*PREFIX*share` SET `expiration` = ? WHERE `item_type` = ? AND `item_source` = ? AND `uid_owner` = ? AND `share_type` = ?' );
$query -> bindValue ( 1 , new \DateTime ( $this -> dateInPast ), 'datetime' );
$query -> bindValue ( 2 , 'test' );
$query -> bindValue ( 3 , 'test.txt' );
$query -> bindValue ( 4 , $this -> user1 );
$query -> bindValue ( 5 , \OCP\Share :: SHARE_TYPE_LINK );
$query -> execute ();
2013-09-14 19:56:55 +04:00
$this -> assertFalse (
OCP\Share :: getShareByToken ( $token ),
'Failed asserting that an expired share could not be found.'
);
}
2013-09-23 18:16:48 +04:00
2014-07-28 19:19:19 +04:00
public function testShareItemWithLinkAndDefaultExpireDate () {
OC_User :: setUserId ( $this -> user1 );
\OC_Appconfig :: setValue ( 'core' , 'shareapi_default_expire_date' , 'yes' );
\OC_Appconfig :: setValue ( 'core' , 'shareapi_expire_after_n_days' , '2' );
2014-11-25 18:28:41 +03:00
$token = OCP\Share :: shareItem ( 'test' , 'test.txt' , OCP\Share :: SHARE_TYPE_LINK , null , \OCP\Constants :: PERMISSION_READ );
2014-07-28 19:19:19 +04:00
$this -> assertInternalType (
'string' ,
$token ,
'Failed asserting that user 1 successfully shared text.txt as link with token.'
);
// share should have default expire date
$row = $this -> getShareByValidToken ( $token );
$this -> assertNotEmpty (
$row [ 'expiration' ],
'Failed asserting that the returned row has an default expiration date.'
);
\OC_Appconfig :: deleteKey ( 'core' , 'shareapi_default_expire_date' );
\OC_Appconfig :: deleteKey ( 'core' , 'shareapi_expire_after_n_days' );
}
2013-09-23 18:16:48 +04:00
public function testUnshareAll () {
2014-01-10 05:08:29 +04:00
$this -> shareUserTestFileWithUser ( $this -> user1 , $this -> user2 );
$this -> shareUserTestFileWithUser ( $this -> user2 , $this -> user3 );
$this -> shareUserTestFileWithUser ( $this -> user3 , $this -> user4 );
2013-09-23 18:16:48 +04:00
$this -> shareUserOneTestFileWithGroupOne ();
OC_User :: setUserId ( $this -> user1 );
$this -> assertEquals (
array ( 'test.txt' , 'test.txt' ),
2014-02-19 19:56:37 +04:00
OCP\Share :: getItemsShared ( 'test' , Test_Share_Backend :: FORMAT_SOURCE ),
2014-01-10 05:08:29 +04:00
'Failed asserting that the test.txt file is shared exactly two times by user1.'
);
OC_User :: setUserId ( $this -> user2 );
$this -> assertEquals (
array ( 'test.txt' ),
2014-02-19 19:56:37 +04:00
OCP\Share :: getItemsShared ( 'test' , Test_Share_Backend :: FORMAT_SOURCE ),
2014-01-10 05:08:29 +04:00
'Failed asserting that the test.txt file is shared exactly once by user2.'
);
OC_User :: setUserId ( $this -> user3 );
$this -> assertEquals (
array ( 'test.txt' ),
2014-02-19 19:56:37 +04:00
OCP\Share :: getItemsShared ( 'test' , Test_Share_Backend :: FORMAT_SOURCE ),
2014-01-10 05:08:29 +04:00
'Failed asserting that the test.txt file is shared exactly once by user3.'
2013-09-23 18:16:48 +04:00
);
$this -> assertTrue (
OCP\Share :: unshareAll ( 'test' , 'test.txt' ),
2014-01-10 05:08:29 +04:00
'Failed asserting that user 3 successfully unshared all shares of the test.txt share.'
2013-09-23 18:16:48 +04:00
);
$this -> assertEquals (
array (),
OCP\Share :: getItemsShared ( 'test' ),
2014-01-10 05:08:29 +04:00
'Failed asserting that the share of the test.txt file by user 3 has been removed.'
);
OC_User :: setUserId ( $this -> user1 );
$this -> assertEquals (
array (),
OCP\Share :: getItemsShared ( 'test' ),
'Failed asserting that both shares of the test.txt file by user 1 have been removed.'
);
OC_User :: setUserId ( $this -> user2 );
$this -> assertEquals (
array (),
OCP\Share :: getItemsShared ( 'test' ),
'Failed asserting that the share of the test.txt file by user 2 has been removed.'
2013-09-23 18:16:48 +04:00
);
}
2014-01-21 15:07:08 +04:00
/**
* @ dataProvider checkPasswordProtectedShareDataProvider
* @ param $expected
* @ param $item
*/
public function testCheckPasswordProtectedShare ( $expected , $item ) {
2014-07-16 21:40:22 +04:00
\OC :: $server -> getSession () -> set ( 'public_link_authenticated' , 100 );
2014-01-21 15:07:08 +04:00
$result = \OCP\Share :: checkPasswordProtectedShare ( $item );
$this -> assertEquals ( $expected , $result );
}
function checkPasswordProtectedShareDataProvider () {
return array (
array ( true , array ()),
array ( true , array ( 'share_with' => null )),
array ( true , array ( 'share_with' => '' )),
array ( true , array ( 'share_with' => '1234567890' , 'share_type' => '1' )),
array ( true , array ( 'share_with' => '1234567890' , 'share_type' => 1 )),
array ( true , array ( 'share_with' => '1234567890' , 'share_type' => '3' , 'id' => 100 )),
array ( true , array ( 'share_with' => '1234567890' , 'share_type' => 3 , 'id' => 100 )),
array ( false , array ( 'share_with' => '1234567890' , 'share_type' => '3' , 'id' => 101 )),
array ( false , array ( 'share_with' => '1234567890' , 'share_type' => 3 , 'id' => 101 )),
);
2014-08-01 18:24:19 +04:00
}
2014-01-21 15:07:08 +04:00
2014-12-04 21:51:04 +03:00
/**
* @ dataProvider urls
*/
function testRemoveProtocolFromUrl ( $url , $expectedResult ) {
$share = new \OC\Share\Share ();
$result = \Test_Helper :: invokePrivate ( $share , 'removeProtocolFromUrl' , array ( $url ));
$this -> assertSame ( $expectedResult , $result );
}
function urls () {
return array (
array ( 'http://owncloud.org' , 'owncloud.org' ),
array ( 'https://owncloud.org' , 'owncloud.org' ),
array ( 'owncloud.org' , 'owncloud.org' ),
);
}
2014-08-01 18:24:19 +04:00
/**
* @ dataProvider dataProviderTestGroupItems
* @ param type $ungrouped
* @ param type $grouped
*/
function testGroupItems ( $ungrouped , $grouped ) {
2014-01-21 15:07:08 +04:00
2014-08-01 18:24:19 +04:00
$result = DummyShareClass :: groupItemsTest ( $ungrouped );
2014-01-21 15:07:08 +04:00
2014-08-01 18:24:19 +04:00
$this -> compareArrays ( $grouped , $result );
}
function compareArrays ( $result , $expectedResult ) {
foreach ( $expectedResult as $key => $value ) {
if ( is_array ( $value )) {
$this -> compareArrays ( $result [ $key ], $value );
} else {
$this -> assertSame ( $value , $result [ $key ]);
}
2014-01-21 15:07:08 +04:00
}
2014-08-01 18:24:19 +04:00
}
function dataProviderTestGroupItems () {
return array (
// one array with one share
array (
array ( // input
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_ALL , 'item_target' => 't1' )),
2014-08-01 18:24:19 +04:00
array ( // expected result
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_ALL , 'item_target' => 't1' ))),
2014-08-01 18:24:19 +04:00
// two shares both point to the same source
array (
array ( // input
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ),
2014-08-01 18:24:19 +04:00
),
array ( // expected result
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ,
2014-08-01 18:24:19 +04:00
'grouped' => array (
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ),
2014-08-01 18:24:19 +04:00
)
),
)
),
// two shares both point to the same source but with different targets
array (
array ( // input
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't2' ),
2014-08-01 18:24:19 +04:00
),
array ( // expected result
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't2' ),
2014-08-01 18:24:19 +04:00
)
),
// three shares two point to the same source
array (
array ( // input
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 2 , 'permissions' => \OCP\Constants :: PERMISSION_CREATE , 'item_target' => 't2' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ),
2014-08-01 18:24:19 +04:00
),
array ( // expected result
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ | \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ,
2014-08-01 18:24:19 +04:00
'grouped' => array (
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_READ , 'item_target' => 't1' ),
array ( 'item_source' => 1 , 'permissions' => \OCP\Constants :: PERMISSION_UPDATE , 'item_target' => 't1' ),
2014-08-01 18:24:19 +04:00
)
),
2014-11-25 18:28:41 +03:00
array ( 'item_source' => 2 , 'permissions' => \OCP\Constants :: PERMISSION_CREATE , 'item_target' => 't2' ),
2014-08-01 18:24:19 +04:00
)
),
);
}
}
class DummyShareClass extends \OC\Share\Share {
public static function groupItemsTest ( $items ) {
return parent :: groupItems ( $items , 'test' );
2014-01-21 15:07:08 +04:00
}
2012-07-26 01:08:18 +04:00
}