Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
90d8e4bc
Commit
90d8e4bc
authored
May 11, 2015
by
Morris Jobke
Browse files
Merge pull request #15815 from owncloud/unshare-etag-propagate
Update etag of direct parent on unshare
parents
7db99497
65fbb5ed
Changes
3
Hide whitespace changes
Inline
Side-by-side
apps/files_sharing/lib/updater.php
View file @
90d8e4bc
...
...
@@ -28,13 +28,15 @@ namespace OC\Files\Cache;
class
Shared_Updater
{
/**
* walk up the users file tree and update the etags
* @param string $user
* @param string $path
* Walk up the users file tree and update the etags.
*
* @param string $user user id
* @param string $path share mount point path, relative to the user's "files" folder
*/
static
private
function
correctUsersFolder
(
$user
,
$path
)
{
// $path points to the mount point which is a virtual folder, so we start with
// the parent
$path
=
'/'
.
ltrim
(
$path
,
'/'
);
$path
=
'/files'
.
dirname
(
$path
);
\
OC\Files\Filesystem
::
initMountPoints
(
$user
);
$view
=
new
\
OC\Files\View
(
'/'
.
$user
);
...
...
@@ -101,10 +103,10 @@ class Shared_Updater {
foreach
(
$deletedShares
as
$share
)
{
if
(
$share
[
'shareType'
]
===
\
OCP\Share
::
SHARE_TYPE_GROUP
)
{
foreach
(
\
OC_Group
::
usersInGroup
(
$share
[
'shareWith'
])
as
$user
)
{
self
::
correctUsersFolder
(
$user
,
dirname
(
$share
[
'fileTarget'
])
)
;
self
::
correctUsersFolder
(
$user
,
$share
[
'fileTarget'
]);
}
}
else
{
self
::
correctUsersFolder
(
$share
[
'shareWith'
],
dirname
(
$share
[
'fileTarget'
])
)
;
self
::
correctUsersFolder
(
$share
[
'shareWith'
],
$share
[
'fileTarget'
]);
}
}
}
...
...
@@ -119,10 +121,10 @@ class Shared_Updater {
foreach
(
$params
[
'unsharedItems'
]
as
$item
)
{
if
(
$item
[
'shareType'
]
===
\
OCP\Share
::
SHARE_TYPE_GROUP
)
{
foreach
(
\
OC_Group
::
usersInGroup
(
$item
[
'shareWith'
])
as
$user
)
{
self
::
correctUsersFolder
(
$user
,
dirname
(
$item
[
'fileTarget'
])
)
;
self
::
correctUsersFolder
(
$user
,
$item
[
'fileTarget'
]);
}
}
else
{
self
::
correctUsersFolder
(
$item
[
'shareWith'
],
dirname
(
$item
[
'fileTarget'
])
)
;
self
::
correctUsersFolder
(
$item
[
'shareWith'
],
$item
[
'fileTarget'
]);
}
}
}
...
...
apps/files_sharing/tests/etagpropagation.php
View file @
90d8e4bc
...
...
@@ -32,6 +32,11 @@ class EtagPropagation extends TestCase {
protected
$fileIds
=
[];
// [$user=>[$path=>$id]]
protected
$fileEtags
=
[];
// [$id=>$etag]
public
static
function
setUpBeforeClass
()
{
parent
::
setUpBeforeClass
();
\
OCA\Files_Sharing\Helper
::
registerHooks
();
}
protected
function
setUp
()
{
parent
::
setUp
();
$this
->
setUpShares
();
...
...
@@ -239,6 +244,43 @@ class EtagPropagation extends TestCase {
$this
->
assertAllUnchaged
();
}
public
function
testOwnerUnshares
()
{
$this
->
loginAsUser
(
self
::
TEST_FILES_SHARING_API_USER1
);
$folderInfo
=
$this
->
rootView
->
getFileInfo
(
'/'
.
self
::
TEST_FILES_SHARING_API_USER1
.
'/files/sub1/sub2/folder'
);
$folderId
=
$folderInfo
->
getId
();
$this
->
assertTrue
(
\
OCP\Share
::
unshare
(
'folder'
,
$folderId
,
\
OCP\Share
::
SHARE_TYPE_USER
,
self
::
TEST_FILES_SHARING_API_USER2
)
);
$this
->
assertEtagsForFoldersChanged
([
// direct recipient affected
self
::
TEST_FILES_SHARING_API_USER2
,
// reshare recipient affected
self
::
TEST_FILES_SHARING_API_USER4
,
]);
$this
->
assertAllUnchaged
();
}
public
function
testRecipientUnsharesFromSelf
()
{
$this
->
loginAsUser
(
self
::
TEST_FILES_SHARING_API_USER2
);
$this
->
assertTrue
(
$this
->
rootView
->
unlink
(
'/'
.
self
::
TEST_FILES_SHARING_API_USER2
.
'/files/sub1/sub2/folder'
)
);
$this
->
assertEtagsForFoldersChanged
([
// direct recipient affected
self
::
TEST_FILES_SHARING_API_USER2
,
// reshare recipient affected
self
::
TEST_FILES_SHARING_API_USER4
,
]);
$this
->
assertAllUnchaged
();
}
public
function
testRecipientWritesToShare
()
{
$this
->
loginAsUser
(
self
::
TEST_FILES_SHARING_API_USER2
);
Filesystem
::
file_put_contents
(
'/sub1/sub2/folder/asd.txt'
,
'bar'
);
...
...
apps/files_sharing/tests/updater.php
View file @
90d8e4bc
...
...
@@ -146,79 +146,6 @@ class Test_Files_Sharing_Updater extends OCA\Files_Sharing\Tests\TestCase {
$this
->
assertTrue
(
$result
);
}
/**
* if a file gets unshared by the owner the etag for the recipients root should change
*/
function
testUnshareFile
()
{
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER1
);
$fileinfo
=
\
OC\Files\Filesystem
::
getFileInfo
(
$this
->
folder
);
$result
=
\
OCP\Share
::
shareItem
(
'folder'
,
$fileinfo
->
getId
(),
\
OCP\Share
::
SHARE_TYPE_USER
,
self
::
TEST_FILES_SHARING_API_USER2
,
31
);
$this
->
assertTrue
(
$result
);
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER2
);
$beforeUnshare
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagBeforeUnshare
=
$beforeUnshare
->
getEtag
();
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER1
);
$result
=
\
OCP\Share
::
unshare
(
'folder'
,
$fileinfo
->
getId
(),
\
OCP\Share
::
SHARE_TYPE_USER
,
self
::
TEST_FILES_SHARING_API_USER2
);
$this
->
assertTrue
(
$result
);
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER2
);
$afterUnshare
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagAfterUnshare
=
$afterUnshare
->
getEtag
();
$this
->
assertTrue
(
is_string
(
$etagBeforeUnshare
));
$this
->
assertTrue
(
is_string
(
$etagAfterUnshare
));
$this
->
assertTrue
(
$etagBeforeUnshare
!==
$etagAfterUnshare
);
}
/**
* if a file gets unshared from self the etag for the recipients root should change
*/
function
testUnshareFromSelfFile
()
{
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER1
);
$fileinfo
=
\
OC\Files\Filesystem
::
getFileInfo
(
$this
->
folder
);
$result
=
\
OCP\Share
::
shareItem
(
'folder'
,
$fileinfo
->
getId
(),
\
OCP\Share
::
SHARE_TYPE_USER
,
self
::
TEST_FILES_SHARING_API_USER2
,
31
);
$this
->
assertTrue
(
$result
);
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER2
);
$result
=
\
OCP\Share
::
shareItem
(
'folder'
,
$fileinfo
->
getId
(),
\
OCP\Share
::
SHARE_TYPE_USER
,
self
::
TEST_FILES_SHARING_API_USER3
,
31
);
$beforeUnshareUser2
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagBeforeUnshareUser2
=
$beforeUnshareUser2
->
getEtag
();
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER3
);
$beforeUnshareUser3
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagBeforeUnshareUser3
=
$beforeUnshareUser3
->
getEtag
();
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER2
);
$result
=
\
OC\Files\Filesystem
::
unlink
(
$this
->
folder
);
$this
->
assertTrue
(
$result
);
$afterUnshareUser2
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagAfterUnshareUser2
=
$afterUnshareUser2
->
getEtag
();
$this
->
loginHelper
(
self
::
TEST_FILES_SHARING_API_USER3
);
$afterUnshareUser3
=
\
OC\Files\Filesystem
::
getFileInfo
(
''
);
$etagAfterUnshareUser3
=
$afterUnshareUser3
->
getEtag
();
$this
->
assertTrue
(
is_string
(
$etagBeforeUnshareUser2
));
$this
->
assertTrue
(
is_string
(
$etagBeforeUnshareUser3
));
$this
->
assertTrue
(
is_string
(
$etagAfterUnshareUser2
));
$this
->
assertTrue
(
is_string
(
$etagAfterUnshareUser3
));
$this
->
assertTrue
(
$etagBeforeUnshareUser2
!==
$etagAfterUnshareUser2
);
$this
->
assertTrue
(
$etagBeforeUnshareUser3
!==
$etagAfterUnshareUser3
);
}
/**
* if a folder gets renamed all children mount points should be renamed too
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment