Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
302 commits
Select commit Hold shift + click to select a range
563df59
[stable9.1] lastInsertId requires the prefix (#25785)
butonic Aug 12, 2016
4033a6b
DAV: Return data-fingerprint always when asked (#25482)
guruz Aug 13, 2016
df16a0c
Store the shared propagator instance
Jul 18, 2016
aacf391
Fix subadmin permission check for addToGroup/removeFromGroup
Aug 12, 2016
c8a385d
Get shared storage numeric id directly from DB
Aug 10, 2016
3717e62
Lazy init shared storage by tweaking jail
Aug 10, 2016
dc7d55c
Flag to not recurse into shared mounts in getPath
Aug 11, 2016
837bf1c
Use FailedStorage when share is invalid
Aug 11, 2016
c492277
Merge pull request #25751 from owncloud/stable9.1-shared-cachetheprop…
Aug 15, 2016
5d6a2b8
add conditional smb trace logging for debug purposes
butonic Aug 16, 2016
03a65e5
Improve file_target finding logic when repairing unmerged shares
Aug 12, 2016
8cca364
Fix unmerged shares repair with mixed group and direct shares
Aug 12, 2016
c5477ad
Merge pull request #25797 from owncloud/stable9.1-provisioning-api-su…
Aug 16, 2016
4b9879d
Merge pull request #25789 from owncloud/stable9.1-usermountcache-hell…
Aug 16, 2016
01a5154
Merge pull request #25776 from owncloud/stable9.1-eaecf0cfa9094eb5224…
Aug 16, 2016
22d2083
Disable NFD encoding wrapper by default
Aug 16, 2016
b7356d8
Merge pull request #25811 from owncloud/stable9.1-smb-trace
Aug 16, 2016
64d7887
Merge pull request #25812 from owncloud/stable9.1-fix-unmerged-shares…
Aug 17, 2016
4765f5b
Merge pull request #25819 from owncloud/stable9.1-disable-nfd-wrapper
Aug 17, 2016
35f9a56
204 and 304 must not have a body, see https://tools.ietf.org/html/rfc…
butonic Aug 17, 2016
aea66fa
Improve regexp to detect duplicate folders when repairing unmerged sh…
Aug 17, 2016
0815af3
Merge pull request #25841 from owncloud/stable9.1-fix-unmerged-shares…
Aug 17, 2016
c687c89
remove reference magic
butonic Aug 17, 2016
b59b697
Merge pull request #25845 from owncloud/stable9.1-remove_reference_magic
Aug 18, 2016
9bbf347
fix typo
butonic Aug 18, 2016
98af894
Merge pull request #25837 from owncloud/stable9.1_nobodyifnocontent
Aug 18, 2016
d4ec50c
Merge pull request #25849 from owncloud/stable9.1-fixtypo
Aug 18, 2016
fb9576d
[stable9.1] Dont decrypt shared files (#25831)
Aug 18, 2016
3737f5a
ownCloud Server 9.1.1 RC1
Aug 18, 2016
8b9536c
correct version string to 9.1.1 RC1
Aug 18, 2016
554e96c
[stable9.1] In cases where the server dictates the link share expirat…
DeepDiver1975 Aug 11, 2016
80a4940
Merge pull request #25860 from owncloud/stable9.1-aedae12db5ebfaf56be…
Aug 19, 2016
c058e94
[stable9.1] Move over to new CalDAVTester repo (#25859) (#25863)
DeepDiver1975 Aug 19, 2016
e27efa5
[stable9.1] 25532_issue_password_update_notification_updated (#25756)
JackWillDavis Aug 19, 2016
e466349
Hide the LDAP password in the client side (#25872)
jvillafanez Aug 19, 2016
ced5ba0
Fix hidden files handling (#25865)
Aug 19, 2016
20aa7ee
Display number of hidden files in files summary (#25877)
Aug 19, 2016
c4ba9f2
Make sure file list files config always exists
Aug 22, 2016
6c64d36
[9.1] Before a user is getting scanned the database connection is re-…
Aug 22, 2016
4c7135a
[stable9.1] Best practice through out the web speak of a max avatar i…
DeepDiver1975 Aug 22, 2016
4e8718a
Merge pull request #25886 from owncloud/stable9.1-init-filesconfig
Aug 22, 2016
5aa7892
Merge pull request #25888 from owncloud/stable9.1-27a5be96f108d4ab2b9…
Aug 22, 2016
13d794f
Merge pull request #25866 from owncloud/stable9.1-3cebeb168023627a0e5…
Aug 22, 2016
8003c16
Merge pull request #25898 from owncloud/stable9.1-a9e633db0cd04cb6288…
Aug 22, 2016
bbfa0fe
[stable9.1] Fix issues where some user settings cannot be loaded when…
DeepDiver1975 Aug 22, 2016
3ae319f
[stable9.1] Fix empty PATH_INFO (#25904)
DeepDiver1975 Aug 22, 2016
04605ad
Merge pull request #25906 from owncloud/stable9.1-db60e65409e7c6d4f1b…
Aug 23, 2016
cc65604
[stable9.1] Add occ command to expire the trashbin (#25878)
DeepDiver1975 Aug 23, 2016
85e8a46
[stable9.1] 2FA can now be enabled and disabled via the provisioning …
DeepDiver1975 Aug 23, 2016
72745ef
Merge pull request #25914 from owncloud/stable9.1-4f73fb491a2bf12dbf4…
Aug 24, 2016
7633cd9
Users page lazy multiselect group dropdowns
Aug 23, 2016
a870db5
Merge pull request #25931 from owncloud/stable9.1-users-lazydropdownw…
Aug 24, 2016
ef16b11
Added testcases about adding and removing users to groups using subad…
SergioBertolinSG Aug 16, 2016
8c7491c
Only check the pertenence to groups
SergioBertolinSG Aug 16, 2016
7d641bb
Change of user missing
SergioBertolinSG Aug 16, 2016
4a0b0bc
Typo in scenario
SergioBertolinSG Aug 17, 2016
5cb0d58
Merge pull request #25929 from owncloud/stable9.1-integration-tests-s…
Aug 26, 2016
74c2c63
[stable9.1] Don't log credentials of LoginController::tryLogin (#2590…
DeepDiver1975 Aug 29, 2016
1b558ae
Fix redirection taking care of protocol and port (#25956)
VicDeo Aug 29, 2016
c195ee6
Prevent error with orphaned shares when updating user mount cache
Aug 25, 2016
6870045
Merge pull request #25948 from owncloud/stable9.1-usermountcache-orph…
Aug 29, 2016
0fae262
Added closeCursor in SharedMount numeric id (#25979)
Aug 30, 2016
5119b63
Allow space for federated share id search (#25981)
Aug 30, 2016
22c1ea8
Add integration test for sharing with group, then user in group
Jul 5, 2016
794229a
Creating the folder when the tests run
SergioBertolinSG Aug 30, 2016
2061fed
Added feature and context, not working yet, option to allow sharing n…
SergioBertolinSG Aug 8, 2016
46f2362
Removed extra context added needed option and remove storage after ex…
SergioBertolinSG Aug 9, 2016
d87dbad
Run as current user
SergioBertolinSG Aug 10, 2016
12b28f8
Added local_storage folder
SergioBertolinSG Aug 12, 2016
d4d3e3b
External storage was not enabled and content was not deleted before s…
SergioBertolinSG Aug 26, 2016
c145ca0
Changed enabled/disabled app in provisioning api tests
SergioBertolinSG Aug 26, 2016
bb291e2
Merge pull request #25987 from owncloud/stable9.1-integration_tests_l…
Aug 31, 2016
8fe2daa
[stable9.1] Comments field is not properly escaped (#26008) (#26009)
DeepDiver1975 Sep 2, 2016
7c042a4
forward port smbfixes (#25951)
butonic Sep 6, 2016
3560458
[stable9.1] Fix failing preview unit tests (#26039)
DeepDiver1975 Sep 6, 2016
d8d29f2
Allow increasing permissions for share owner
Aug 29, 2016
7cc8f4d
Merge pull request #26045 from owncloud/stable9.1-fix-shareperms-incr…
Sep 6, 2016
a2d01aa
Pass web requests to occ controller if upgrade is needed
VicDeo Sep 6, 2016
faa6c45
Merge pull request #26043 from owncloud/stable9.1-d17a7ff32a38804d9e6…
Sep 7, 2016
4f0d8d4
Fix fed share test call to return proper result
Sep 6, 2016
39182a4
Prefilter inaccessible shares in DefaultShareProvider::getSharedWith()
Sep 2, 2016
bc81af7
Merge pull request #26048 from owncloud/stable9.1-cath-needs-upgrade-…
Sep 7, 2016
6415170
Merge pull request #26041 from owncloud/stable9.1-fed-share-retry
Sep 7, 2016
d614c12
Merge pull request #26050 from owncloud/stable9.1-prefilter-inaccessi…
Sep 7, 2016
f572239
Increase version for 9.1.1RC2
Sep 7, 2016
6fe8037
Only use realpath for real directories (#26060)
Sep 8, 2016
debe1c3
Improve chunk upload AssemblyStream performance (#26062) (#26072)
Sep 9, 2016
aed4ee9
Increased version for 9.1.1 RC3
Sep 13, 2016
85f45d4
[stable9.1] Redirect to challenge page when only one 2FA provider (#2…
Sep 19, 2016
5cc7dd8
Final 9.1.1 in version.php
Sep 19, 2016
08a3288
Allow uploading empty files (#26135)
Sep 19, 2016
01833b4
[stable9.1] Fix mimetype detection inside hidden folders (#26138) (#2…
DeepDiver1975 Sep 20, 2016
a5f970a
Merge pull request #26148 from owncloud/stable9.1-c97f24efbaec7756667…
Sep 20, 2016
716eb4f
[stable9.1] In case the build on master or any release branch fails a…
DeepDiver1975 Sep 21, 2016
c6b3763
[stable9.1] Change the minimum log level to fatal (#26213) (#26215)
DeepDiver1975 Sep 27, 2016
492db47
[stable9.1] Translate file summary connector (#26221) (#26222)
DeepDiver1975 Sep 27, 2016
f2d7be4
Backport #26087 to stable9.1 (#26230)
Sep 27, 2016
1b38cee
Backport #26236 to stable9.1 (#26240)
Sep 28, 2016
058c79a
[stable9.1] Unset user PHOTO before setting new one in OCA\DAV\CardDA…
DeepDiver1975 Sep 30, 2016
ebf8a02
[stable9.1] Merge pull request #25636 from owncloud/fix-birthday-cale…
DeepDiver1975 Sep 30, 2016
8b20b12
Tear down FS between cron jobs (#26223)
Sep 30, 2016
bede190
[stable9.1] Changed request to not add a prefix to the url (#26256)
SergioBertolinSG Oct 4, 2016
75eacd1
Added sharing again an own file while belonging to a group scenario t…
SergioBertolinSG Sep 22, 2016
d44aff9
Removed cases not belonging to this PR
SergioBertolinSG Oct 4, 2016
82cd86a
Allow one more origin. Log the reason of occ controller failure (#26031)
VicDeo Sep 8, 2016
9dd64d1
Use classname with namespace to inject dependencies automatically (#2…
VicDeo Sep 21, 2016
e31eac8
Merge pull request #26274 from owncloud/stable9.1-integration-tests-i…
Oct 4, 2016
361844c
Merge pull request #26272 from owncloud/stable9.1-11c30fce0ab0a49919f…
Oct 5, 2016
5e4233a
Merge pull request #26277 from owncloud/stable9.1-backport26031
Oct 5, 2016
16fd8f4
[stable9.1] Improve user list rendering perf by not resorting after e…
Oct 7, 2016
ea96fa0
Merge pull request #26309 from owncloud/stable9.1-0f6a5aac7c4a770d45f…
Oct 10, 2016
94f7f38
[stable9.1] Fix logClientIn for non-existing users (#26292) (#26307)
DeepDiver1975 Oct 10, 2016
3a4f8b6
[stable9.1] fix issue #23600 - mail invites through v1 webdav (#26188)
allgood Sep 28, 2016
08fbfdd
[stable9.1] Don't parse info.xml but reuse already cached app infos -…
DeepDiver1975 Sep 23, 2016
ff75a9a
[stable9.1] forum.owncloud.org -> central.owncloud.org (#25644)
Jul 31, 2016
6b4c35e
[stable9.1] Return ETag and OC-ETag in case of a move (#25683)
DeepDiver1975 Sep 23, 2016
0df4cdc
Tear down FS after user update in CardDAV sync job (#26320)
Oct 10, 2016
522e714
[stable9.1] Escape special characters (#25429)
aaronjwood Jul 20, 2016
fb278ef
New command to update group mappings
jvillafanez Oct 11, 2016
713d04a
Merge pull request #26341 from owncloud/ldap_command_updategroup_stab…
Oct 11, 2016
dc00515
Merge pull request #26340 from owncloud/stable9.1-36d6f3ba8b7b7db8f4d…
Oct 11, 2016
7b0df35
Merge pull request #26334 from owncloud/stable9.1-2c4c56c69b1c8e1bf3b…
Oct 11, 2016
7eda350
Merge pull request #26331 from owncloud/stable9.1-b569564fcc1aba85dce…
Oct 11, 2016
4047fb5
Merge pull request #26328 from owncloud/stable9.1-fc98aa93ac3a79bbc2e…
Oct 11, 2016
8991f5e
Merge pull request #26327 from owncloud/stable9.1-fa711834a18eaae6706…
Oct 11, 2016
83b752d
Backport #26316 to stable9.1 (#26348)
Oct 12, 2016
a25c0d5
[stable9.1] Add missing unit tests (#25936)
DeepDiver1975 Aug 25, 2016
af44018
Fix the tests for 9.1
DeepDiver1975 Oct 10, 2016
a283b95
Fix test
DeepDiver1975 Oct 12, 2016
e9e252a
Merge pull request #26329 from owncloud/stable9.1-3081d0f4fcb33e102e8…
Oct 13, 2016
fe1806c
[stable9.1] Merge pull request #26295 from owncloud/analyse-dependenc…
Oct 10, 2016
db19799
PHP 5.4 compliant
DeepDiver1975 Oct 10, 2016
71b6b86
[stable9.1] Allow php 5.3 syntax in index.php so that the proper erro…
DeepDiver1975 Oct 13, 2016
c3da32f
Merge pull request #26322 from owncloud/stable9.1-9eef6e5bf9509666f26…
Oct 17, 2016
dc7d7b7
Fix post_unshareFromSelf hook parameter format
Oct 13, 2016
6fe9f1d
Add using casing check/fix for initMountPoints
Oct 4, 2016
23744e7
Merge pull request #26271 from owncloud/stable9.1-initmountpoints-use…
Oct 18, 2016
1f49bf5
Merge pull request #26390 from owncloud/stable9.1-group-etagpropagati…
Oct 18, 2016
c82d62a
Fix initMountPoints to set usersSetup earlier
Oct 18, 2016
cb6b995
Skip over missing groups
jvillafanez Oct 17, 2016
26dbe00
Fix minor typo
jvillafanez Oct 19, 2016
2972d35
Merge pull request #26399 from owncloud/stable9.1-userssetup-check-order
Oct 19, 2016
069703f
Merge pull request #26402 from owncloud/upgrade_group_skip_missing
Oct 19, 2016
cc92cdb
[stable9.1] Use correct name for background jobs
DeepDiver1975 Sep 23, 2016
cc5ae2a
[stable9.1] Set version to 0.2.7 to trigger setup of background job
DeepDiver1975 Oct 19, 2016
48bd8d9
Merge pull request #26408 from owncloud/stable9.1-e65648515b31688474b…
Oct 19, 2016
80c95de
Set version to 9.1.2 RC1
Oct 19, 2016
ba01c08
Sanitize length headers when validating quota (#26416)
Oct 20, 2016
0ab64ba
[stable9.1] Fix misleading SSL/TLS SMTP email configuration (#26447)
Oct 24, 2016
39c9bdd
Merge pull request #26455 from owncloud/stable9.1-da79d9affbf1cd3a2e3…
Oct 24, 2016
2b3b8af
stable9.1 is not compatible with PHP 7.1 (#26432)
Oct 24, 2016
6bf3be3
[stable9.1] Merge pull request #26459 from owncloud/limit-carddav-ima…
Oct 25, 2016
96b8afe
[stable9.1] Merge pull request #26460 from owncloud/throw-exceptions-…
Oct 25, 2016
50cd11b
Exclude more invalid chars from files UI path (#26474)
Oct 25, 2016
5c5cae8
Merge pull request #26472 from owncloud/stable9.1-2064023283bc2c05147…
Oct 25, 2016
8438e8b
Merge pull request #26473 from owncloud/stable9.1-565c875fc84436fe25e…
Oct 25, 2016
f79e451
Fix malformed attribute in files app
Oct 25, 2016
1a88648
Merge pull request #26480 from owncloud/stable9.1-fix-malformed-attri…
Oct 25, 2016
8ebd903
Allow integrity check via OccController
VicDeo Oct 25, 2016
b9e59ba
Merge pull request #26482 from owncloud/stable9.1-allow-integrity-check
Oct 25, 2016
3067040
Set version to 9.1.2RC2
Oct 25, 2016
ef33460
Hack to prevent warning for read-only wrapper in public links
Nov 2, 2016
900b804
Skip broken shares when transferring ownership
Nov 2, 2016
d47c589
Set version to 9.1.2
Nov 8, 2016
547cde9
Merge pull request #26572 from owncloud/stable9.1-prevent-log-entry
Nov 9, 2016
dc0ea93
[stable9.1] We need to ensure that the app holding the objectstore im…
DeepDiver1975 Nov 10, 2016
7f1fbc8
First process group shares and then user shares (#26568)
Nov 10, 2016
556eb1d
[stable9.1] Skip local shares in bkg scan and occ files:scan (#26590)
Nov 10, 2016
709d324
Fixed disappearing of share info in file view (#26535)
Nov 11, 2016
68aa221
Merge pull request #26575 from owncloud/stable9.1-transfer-ownership-…
Nov 11, 2016
a2fdd6f
Allow file operations on part files on perm masked storage (#26606)
Nov 11, 2016
aefbe29
Transfer ownership only analyze home storage (#26566)
Nov 11, 2016
fa7f9a1
Add repair step to fix file share permissions
Nov 7, 2016
1ec9796
[stable9.1] Fallback to share link owner when no owner found (#26587)
Nov 14, 2016
497ab1a
Merge pull request #26619 from owncloud/stable9.1-0b91f8d976b04fef249…
Nov 14, 2016
66bc5b5
behat will only only pass if all tests pass
DeepDiver1975 Nov 14, 2016
e5231df
behat will only only pass if all tests pass (#26630)
DeepDiver1975 Nov 14, 2016
600cd00
Merge pull request #26617 from owncloud/stable9.1-fix-invalid-share-p…
Nov 15, 2016
c6b2a43
Added test checking quota after usage
SergioBertolinSG Sep 26, 2016
94a27b9
Added quota calculation test when a file is recieved
SergioBertolinSG Sep 26, 2016
f131eb4
Merge pull request #26634 from owncloud/stable9.1-integration-tests-q…
Nov 15, 2016
3c24afe
Adapted favorites and dav2 features
SergioBertolinSG Sep 27, 2016
b45e267
Adapted sharing and external features, random failures in sharing:857
SergioBertolinSG Sep 27, 2016
4f2a219
Added weddav related feature
SergioBertolinSG Sep 27, 2016
0ed3bb4
Removed forgotten leftovers
SergioBertolinSG Sep 28, 2016
f6d1e52
Added missing requirements
SergioBertolinSG Nov 16, 2016
738c5e7
Changed nothing for 0 because of previous sabre dav version
SergioBertolinSG Nov 18, 2016
da83e2a
Merge pull request #26642 from owncloud/stable9.1-ntegration-tests-re…
Nov 18, 2016
4b70d84
Add transfer ownership integration tests (#26543)
Nov 7, 2016
9c29961
Transfer ownership now returns exit code on error
Nov 4, 2016
3113bce
Merge pull request #26613 from owncloud/stable9.1-behat-transferowner…
DeepDiver1975 Nov 21, 2016
1167dfb
Fix finding transferred folder in integration tests
Nov 14, 2016
63ee829
Properly expire ext storage versions (#26601)
Nov 22, 2016
d886da7
Skip hidden files when counting visible files in list (#26571)
Nov 22, 2016
b09e814
No challenge from FedAuth
DeepDiver1975 Nov 22, 2016
8d6a7b7
Fix shared storage name in test mock
Nov 22, 2016
f118ac6
Merge pull request #26600 from owncloud/stable9.1-d1c844093539a2d0bf8…
DeepDiver1975 Nov 22, 2016
dfc86f1
Merge pull request #26681 from owncloud/stable9.1-ext-storage-expirev…
DeepDiver1975 Nov 22, 2016
af12b54
Merge pull request #26687 from owncloud/stable9.1-fix-duplicate-www-a…
Nov 23, 2016
274be16
Added functions to check etag of elements
SergioBertolinSG Oct 13, 2016
3232757
Changed description of variable
SergioBertolinSG Oct 14, 2016
37b0594
Added test case about issue 26346
SergioBertolinSG Oct 14, 2016
4a53f35
Merge pull request #26701 from owncloud/stable9.1-integration-tests-a…
Nov 24, 2016
9725ee3
commit transaction after select query
Nov 23, 2016
e9ef724
Add test for duplicate 401 headers on DAV
Nov 22, 2016
b9757cf
Merge pull request #26709 from owncloud/stable9.1-failed-to-create-sh…
Nov 24, 2016
abd55c5
don't try to render preview images if 'enable_previews' has been set …
Nov 24, 2016
5cc70a5
Merge pull request #26714 from owncloud/stable9.1-disable-previews
Nov 24, 2016
ee6fb9d
Added tests about permissions and public upload
SergioBertolinSG Nov 15, 2016
ba2d6de
Correctly convert OCS permissions params
Nov 22, 2016
223bca7
Backport integration test functions from #26610
Nov 14, 2016
6193f3f
Merge pull request #26716 from owncloud/stable9.1-publicupload-fix
Nov 25, 2016
bd81fca
Merge pull request #26711 from owncloud/stable9.1-test-noduplicateheader
Nov 25, 2016
0f8d950
Merge pull request #26669 from owncloud/stable9.1-fix-transferownersh…
Nov 25, 2016
e217170
Set version to 9.1.3 RC1
Nov 29, 2016
2d1f84e
Backported #26748 fix to stable9.1
Dec 5, 2016
f42b1e5
[stable9.1] When grouping shares, sort by stime then id
Dec 6, 2016
b6e85c5
Fix DAV stat cache to properly cache 404
Oct 10, 2016
12cee6e
Update file.php post hook calls
karakayasemi Oct 16, 2016
7f50c28
Remove obsolete RepairLegacyStorages repair step
Dec 6, 2016
ae5ae4a
Prevent user with empty uid
butonic Sep 29, 2016
f9a867b
Set version to 9.1.3
Dec 12, 2016
b4b6755
Merge branch 'stable9.1' into stable9.1
mirekys Dec 13, 2016
e1f674d
Merge pull request #26794 from owncloud/stable9.1-kill-repairlegacyst…
Dec 14, 2016
cb19119
Merge pull request #26793 from owncloud/stable9.1-file-posthook-fix
Dec 14, 2016
fdea059
Merge pull request #26784 from owncloud/stable9.1-1d973b2a51eb5f85061…
Dec 14, 2016
bf726da
Do not validate return code is set is successful
VicDeo Dec 12, 2016
6479f4b
Merge pull request #26826 from owncloud/stable9.1-fix-25692
Dec 16, 2016
5914864
Merge pull request #26810 from owncloud/preventemptyuid_stable91
Dec 16, 2016
5539364
Merge pull request #26767 from mirekys/stable9.1
Dec 16, 2016
1c6eff4
[Stable9.1] Add integration test for creating folder with colon (#26814)
SergioBertolinSG Dec 16, 2016
1bcc136
Just use moment to comupte the time left for the upload - translation…
DeepDiver1975 Dec 19, 2016
4befc32
Remove no longer needed translations
DeepDiver1975 Dec 20, 2016
0a6de51
Merge pull request #26843 from owncloud/stable9.1-e4498de82aa481ac65d…
Dec 21, 2016
e24484a
Merge pull request #26791 from owncloud/stable9.1-fed-statcache-404
Jan 10, 2017
9b841ab
Prevent PHP request to get killed when using fclose callback
Dec 2, 2016
cc82ca9
Add ignore_user_abort everywhere where the time limit is set to 0
Dec 7, 2016
1082eeb
Merge pull request #26939 from owncloud/stable9.1-fcloseafterkill
Jan 17, 2017
fe939ed
[stable9.1] Skip null groups in group manager (#26871)
Jan 17, 2017
cab0fcb
Use Webdav PUT for uploads in the web browser
Dec 16, 2015
f589c22
JS utility function to compare paths
Dec 21, 2015
5f7c442
Goodbye Iframe transport !
Jul 15, 2016
7acd7bb
Add support for chunked upload
Jul 15, 2016
2fc92db
Fix js unit tests for webdav put upload changes
Aug 31, 2016
23310ac
More fixes to file upload
Sep 3, 2016
24f4962
Allow uploading empty files (#26113)
Sep 15, 2016
67a46ba
Remove upload_limit in files app as it is not needed with PUT upload …
Sep 19, 2016
fc81d19
Highlight files and update storage stats at end of upload (#26164)
Sep 21, 2016
4519b8c
Upload autorename on client side
Sep 9, 2016
3c7233e
Enable chunking for bigger files in web upload
Oct 7, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Upload autorename on client side
Removes the need for POST to collection which would hit against upload
limits.

The client tries to auto rename the file by adding a suffix "(2)".
It tries to use the file list on the client side to guess a
suitable name. In case a file still cannot be uploaded and creates a
conflict, which can happen when the file was concurrently uploaded, the
logic will continue increasing the suffix.
  • Loading branch information
Vincent Petry authored and butonic committed Jan 18, 2017
commit 4519b8cc90270706ad6fc541c148fbf4238fba99
54 changes: 2 additions & 52 deletions apps/dav/lib/Connector/Sabre/FilesPlugin.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
/**
* @author Björn Schießle <[email protected]>
* @author Joas Schilling <[email protected]>
* @author Lukas Reschke <[email protected]>
* @author Morris Jobke <[email protected]>
* @author Robin Appelman <[email protected]>
Expand All @@ -9,7 +10,7 @@
* @author Thomas Müller <[email protected]>
* @author Vincent Petry <[email protected]>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
Expand All @@ -29,7 +30,6 @@
namespace OCA\DAV\Connector\Sabre;

use OC\Files\View;
use OCA\DAV\Upload\FutureFile;
use OCP\Files\ForbiddenException;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\NotFound;
Expand Down Expand Up @@ -157,8 +157,6 @@ public function initialize(\Sabre\DAV\Server $server) {
$this->server = $server;
$this->server->on('propFind', array($this, 'handleGetProperties'));
$this->server->on('propPatch', array($this, 'handleUpdateProperties'));
// RFC5995 to add file to the collection with a suggested name
$this->server->on('method:POST', [$this, 'httpPost']);
$this->server->on('afterBind', array($this, 'sendFileIdHeader'));
$this->server->on('afterWriteContent', array($this, 'sendFileIdHeader'));
$this->server->on('afterMethod:GET', [$this,'httpGet']);
Expand Down Expand Up @@ -417,52 +415,4 @@ public function sendFileIdHeader($filePath, \Sabre\DAV\INode $node = null) {
}
}
}

/**
* POST operation on directories to create a new file
* with suggested name
*
* @param RequestInterface $request request object
* @param ResponseInterface $response response object
* @return null|false
*/
public function httpPost(RequestInterface $request, ResponseInterface $response) {
// TODO: move this to another plugin ?
if (!\OC::$CLI && !\OC::$server->getRequest()->passesCSRFCheck()) {
throw new BadRequest('Invalid CSRF token');
}

list($parentPath, $name) = \Sabre\HTTP\URLUtil::splitPath($request->getPath());

// Making sure the parent node exists and is a directory
$node = $this->tree->getNodeForPath($parentPath);

if ($node instanceof Directory) {
// no Add-Member found
if (empty($name) || $name[0] !== '&') {
// suggested name required
throw new BadRequest('Missing suggested file name');
}

$name = substr($name, 1);

if (empty($name)) {
// suggested name required
throw new BadRequest('Missing suggested file name');
}

// make sure the name is unique
$name = basename(\OC_Helper::buildNotExistingFileNameForView($parentPath, $name, $this->fileView));

$node->createFile($name, $request->getBodyAsStream());

list($parentUrl, ) = \Sabre\HTTP\URLUtil::splitPath($request->getUrl());

$response->setHeader('Content-Location', $parentUrl . '/' . rawurlencode($name));

// created
$response->setStatus(201);
return false;
}
}
}
81 changes: 0 additions & 81 deletions apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -550,85 +550,4 @@ public function testDownloadHeaders($isClumsyAgent, $contentDispositionHeader) {

$this->plugin->httpGet($request, $response);
}

public function postCreateFileProvider() {
$baseUrl = 'http://example.com/owncloud/remote.php/webdav/subdir/';
return [
['test.txt', 'some file.txt', 'some file.txt', $baseUrl . 'some%20file.txt'],
['some file.txt', 'some file.txt', 'some file (2).txt', $baseUrl . 'some%20file%20%282%29.txt'],
];
}

/**
* @dataProvider postCreateFileProvider
*/
public function testPostWithAddMember($existingFile, $wantedName, $deduplicatedName, $expectedLocation) {
$request = $this->getMock('Sabre\HTTP\RequestInterface');
$response = $this->getMock('Sabre\HTTP\ResponseInterface');

$request->expects($this->any())
->method('getUrl')
->will($this->returnValue('http://example.com/owncloud/remote.php/webdav/subdir/&' . $wantedName));

$request->expects($this->any())
->method('getPath')
->will($this->returnValue('/subdir/&' . $wantedName));

$request->expects($this->once())
->method('getBodyAsStream')
->will($this->returnValue(fopen('data://text/plain,hello', 'r')));

$this->view->expects($this->any())
->method('file_exists')
->will($this->returnCallback(function($path) use ($existingFile) {
return ($path === '/subdir/' . $existingFile);
}));

$node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory', '/subdir');

$node->expects($this->once())
->method('createFile')
->with($deduplicatedName, $this->isType('resource'));

$response->expects($this->once())
->method('setStatus')
->with(201);
$response->expects($this->once())
->method('setHeader')
->with('Content-Location', $expectedLocation);

$this->assertFalse($this->plugin->httpPost($request, $response));
}

public function testPostOnNonDirectory() {
$request = $this->getMock('Sabre\HTTP\RequestInterface');
$response = $this->getMock('Sabre\HTTP\ResponseInterface');

$request->expects($this->any())
->method('getPath')
->will($this->returnValue('/subdir/test.txt/&abc'));

$this->createTestNode('\OCA\DAV\Connector\Sabre\File', '/subdir/test.txt');

$this->assertNull($this->plugin->httpPost($request, $response));
}

/**
* @expectedException \Sabre\DAV\Exception\BadRequest
*/
public function testPostWithoutAddMember() {
$request = $this->getMock('Sabre\HTTP\RequestInterface');
$response = $this->getMock('Sabre\HTTP\ResponseInterface');

$request->expects($this->any())
->method('getPath')
->will($this->returnValue('/subdir/&'));

$node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory', '/subdir');

$node->expects($this->never())
->method('createFile');

$this->plugin->httpPost($request, $response);
}
}
85 changes: 54 additions & 31 deletions apps/files/js/file-upload.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,26 +100,14 @@ OC.FileUpload.prototype = {

/**
* Return the final filename.
* Either this is the original file name or the file name
* after an autorename.
*
* @return {String} file name
*/
getFileName: function() {
// in case of autorename
// autorenamed name
if (this._newName) {
return this._newName;
}

if (this._conflictMode === OC.FileUpload.CONFLICT_MODE_AUTORENAME) {

var locationUrl = this.getResponseHeader('Content-Location');
if (locationUrl) {
this._newName = decodeURIComponent(OC.basename(locationUrl));
return this._newName;
}
}

return this.getFile().name;
},

Expand All @@ -141,9 +129,20 @@ OC.FileUpload.prototype = {
return OC.joinPaths(this._targetFolder, this.getFile().relativePath || '');
},

/**
* Returns conflict resolution mode.
*
* @return {int} conflict mode
*/
getConflictMode: function() {
return this._conflictMode || OC.FileUpload.CONFLICT_MODE_DETECT;
},

/**
* Set conflict resolution mode.
* See CONFLICT_MODE_* constants.
*
* @param {int} mode conflict mode
*/
setConflictMode: function(mode) {
this._conflictMode = mode;
Expand All @@ -162,6 +161,30 @@ OC.FileUpload.prototype = {
delete this.data.jqXHR;
},

/**
* Trigger autorename and append "(2)".
* Multiple calls will increment the appended number.
*/
autoRename: function() {
var name = this.getFile().name;
if (!this._renameAttempt) {
this._renameAttempt = 1;
}

var dotPos = name.lastIndexOf('.');
var extPart = '';
if (dotPos > 0) {
this._newName = name.substr(0, dotPos);
extPart = name.substr(dotPos);
} else {
this._newName = name;
}

// generate new name
this._renameAttempt++;
this._newName = this._newName + ' (' + this._renameAttempt + ')' + extPart;
},

/**
* Submit the upload
*/
Expand All @@ -179,7 +202,7 @@ OC.FileUpload.prototype = {
}

if (this.uploader.fileList) {
this.data.url = this.uploader.fileList.getUploadUrl(file.name, this.getFullPath());
this.data.url = this.uploader.fileList.getUploadUrl(this.getFileName(), this.getFullPath());
}

if (!this.data.headers) {
Expand All @@ -191,12 +214,9 @@ OC.FileUpload.prototype = {
this.data.type = 'PUT';

delete this.data.headers['If-None-Match'];
if (this._conflictMode === OC.FileUpload.CONFLICT_MODE_DETECT) {
if (this._conflictMode === OC.FileUpload.CONFLICT_MODE_DETECT
|| this._conflictMode === OC.FileUpload.CONFLICT_MODE_AUTORENAME) {
this.data.headers['If-None-Match'] = '*';
} else if (this._conflictMode === OC.FileUpload.CONFLICT_MODE_AUTORENAME) {
// POST to parent folder, with slug
this.data.type = 'POST';
this.data.url = this.uploader.fileList.getUploadUrl('&' + file.name, this.getFullPath());
}

if (file.lastModified) {
Expand All @@ -212,18 +232,6 @@ OC.FileUpload.prototype = {
'Basic ' + btoa(userName + ':' + (password || ''));
}

if (!this.uploader.isXHRUpload()) {
data.formData = [];

// pass headers as parameters
data.formData.push({name: 'headers', value: JSON.stringify(this.data.headers)});
data.formData.push({name: 'requesttoken', value: OC.requestToken});
if (data.type === 'POST') {
// still add the method to the URL
data.url += '?_method=POST';
}
}

var chunkFolderPromise;
if ($.support.blobSlice
&& this.uploader.fileUploadParam.maxChunkSize
Expand Down Expand Up @@ -491,6 +499,14 @@ OC.Uploader.prototype = _.extend({
//show "file already exists" dialog
var self = this;
var file = fileUpload.getFile();
// already attempted autorename but the server said the file exists ? (concurrently added)
if (fileUpload.getConflictMode() === OC.FileUpload.CONFLICT_MODE_AUTORENAME) {
// attempt another autorename, defer to let the current callback finish
_.defer(function() {
self.onAutorename(fileUpload);
});
return;
}
// retrieve more info about this file
this.filesClient.getFileInfo(fileUpload.getFullPath()).then(function(status, fileInfo) {
var original = fileInfo;
Expand Down Expand Up @@ -603,6 +619,13 @@ OC.Uploader.prototype = _.extend({
onAutorename:function(upload) {
this.log('autorename', null, upload);
upload.setConflictMode(OC.FileUpload.CONFLICT_MODE_AUTORENAME);

do {
upload.autoRename();
// if file known to exist on the client side, retry
} while (this.fileList && this.fileList.inList(upload.getFileName()));

// resubmit upload
this.submitUploads([upload]);
},
_trace:false, //TODO implement log handler for JS per class?
Expand Down
28 changes: 28 additions & 0 deletions apps/files/js/templates/detailsview.handlebars.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
(function() {
var template = Handlebars.template, templates = OCA.Files.Templates = OCA.Files.Templates || {};
templates['detailsview'] = template({"1":function(container,depth0,helpers,partials,data) {
var stack1;

return "<ul class=\"tabHeaders\">\n"
+ ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tabHeaders : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+ "</ul>\n";
},"2":function(container,depth0,helpers,partials,data) {
var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression;

return " <li class=\"tabHeader\" data-tabid=\""
+ alias4(((helper = (helper = helpers.tabId || (depth0 != null ? depth0.tabId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"tabId","hash":{},"data":data}) : helper)))
+ "\" data-tabindex=\""
+ alias4(((helper = (helper = helpers.tabIndex || (depth0 != null ? depth0.tabIndex : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"tabIndex","hash":{},"data":data}) : helper)))
+ "\">\n <a href=\"#\">"
+ alias4(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data}) : helper)))
+ "</a>\n </li>\n";
},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
var stack1, helper, alias1=depth0 != null ? depth0 : {};

return "<div class=\"detailFileInfoContainer\"></div>\n"
+ ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tabHeaders : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+ "<div class=\"tabsContainer\">\n</div>\n<a class=\"close icon-close\" href=\"#\" alt=\""
+ container.escapeExpression(((helper = (helper = helpers.closeLabel || (depth0 != null ? depth0.closeLabel : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"closeLabel","hash":{},"data":data}) : helper)))
+ "\"></a>\n";
},"useData":true});
})();
Loading