Compare commits

...

720 Commits

Author SHA1 Message Date
Vincent Petry f25b302a7a Set version to 8.2.9 RC1 2016-10-19 20:06:09 +02:00
Vincent Petry ed468d5c1e Merge pull request #26409 from owncloud/stable9-36d6f3ba8b7b7db8f4d8b2a70504fd184a30cc50
[stable9] Escape special characters (#25429)
2016-10-19 15:47:08 +02:00
Vincent Petry a9e8b7dd08 Merge pull request #26389 from owncloud/stable9-fix-unsharefromself-hookvalues
[stable9] Fix post_unshareFromSelf hook parameter format
2016-10-19 15:45:12 +02:00
Aaron Wood ab92c20d65 [stable9] Escape special characters (#25429)
* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Use correct method in the AbstractMapping class

* Change the getNamesBySearch method so that input can be properly escaped while still supporting matches

* Don't escape hardcoded wildcard
2016-10-19 13:15:03 +02:00
Vincent Petry 20f749efcc Merge pull request #26403 from owncloud/upgrade_group_skip_missing_stable9
[stable9] Upgrade group skip missing stable9
2016-10-19 12:48:42 +02:00
Juan Pablo Villafáñez 95dae784ab Fix minor typo 2016-10-19 10:09:25 +02:00
Juan Pablo Villafáñez 652c960eb2 Skip over missing groups 2016-10-19 10:09:25 +02:00
Vincent Petry 1144cf0de0 Partial backport of etag propagation tests
Took the etag propagation test cases from
92abb5f23d to make sure it uses the new
API when creating shares.
2016-10-19 09:10:54 +02:00
Vincent Petry fcda88ccb1 Fix post_unshareFromSelf hook parameter format
When unsharing from self in a group share situation, the share items
passed to the post_unshareFromSelf hook were using the wrong format in
which the attribute names (ex: "share_type") have non camel-case format.

This fix makes sure that in group sharing case we use the correct
format. It looks like the code was already producing it but in
array_merge it was not using it and adding the unprocessed one.
2016-10-17 09:49:13 +02:00
Vincent Petry 97d12db75b Merge pull request #26332 from owncloud/stable9-b569564fcc1aba85dce6446dc6736e07e87c2c61
[stable9] forum.owncloud.org -> central.owncloud.org
2016-10-11 19:42:15 +02:00
Vincent Petry 8f39d0154b Merge pull request #26343 from owncloud/ldap_command_updategroup_stable9
[stable9] New command to update group mappings
2016-10-11 19:28:56 +02:00
Juan Pablo Villafáñez c88238be1c New command to update group mappings 2016-10-11 13:53:38 +02:00
RealRancor d03255a05a [stable9] forum.owncloud.org -> central.owncloud.org (#25644) 2016-10-10 22:38:11 +02:00
Vincent Petry 846ef0a7c0 Merge pull request #26310 from owncloud/stable9-0f6a5aac7c4a770d45f9a2a36f90aa331c795aac
[stable9] Improve user list rendering perf by not resorting after every add
2016-10-10 09:02:02 +02:00
Vincent Petry 12c934a006 Tear down FS after user update in CardDAV sync job (#26204)
Because fetching the user information will also fetch the avatar, the
avatar code sets up the FS and leaves the mount points cached, we need
to call tearDownFS to clear that up.
2016-10-08 14:47:50 +02:00
Vincent Petry 8343cd2b7a [stable9] Improve user list rendering perf by not resorting after every add (#26282)
The call to UserList.add() was wrong and was passing "user.lastLogin"
as the sort argument which would cause the list to be resorted over and
over again for every added item after loading the next page of users.
2016-10-07 17:18:47 +02:00
Vincent Petry 1641f86b24 Merge pull request #26276 from owncloud/stable9-backport26031
[Stable9] Allow one more origin. Log the reason of occ controller failure
2016-10-06 14:01:27 +02:00
Vincent Petry 2d2a89631e Merge pull request #26275 from owncloud/stable9-integration-tests-issue-26182
Added scenario sharing again an own file while belonging to a group t…
2016-10-04 22:38:19 +02:00
Sergio Bertolin 169adc8f2a Added scenario sharing again an own file while belonging to a group to stable9 2016-10-04 15:24:18 +00:00
Victor Dubiniuk f665b217c6 Backport #26031 and #26105 2016-10-04 18:19:49 +03:00
Vincent Petry 729f0958dc Merge pull request #26258 from owncloud/stable9-8b20b12584bb49b46913ffb9ed273c15b245cc27
[stable9] Tear down FS between cron jobs (#26223)
2016-10-04 10:01:13 +02:00
Vincent Petry 44aa9b8c3c [stable9] Tear down FS between cron jobs (#26223)
Because some cron jobs do not always properly clean up their FS usage
and others might not clean up before setting up the FS, this could
cause potential side effects.

To make sure we exclude side effects, we tear down the FS between cron
jobs.
2016-09-30 13:31:00 +02:00
Thomas Müller b82a99ad43 [stable9] 25532_issue_password_update_notification_updated (#25756) (#25867)
* Password Update Notification

Added an IF ELSE statement to ensure that feedback is provided to the
user on successfully updating a user password in settings.

* Password Update Success Message

Updated the password update success message
2016-09-30 12:34:22 +02:00
Thomas Müller c238b803db [stable9] Unset user PHOTO before setting new one in OCA\DAV\CardDAV\Converter::updateCard (#26243) (#26247)
Signed-off-by: Olivier Mehani <shtrom@ssji.net>
2016-09-30 11:34:02 +02:00
RealRancor 1b4305df63 Backport #26236 to stable9 (#26237) 2016-09-28 09:36:54 +02:00
RealRancor 5300fc9e34 Backport #26087 to stable9 (#26229) 2016-09-27 14:26:55 +02:00
Vincent Petry f02b66e4fd Merge pull request #26187 from owncloud/stable9-fix-shareperms-increase-owner
[stable9] Allow increasing permissions for share owner
2016-09-23 08:59:49 +02:00
Vincent Petry e5c604fd09 Allow increasing permissions for share owner
In some cases, the owner of the share is also recipient through a group
share. The owner must still be able to increase permissions in that
situation.
2016-09-22 15:51:23 +02:00
Vincent Petry f5fd9b83f4 Allow space for federated share id search (#25982) 2016-09-22 07:50:00 +02:00
Thomas Müller 6b4d426e60 [stable9] In case the build on master or any release branch fails an email notification is sent out (#26168) 2016-09-21 14:37:26 +02:00
Thomas Müller 0b51c9ac4d [stable9] Fix mimetype detection inside hidden folders (#26138) (#26152) 2016-09-20 08:38:31 +02:00
Vincent Petry 8771eb3989 Allow uploading empty files (#26136) 2016-09-19 20:39:12 +02:00
Vincent Petry c8a8cec008 Set version to 9.0.5 final 2016-09-19 16:57:28 +02:00
Vincent Petry 2e5ff7b5f3 Increase version for 9.0.5RC2 2016-09-07 20:35:51 +02:00
Vincent Petry 9841ede3ea Merge pull request #26049 from owncloud/stable9-cath-needs-upgrade-non-cli
[Stable9] Pass web requests to occ controller if upgrade is needed
2016-09-07 19:49:32 +02:00
Vincent Petry 4aba079769 Merge pull request #26051 from owncloud/stable9-fix-preview-tests
[stable9] Fix failing preview unit tests (#26039)
2016-09-07 10:54:43 +02:00
Vincent Petry 5b351009be Fix preview namespaces from backport 2016-09-07 08:09:48 +02:00
Thomas Müller 765fba1b5e Fix failing preview unit tests (#26039) 2016-09-07 07:43:17 +02:00
Victor Dubiniuk af76cb7920 Pass web requests to occ controller if upgrade is needed 2016-09-07 00:17:10 +03:00
Thomas Müller e7b469b730 [stable9] Comments field is not properly escaped (#26008) (#26010) 2016-09-02 10:34:52 +02:00
Vincent Petry 6d74b491c0 Merge pull request #25992 from owncloud/stable9-integration_tests_local_external_storage
Stable9 integration tests local external storage
2016-08-31 14:03:05 +02:00
Sergio Bertolín 4f64c16cc5 Changed enabled/disabled app in provisioning api tests 2016-08-31 10:48:23 +00:00
Sergio Bertolín e0ff7f80f5 External storage was not enabled and content was not deleted before scenarios
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-31 10:48:21 +00:00
Sergio Bertolín a799206e48 Added local_storage folder 2016-08-31 10:46:14 +00:00
Sergio Bertolin ccdd257887 Run as current user
Conflicts:
	build/integration/run.sh
2016-08-31 10:46:12 +00:00
Sergio Bertolin 7431cd9211 Removed extra context added needed option and remove storage after external storage scenarios
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-31 10:32:46 +00:00
Sergio Bertolin 7bc069a6e3 Added feature and context, not working yet, option to allow sharing needs to be added 2016-08-31 10:30:01 +00:00
Sergio Bertolín cc0e096077 Creating the folder when the tests run
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-31 10:29:58 +00:00
VicDeo 5c1940b4ef Fix redirection taking care of protocol and port (#25957) 2016-08-29 09:27:38 +02:00
Vincent Petry 246dd571c0 Merge pull request #25953 from owncloud/stable9-integration-tests-subadmins
Stable9 integration tests subadmins
2016-08-29 09:08:04 +02:00
Sergio Bertolín 3b01d7eb6b Typo in scenario 2016-08-26 13:08:51 +00:00
Sergio Bertolin f5ed9793b6 Change of user missing 2016-08-26 13:08:51 +00:00
Sergio Bertolin b06f21158c Only check the pertenence to groups 2016-08-26 13:08:51 +00:00
Sergio Bertolin 7dcad08909 Added testcases about adding and removing users to groups using subadmins
Conflicts:
	build/integration/features/provisioning-v1.feature
2016-08-26 13:08:48 +00:00
Jörn Friedrich Dreyer 72fa98b54a Merge pull request #25817 from owncloud/stable9-smbfixes
[Stable9] smbfixes
2016-08-26 12:07:02 +02:00
Jörn Friedrich Dreyer ebf8be10cc trust libsmbclient on stat, only do dir fallback for smbclient 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 185ce22f51 allow unhiding root folder in subfolder of share 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 93229e76fd fix return values for smbclient backend
see https://github.com/icewind1991/SMB/commit/6e544f617cc271e34d41ea28dd7714a9b1ff75f1
2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 1ef2059ff6 add dir based stat fallback 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 1ac6f4f811 fix test execution due to connection limit 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer d253b6dfab do not overwrite stat cache with plain array 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 717c521423 share root is always readable 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 2565eaca9a always try stat, fake if forbidden, actually return the fileinfo array 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer f95fc02883 move share check to getFileInfo 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer b53de63a0b stat now handles mtime for root shares, simplify hasUpdated 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 5d11696c9b use stat to determine has updated 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer f4051a1334 overwrite target on rename 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer baec3a0c13 formatInfo should include type 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer e0c8696512 don't list hidden files 2016-08-26 09:38:01 +02:00
Jörn Friedrich Dreyer 61c9a065c2 stat for root of a share does not work 2016-08-26 09:38:01 +02:00
Vincent Petry c061f130b7 Merge pull request #25932 from owncloud/stable9-users-lazydropdownwithpencil
[stable9] Users page lazy multiselect group dropdowns
2016-08-24 20:02:07 +02:00
Vincent Petry d358cbb782 Users page lazy multiselect group dropdowns
Instead of pre-rendering all multiselects with lots of group entries,
the current groups are now displayed as simple labels.
Behind the labels there is a pencil icon like for other fields.
When clicking the pencil icon, the dropdown will be spawned and will
open itself.
Upon closing of the dropdown, the label comes back with the updated
selection and the dropdown is destroyed.
2016-08-24 16:47:42 +02:00
Thomas Müller 689a7bdf3c [stable9] Add occ command to expire the trashbin (#25878) (#25915)
* Add occ command to expire the trashbin

* Fix versions folder in setup check
2016-08-24 09:45:35 +02:00
Vincent Petry a3c998976d Merge pull request #25899 from owncloud/stable9-a9e633db0cd04cb6288ce74c197153920a0b4665
[9.0] Best practice through out the web speak of a max avatar image s…
2016-08-22 18:47:46 +02:00
Vincent Petry d32ae2421e Merge pull request #25889 from owncloud/stable9-891c5311357e7ac1408776a2850eac334885ed1e
[9.0] Before a user is getting scanned the database connection is re-…
2016-08-22 17:19:49 +02:00
Thomas Müller 17f0626eee [9.0] Best practice through out the web speak of a max avatar image size of… (#25857)
* Best practice through out the web speak of a max avatar image size of 96 pixels

* Respect size argument

THX @felixboehm
2016-08-22 14:19:25 +02:00
Thomas Müller 19ca74533d [9.0] Before a user is getting scanned the database connection is re-established 2016-08-22 11:26:33 +02:00
Juan Pablo Villafañez 57908ab73f Hide the LDAP password in the client side (#25874)
Connection checks will be done by using the configuration id, with the
stored password. LDAP password won't be sent to the client.

Conflicts:
	apps/user_ldap/ajax/getConfiguration.php
	apps/user_ldap/ajax/testConfiguration.php
2016-08-19 16:48:34 +02:00
Thomas Müller b2766abf70 [stable9] Move over to new CalDAVTester repo (#25859) (#25864)
* Move over to new caldac tester repo

* no run.py anymore
2016-08-19 10:30:46 +02:00
Daniel Molkentin 1d3a157648 ownCloud Server 9.0.5 RC1 2016-08-18 13:15:46 +02:00
Vincent Petry 45e40494a0 Merge pull request #25832 from owncloud/stable9-dont-decrypt-shared-files
[stable9] Don't decrypt shared files
2016-08-18 12:53:51 +02:00
Vincent Petry 3306473ea7 Merge pull request #25843 from owncloud/stable9_remove_reference_magic
[stable9] remove reference magic
2016-08-18 11:52:36 +02:00
Vincent Petry 9ecb4b7e32 Merge pull request #25836 from owncloud/stable9_nobodyifnocontent
[stable9] 204 and 304 must not have a body, see https://tools.ietf.org/html/rfc7230#section-3.3
2016-08-18 11:47:15 +02:00
Jörn Friedrich Dreyer 643c8036e4 remove reference magic 2016-08-18 10:48:06 +02:00
Vincent Petry 85b944aeab Merge pull request #25842 from owncloud/stable9-fix-unmerged-shares-repair-betterregexp
[stable9] Improve regexp to detect duplicate folders when repairing unmerged sares
2016-08-17 17:02:49 +02:00
Jörn Friedrich Dreyer 3c28ebd44b map oracle driver options to params (#25801) 2016-08-17 16:48:30 +02:00
Vincent Petry 83cce56665 Improve regexp to detect duplicate folders when repairing unmerged shares 2016-08-17 14:25:40 +02:00
Jörn Friedrich Dreyer 4e17ecb94b 204 and 304 must not have a body, see https://tools.ietf.org/html/rfc7230#section-3.3 2016-08-17 11:28:29 +02:00
Vincent Petry 63be9603a4 Merge pull request #25608 from owncloud/stable9-6230563489165248c20d4ca2e0be74c8bbff1dd1
[stable9] Simplify testPermissionMovedGroupShare (#25573)
2016-08-17 10:56:15 +02:00
Thomas Müller 4913b5991e Fix unit tests 2016-08-17 10:53:54 +02:00
Thomas Müller 7857517037 Take from https://github.com/nextcloud/server/pull/608/commits/351cab6bce41b53f9efd4ba9aed4e7435f843691 - THX @schiessle 2016-08-17 10:53:49 +02:00
Vincent Petry 40fc3d17ff Merge pull request #25777 from owncloud/stable9-eaecf0cfa9094eb5224e568b7bdde1bd49cfad73
[stable9] Merge pull request #25652 from owncloud/fix-getQuota-on-null
2016-08-17 10:45:35 +02:00
Vincent Petry ef8da70d94 [stable9] Merge pull request #25652 from owncloud/fix-getQuota-on-null
Ensure the user exists before calling a method on it
2016-08-16 17:18:45 +02:00
Vincent Petry 9345b9e1b5 [stable9] Simplify testPermissionMovedGroupShare (#25573)
Reduces significantly the testing time but still cover the permission
change
2016-08-16 14:34:05 +02:00
Vincent Petry 9cda05f3c4 Merge pull request #25808 from owncloud/stable9-smb-trace
[stable9] add conditional smb trace logging for debug purposes
2016-08-16 13:52:25 +02:00
Vincent Petry 33c66f3825 Merge pull request #25543 from owncloud/stable9-group-shares
[stable9] Group shares with same source and target
2016-08-16 13:48:11 +02:00
Vincent Petry 7654efbdd4 Merge pull request #25798 from owncloud/stable9-provisioning-api-subadmin-addtogroup
[stable9] Fix subadmin permission check for addToGroup/removeFromGroup
2016-08-16 12:01:14 +02:00
Jörn Friedrich Dreyer a67e53693a add conditional smb trace logging for debug purposes 2016-08-16 10:50:32 +02:00
Vincent Petry a817327f40 Merge pull request #25766 from owncloud/fix-server-side-share-expiration-setting-stable9
[stable9] In cases where the server dictates the link share expiration the date…
2016-08-15 11:13:36 +02:00
Vincent Petry d2ad804125 Fix unmerged shares repair with mixed group and direct shares
Whenever a group share is created after a direct share, the stime order
needs to be properly considered in the repair routine, considering that
the direct user share is appended to the $subShares array and breaking
its order.
2016-08-13 17:10:13 +02:00
Vincent Petry f68dd4d821 Improve file_target finding logic when repairing unmerged shares
Pick the most recent subshare that has no parenthesis from duplication
which should match whichever name the user picked last. If all
subshares have duplicate parenthesis names, use the least recent group
share's target instead.
2016-08-13 17:10:13 +02:00
Vincent Petry ca1043e4a9 Don't bother repairing unmerged shares when coming from OC 8.2
This would slow down the upgrade needlessly as there is no repair to be
done.
2016-08-13 17:10:13 +02:00
Vincent Petry 2e04cc8e6c Ignore file_target when grouping shares 2016-08-13 17:10:13 +02:00
Vincent Petry f897e19c94 Add integration tests for double shares with rename in between 2016-08-13 17:10:13 +02:00
Vincent Petry 2d463d3991 Fix RepairUnmergedShares to not skip valid repair cases
The repair step was a bit overeager to skip repairing so it missed the
case where a group share exists without subshares but with an
additional direct user share.
2016-08-13 17:10:13 +02:00
Vincent Petry b194b9f408 Adjust RepairUnmergedShares version check 2016-08-13 17:10:13 +02:00
Vincent Petry a39f3ebae2 Fix grouping of received shares in MountProvider
Added flag to enforce grouping of received shares even when the method
is called for a user different than the current one. This can happen at
sharing time whenever the recipient's FS is being setup from the
sharer's call.

This fixes duplicated received folders for new shares.
2016-08-13 17:10:13 +02:00
Vincent Petry 5c15a94c54 Group incoming shares for resharing in JS 2016-08-13 17:10:13 +02:00
Vincent Petry fd0f40383f Add repair step for unmerged shares 2016-08-13 17:10:13 +02:00
Vincent Petry c3e7cf5030 Added more tests for sharing's MountProvider 2016-08-13 17:10:13 +02:00
Vincent Petry f149bce242 Add integration tests for merging received shares 2016-08-13 17:10:13 +02:00
Vincent Petry fd1f7ccb39 Fix paths returned by \OC\Files\Storage\Shared hooks (#25519)
Fixes #23620
2016-08-13 17:08:04 +02:00
Thomas Müller aedae12db5 In cases where the server dictates the link share expiration the date is not updated on consequitive changes and enable/disable actions 2016-08-12 16:10:49 +02:00
Vincent Petry 9e14fefe06 Fix subadmin permission check for addToGroup/removeFromGroup
Fixes issue where subadmins could never add users to a group.
Added missing unit tests
2016-08-12 15:12:50 +02:00
Jörn Friedrich Dreyer f2f86e8505 [stable9] lastInsertId requires the prefix (#25786)
backport of https://github.com/owncloud/core/pull/25764
2016-08-12 15:10:19 +02:00
Juan Pablo Villafañez 97a86bddfe Fix file permissions for SMB (read-only folders will be writeable) (#25734)
Read-only folders won't be deletable
2016-08-12 12:05:57 +02:00
Michael Stingl 831e1239cb [stable9] backport of #23728 (#25491)
Sanitize more data in config report
2016-08-12 12:04:25 +02:00
Thomas Müller 0182b9db72 [stable9] getJailedPath expects $path to have a trailing / (#25703) (#25738)
* getJailedPath expects $path to have a trailing / - fixes #25464

* Adding test case for getPathById including a jailed cache where root is just empty
2016-08-12 10:46:47 +02:00
Thomas Müller bbbe6a0609 [Stable9] fix unit test on new jenkins setup and adjust Jenkinsfile (#25772) (#25775)
* Next step jenkinsfile (#25622)

* Adding timestamper and evaluation of test results even in case of failure

* Adding build timeout

* use fixed value 120 minutes as timeout for each test executing for now

* Terminate the build as soon as test execution fails

* Adjust external testing as well

* Finalize use of executeAndReport

* Fix discoverymanager tests (#25769)

* Allow testing of the DiscoveryManager

* Array sort order is of no relevance
2016-08-11 22:58:39 +02:00
Jörn Friedrich Dreyer 2f08c6c14a Skip version and tras expiry for users that never logged in (#25742) 2016-08-10 17:39:22 +02:00
Jörn Friedrich Dreyer 582a4bb33d log class name, ID only is hard to debug (#25744) 2016-08-10 16:51:37 +02:00
Thomas Müller 1de06003c2 [stable9] Added integration test (#25677)
* [stable9] Added integration test

* Use phantomjs-prebuilt
2016-08-09 14:27:35 +02:00
Chris Hastie ac64fa8d65 Respect theme for external folder icon (#25487)
See issue #25461. 
When using a theme with alternative filetype icons `OCA.External.StatusManager.Utils.getIconRoute` should respect that, rather than hard coding the default icon.

Note this change does not affect windows_network_drive and sharepoint icons, which appear not to be easily themeable.
2016-08-05 08:22:10 +02:00
Thomas Müller 48c386b4f8 [stable9] Added white download icons (#25673) 2016-08-01 16:21:42 +02:00
Thomas Müller d962904940 [stable9] Adding quota plugin to new dav endpoint (#25615) (#25646)
* Adding quota plugin to new dav endpoint

* Added integrated test failing in old endpoint

* Added 0B quota test
2016-07-31 10:02:29 +02:00
Sergio Bertolín 396a4ad9a0 Stable9 backport integration tests (#25631)
* Bring all tests from master

* Removed not applying tests of webdav

* Removed tests about disabling/enabling users

* Fixed/removed some sharing tests for 9.0

* fixed capabilities tests

* Fixed security headers confusion

* Indentation

* Removed merging shares tests
2016-07-28 15:52:08 +02:00
Thomas Müller 023a525e17 Fix undefined OfflineUser::composeAndStoreDisplayName() - fixes #23248 (#25598) 2016-07-26 22:36:47 +02:00
Vincent Petry 53938bd876 Prevent setting email and triggering events at login time (#25531)
Whenever an LDAP user also has an email address defined in LDAP, the
LDAP code will try and update the email address of the locally known
user. This happens at login time or every time the user's LDAP
attributes are processed.

There is code listening to the email setting hook which updates the
system address book, which also will trigger FS setup due to avatars
and other things.

This fix only sets the email address when really necessary.
2016-07-26 21:10:01 +02:00
Thomas Müller e5c22c3695 [stable9] Especially with coverage enabled execution times are pretty high (#25517) (#25596) 2016-07-25 09:26:20 +02:00
Thomas Müller d7943f75ab [stable9] Test jenkins pipeline (#25401) (#25502) 2016-07-24 09:33:39 +02:00
Thomas Müller 9d15d4e523 [stable9] Use explode() instead of split() - fixes #25483 (#25488) (#25500) 2016-07-20 14:27:39 +02:00
Daniel Molkentin 6f4931a085 ownCloud Server 9.0.4 2016-07-18 19:36:15 +02:00
Vincent Petry 36c9f64f67 Backport guzzlehttp fix from 5.3.1 2016-07-18 19:31:33 +02:00
Daniel Molkentin 89c97ee1aa ownCloud Server 9.0.4 RC1 2016-07-13 18:02:20 +02:00
Vincent Petry fb2d27366a [stable9] Adding certificate revocation list and validate if the app certificate is revoked (#25469)
* Adding certificate revocation list and validate if the app certificate is revoked

* Check integrity of a signed app in any case on installation
2016-07-13 16:05:21 +02:00
Thomas Müller ec2e6ce202 Cast share id to string (#25402) (#25431) 2016-07-13 14:35:28 +02:00
Vincent Petry 1f57e2fbbd [stable9] Workaround to check htaccess in case of redirects (#25435)
* Workaround to check htaccess in case of redirects

In some setups, the web server will redirect any call to "data/" to the
main page. This causes the XHR to return the 200 HTTP status code and
the body contains the HTML page of the main page / files app.

This fix improves the htaccess failure detection by adding a known
string inside the test file "htaccesstest.txt". If we are able to find
this string, it means that the web server didn't block access to that
file.

* Fix setup check unit test (#25439)
2016-07-13 11:38:29 +02:00
Vincent Petry d106335d9c Merge pull request #25449 from owncloud/stable9-webdav-copypermissions
[stable9] Additional perm check in Webdav
2016-07-12 14:32:44 +02:00
Sergio Bertolín 0f7cf5c9f0 Modified integration tests 2016-07-12 08:56:27 +02:00
Vincent Petry 121a3304a0 Additional perm check in Webdav 2016-07-12 08:56:13 +02:00
Vincent Petry 3a450f8f15 Hide revert button when no permission to revert (#25327) 2016-07-07 15:35:42 +02:00
Georg Ehrke cc7cf56639 [stable9] Contacts API: replace raw image data with url (#25219)
* [stable9] Contacts API: replace raw image data with url

* fix a ImageExportPlugin Test
2016-07-07 14:14:13 +02:00
Jörn Friedrich Dreyer 93c36a0d7f Cap LDAP user cache (#25324) 2016-07-07 12:59:44 +02:00
Vincent Petry 1698f2d8ab [stable9] Filelist change dir auto-prepend slash (#25378)
* Filelist change dir auto-prepend slash

Prepend a slash to directories in case it was missing since many places
assume that it's there.

* Fix js unit test in filelist spec
2016-07-07 12:59:23 +02:00
Thomas Müller e7302a83f6 [stable9] Set content type when downloading log file to force download in some browsers (#25382) (#25398) 2016-07-07 12:58:42 +02:00
Thomas Müller cfd4e79881 fix swift primary object store test (#25281) (#25391)
* Wait for socket to be open

* Fix call on null

* Allow DB access for MountProviderTest

Makes unit tests pass when using object store, since their FS access is
actually oc_filecache DB access. It is currently not possible to mock
or bypass the logic from "SharedMount::verifyMountPoint()" triggered by
this test.
2016-07-07 12:56:12 +02:00
Thomas Müller 24ac177f83 [stable9] Use named parameter instead of direct value for system tags search param (#25380) (#25396) 2016-07-07 12:53:53 +02:00
Carlos Damken 64a15191e4 Backport 25367 to Stable 9.0 (#25384) 2016-07-06 22:10:52 +02:00
VicDeo 445a76bb1b Bypass upgrade page when occ controller is requested (#25363) 2016-07-06 22:08:58 +02:00
Vincent Petry ad67b3f0b0 Merge pull request #25375 from owncloud/stable9-147c672f5866002d45ec68e99e379449792eeaf8
[stable9] Ignore invalid paths in the JS file list
2016-07-06 18:18:17 +02:00
Vincent Petry 116a6f3938 Merge pull request #25343 from owncloud/stable9-revertrepairrevert
Revert "Remove repair steps for broken updater repair"
2016-07-06 17:49:05 +02:00
Vincent Petry 3864555390 Merge pull request #25360 from owncloud/stable9-backportshareownerfix
[stable9] Change order of share creation validation
2016-07-06 12:48:26 +02:00
Vincent Petry c92c234059 Ignore invalid paths in the JS file list (#25368) 2016-07-06 12:02:04 +02:00
Vincent Petry a2e0573987 Merge pull request #25298 from owncloud/schiessle-fix-get-contact-stable9
[stable9] get only vcards which match both the address book id and the vcard uri
2016-07-06 11:52:27 +02:00
Vincent Petry 6e27375cbe Merge pull request #25222 from owncloud/web-executor-stable9
[stable9] occ web executor
2016-07-05 12:05:12 +02:00
Vincent Petry ffe1a8bffc Add integration test for sharing with group, then user in group
Add integration test for the use case where a group share exists and
then the same owner creates a direct share to a user in that group.
2016-07-05 11:14:56 +02:00
Vincent Petry a2bbc220e0 Change order of share creation validation
Makes sure that the share owner is set before entering the checks that
need it.

Partial backport of afa37d3
2016-07-05 10:59:27 +02:00
felixboehm fdb0d4ad52 check if renamed user is still valid by reapplying the ldap filter (#25338) 2016-07-04 14:16:13 +02:00
Vincent Petry 1a42979104 Revert "Remove repair steps for broken updater repair"
This reverts commit 58ed5b9328e9e12dd4319c0730202f385ca0dc5d.
2016-07-04 12:49:46 +02:00
VicDeo 9fcb26910e occ web executor (#24957)
* Initial web executor

* Fix PHPDoc

Fix broken integration test

OccControllerTests do not require database access - moch them all!

Kill unused sprintf
2016-07-01 11:31:57 +02:00
VicDeo 21bdd3005b Fix OC_Helper::rmdirr for nested symlinks (#25255) 2016-07-01 11:31:02 +02:00
Thomas Müller 4ac256ea6c [stable9] Fix decrypt message stable9 (#25188)
* Fix Decrypt message via occ

* Comments fixed

* Fixed reviews

* Originally:
commit 2304e4bda027e61ff1302c55c2f70f8e4c8f47d0
Author: Joas Schilling <nickvergessen@owncloud.com>
Date:   Tue Jun 7 09:13:11 2016 +0200

    Allow to decrypt user '0' files only

* Fix uid comparison
2016-07-01 11:30:39 +02:00
Thomas Müller 4a4103b923 Suppress warnings from DAV migration if there's nothing to do (#25279) 2016-07-01 11:30:14 +02:00
Vincent Petry abdc587b5c Merge pull request #25264 from owncloud/stable9-search-fixsearchfromotherfilelists
[stable9] Fix search result link for file results outside default list
2016-07-01 11:22:35 +02:00
Vincent Petry 98818283e5 Merge pull request #25234 from owncloud/stable9-iedavclient-nullheaders
[stable9] Init the headers in iedavclient.js
2016-07-01 11:22:06 +02:00
Björn Schießle 1f71285137 get only vcards which match both the address book id and the vcard uri (#25294) 2016-06-29 12:18:28 +02:00
Daniel Molkentin 735411d166 ownCloud 9.0.3 2016-06-29 11:20:32 +02:00
Vincent Petry fd05ff0392 Hide search results after switching directory
When clicking on a folder result in the search result list, the result
box for "results in another folder" must disappear.
2016-06-24 17:14:12 +02:00
Vincent Petry 3128a2c03e Fix search result link for file results outside default list
When outside the "All files" list, the search result link must properly
redirect to the "All files" list.
2016-06-24 17:14:04 +02:00
Christoph Wurst 907c90165a Merge pull request #25256 from owncloud/stable9-setupchecks-preventreload
[stable9] Don't reload page in case of auth errors during setup checks
2016-06-24 17:12:42 +02:00
Vincent Petry e366ed6485 Don't reload page in case of auth errors during setup checks
If an error occurs during setup checks, do not let the global ajax
error handler reload the page.
2016-06-24 09:51:26 +02:00
Vincent Petry eb8e151458 Merge pull request #25248 from owncloud/stable9-unique_targets
[stable9] On mount make sure multiple shares with same target map to unique one…
2016-06-23 18:08:54 +02:00
Roeland Douma b6192c39d8 On mount make sure multiple shares with same target map to unique ones (#23937)
Scenario:
user0 shares a folder 'foo' with user2
user1 shares a folder 'foo' with user2
user2 logs in

Before: show only the 'foo' from user1

After: show both.

* Added intergration tests
2016-06-23 14:27:51 +02:00
Vincent Petry f44500f77a Init the headers in iedavclient.js 2016-06-22 18:16:32 +02:00
Vincent Petry 3aaa33d9d4 Merge pull request #25228 from owncloud/stable9-enc-revertversionsize
[stable9] Rollback version must also adjust cached size
2016-06-22 18:11:20 +02:00
Vincent Petry 880ff122f1 Rollback version must also adjust cached size 2016-06-22 15:18:19 +02:00
Vincent Petry 54209abb74 Merge pull request #25197 from owncloud/fix-npe-in-user-ldap-stable9
[stable9] Fix null pointer exception in user_ldap
2016-06-21 16:10:48 +02:00
Vincent Petry ddd4f367c3 Merge pull request #25199 from owncloud/shared-mount-catch-9
[9.0] Catch exceptions while creating shared mounts
2016-06-21 16:07:44 +02:00
Juan Pablo Villafañez bf7a08f62d dd support to know where the storage test comes from (#25166) 2016-06-21 15:04:08 +02:00
Robin Appelman fa9ba64552 Catch exceptions while creating shared mounts 2016-06-21 12:45:33 +02:00
Jörn Friedrich Dreyer 11c1d399af Fix null pointer exception in user_ldap 2016-06-21 11:16:15 +02:00
Vincent Petry 826654bb70 Merge pull request #25165 from owncloud/stable9-capped-user-cache
[stable9] Capped cache for user config
2016-06-20 17:15:18 +02:00
Vincent Petry 3e3c17a577 Merge pull request #25187 from owncloud/share-app-initorder-stable9
[stable9] Delay files_sharing's registerMountProviders
2016-06-20 17:10:30 +02:00
Vincent Petry 2f61c2963c Delay files_sharing's registerMountProviders
This moves registerMountProviders until after the sharing backends were
registered. In some situations registerMountProviders will trigger
listeners which might require filesystem access which itself would
mount shares, which itself requires the sharing backends to be
initialized.
2016-06-20 13:48:00 +02:00
Vincent Petry 0129437cd5 Make getShareFolder use given view instead of static FS (#25150) 2016-06-20 12:02:04 +02:00
Vincent Petry a3111e8589 Merge pull request #25160 from owncloud/fix-oracle-endless-loop-stable9
Do not recurse link share fetching
2016-06-17 15:24:47 +02:00
Jörn Friedrich Dreyer 0e3682d810 Capped cache for user config 2016-06-17 12:46:28 +02:00
Roeland Jago Douma 2d7bbf4a63 Do not recurse link share fetching
* Might fix an issue on oracle
2016-06-17 11:09:27 +02:00
Vincent Petry 7aa825f7dc Revert "[stable9] Remove shares of the root folder" (#25157) 2016-06-17 11:08:26 +02:00
Vincent Petry b5d3e877f1 Remove shares of the root folder (#25138) 2016-06-17 10:06:08 +02:00
Daniel Molkentin 2ce078e7c3 ownCloud 9.0.3 RC1 2016-06-16 18:25:42 +02:00
Vincent Petry 82384ab91c Merge pull request #25149 from owncloud/backport25146
–emit correct signal when disabling an app
2016-06-16 18:06:48 +02:00
Jörn Friedrich Dreyer 3ac02c9032 –emit correct signal when disabling an app 2016-06-16 17:17:02 +02:00
Vincent Petry f429be1e1d Merge pull request #25137 from owncloud/stable9-backport-25126
[stable9] load authentication apps first
2016-06-16 17:02:52 +02:00
Vincent Petry d55ad778ae Merge pull request #25148 from owncloud/stable9-dropbox-catchratelimit
[stable9] Convert Dropbox Forbidden exception to StorageNotAvailableException
2016-06-16 17:02:42 +02:00
Vincent Petry 5e17e992b0 Convert Dropbox Forbidden exception to StorageNotAvailableException 2016-06-16 16:05:14 +02:00
Vincent Petry b1e60cc349 Merge pull request #25143 from owncloud/stable9-fix-grouped-inputs
[9.0] fix grouped input fields, make sure they take precedence
2016-06-16 12:32:20 +02:00
Jan-Christoph Borchardt 416d4c5141 fix grouped input fields, make sure they take precedence 2016-06-16 11:44:49 +02:00
Christoph Wurst 2656f68d60 load authentication apps first 2016-06-16 11:28:02 +02:00
Vincent Petry ffec0f197b Merge pull request #25118 from owncloud/stable9-fs-usermountcache-capped
[stable9] Capped cache for cache info in UserMountCache
2016-06-16 09:18:43 +02:00
Vincent Petry 3da5d06aa0 Merge pull request #25052 from owncloud/stable9-webdav-download-mimetype
[stable9] DAV now returns file name with Content-Disposition header
2016-06-15 15:27:36 +02:00
Vincent Petry a9c98daffb Capped cache for cache info in UserMountCache 2016-06-15 13:02:39 +02:00
Vincent Petry c5a60c3ae0 Merge pull request #25084 from owncloud/stable9-enc-cappedcache-getaccesslist
[stable9] Use capped cache for encryption's user access list
2016-06-15 10:42:22 +02:00
Vincent Petry 57d3bb36eb Merge pull request #25105 from owncloud/stable9-initial-userloading-workaround
[stable9] decrease initial users to load to 50
2016-06-15 10:33:30 +02:00
Vincent Petry 173f732b9d Merge pull request #25106 from owncloud/stable9-allow-empty-host-when-installing-on-oracle-via-cli
[stable9] Allow empty host when installing on oracle via CLI (#25034)
2016-06-15 10:14:57 +02:00
Jörn Friedrich Dreyer ea330dfa6a Allow empty host when installing on oracle via CLI (#25034) 2016-06-14 20:09:44 +02:00
Jörn Friedrich Dreyer a0215b191d decrease initial users to load to 50
Prevents timeouts on the initial loading of users. proper fix will be in https://github.com/owncloud/core/pull/10994
Workaround for https://github.com/owncloud/core/issues/24734
2016-06-14 17:48:53 +02:00
Thomas Müller 3e846a4821 Use an explicit version of sabre/dav to allow caching on the jenkins slaves - fixes #25087 (#25089) 2016-06-14 12:11:35 +02:00
Vincent Petry 9e3cf794ea Use capped cache for encryption's user access list 2016-06-13 17:47:57 +02:00
Roeland Douma d41d5c48f0 Show the path relative to the requesting user (#25067)
A share can only be requested by 3 'types' of people

* owner
* initiator
* recipient

So we have to get the path as the current user. Since that is the only
path that has any meaning to the user.

- Fixed tests
2016-06-13 12:47:21 +02:00
Roeland Douma 7863987b19 Repair job to fix permissions for avatars (#25068)
Backport of #24898

Cherry-picked:
1b66db72d9
60225284f3
28d9ad2817

But manually since we renamed stuff and the repair procedures changed
2016-06-13 12:47:02 +02:00
Vincent Petry 81761b87e4 DAV now returns file name with Content-Disposition header 2016-06-13 10:50:10 +02:00
Vincent Petry 851b7ca27f Merge pull request #25054 from owncloud/issue-24536-language-name-reused-for-fallback-languages-stable9
[stable9] Do not use the language name, when it's not the one from the language…
2016-06-10 17:02:48 +02:00
Joas Schilling b4f14f1f48 Do not use the language name, when it's not the one from the language we want 2016-06-10 12:44:12 +02:00
Vincent Petry 9edcdb33c7 Merge pull request #24950 from owncloud/stable9-fixdynamicldapgroupaccess
[stable9] Fixed dynamic group ldap access
2016-06-10 11:07:28 +02:00
Vincent Petry fba4460342 Add unit test for LDAP multi group caching 2016-06-09 18:02:09 +02:00
Vincent Petry 251a24b0cb Merge pull request #25039 from owncloud/stable9-construct-path
[Stable9] Construct path to the version file from the current directory and fil…
2016-06-09 16:21:19 +02:00
Vincent Petry 72b76228fc Merge pull request #25035 from owncloud/stable9-err-reload-delay
[stable9] Delay reloading the page if an ajax error occurs, show notification
2016-06-09 16:15:17 +02:00
Vincent Petry 9dff5501e8 Merge pull request #25045 from owncloud/stable9-admin-datadircheck-fix
[stable9] Use temporary htaccesstest.txt for data dir security check
2016-06-09 15:59:01 +02:00
Vincent Petry 05870bb659 Merge pull request #25044 from owncloud/stable9-scanner-user-not-setup
[stable9] skip scanning for a user when the user is not setup yet
2016-06-09 14:52:44 +02:00
Vincent Petry eb34e95fd3 Use temporary htaccesstest.txt for data dir security check 2016-06-09 11:59:42 +02:00
Robin Appelman d46cb39e3c skip scanning for a user when the user is not setup yet 2016-06-09 11:37:02 +02:00
Victor Dubiniuk f5d83e85b7 Construct path to the version file from the current directory and filename. Fixes #22450 2016-06-08 20:32:51 +03:00
Robin McCorkell 3f16ce7403 Add test for reload delay 2016-06-08 17:33:00 +02:00
Robin McCorkell 40f066ab6d Delay reloading the page if an ajax error occurs, show notification 2016-06-08 17:32:54 +02:00
Vincent Petry b37f2e230b Use array_merge when reading cached groups members 2016-06-08 11:24:22 +02:00
VicDeo 7f3f06cdd9 Fix update from 9.0.0 and 9.0.1 (#24854) 2016-06-07 09:46:53 +02:00
Joas Schilling afb4c1e694 Allow public upload when the quota is unlimited (#24988) 2016-06-06 13:48:38 +02:00
Vincent Petry 6e7eb87c80 Merge pull request #24951 from owncloud/backport-24949-internal-server-error-in-sync-client-on-forbidden-directurl
[9.0] Catch the ForbiddenException to make sure it gets handled
2016-06-06 11:34:18 +02:00
Vincent Petry 93699d4224 Merge pull request #24966 from owncloud/stable9-fix-singlefileselect-download
[stable9] File not found when single file in a folde…
2016-06-06 11:28:05 +02:00
Joas Schilling c433218aa1 Catch the ForbiddenException to make sure it gets handled 2016-06-03 15:16:11 +02:00
Dmitry Popov 825d1c105d My fix for #24272, #23613, File not found when single file in a folder (#24800)
* Fixed group share searching for members of
multiple group. Issue #11808.

* Fixed group share searching, continued.

Avoid searching for empty group list in getItemSharedWithUser().
Broke tests in previous commit, #12030.

* Simler check for group count.

* Fix for https://github.com/owncloud/core/issues/24783 , described there

* Now it's #24272, 24783 was a duplicate. Previous change was also not very good. Now we don't create ZIP with a single file inside.
2016-06-02 18:46:03 +02:00
Vincent Petry 7f3bfeffe2 Merge pull request #24921 from owncloud/stable9-backport-24795
[9.0] Allow opening the password reset link in a new window when …
2016-06-02 15:31:36 +02:00
Vincent Petry 4eb87be488 Merge pull request #24944 from owncloud/fix_21173_stable9
stable9: normalize path in getInternalPath
2016-06-02 15:30:47 +02:00
Vincent Petry afe8ee0674 Merge pull request #24958 from owncloud/stable9_24869
[stable9] Use a capped memory cache for the user/group cache
2016-06-02 10:38:30 +02:00
Vincent Petry a780a4c966 Merge pull request #24956 from owncloud/stable9-fix-shareidstring
[stable9] Backport of share id as string fix
2016-06-02 10:11:54 +02:00
Roeland Jago Douma 0efe3ba62e Use a capped memory cache for the user/group cache
For #24403
When upgrading huge installations this can lead to memory problems as
the cache will only grow and grow.

Capping this memory will make sure we don't run out while during normal
operation still basically cache everything.
2016-06-01 21:31:14 +02:00
Vincent Petry 8f04bf3793 Backport of share id as string fix 2016-06-01 17:48:35 +02:00
Arthur Schiwon 087f005936 formatting, white-space changes only 2016-06-01 16:28:02 +02:00
alexweirig f112ece1f2 fixed possible indention problem
spaces -> tab conversion
2016-06-01 16:27:57 +02:00
alexweirig c342dcbcee Fixing group handling
added back the cache processing and fixed
2016-06-01 16:27:52 +02:00
alexweirig 6d74ef71b5 Fixed dynamic group ldap access
getUserGroups:
Using $userDN instead of $uid to query LDAP
Converting groupDN to group name using API instead of substring
Removing cache processing at the end of the method
2016-06-01 16:27:42 +02:00
Vincent Petry 96bf7f5513 Merge pull request #24894 from owncloud/scanner-size-propagation-09
[9.0] trigger size calculation after scanning
2016-06-01 14:53:46 +02:00
Georg Ehrke a08c9b3526 normalize path in getInternalPath 2016-06-01 13:06:59 +02:00
Joas Schilling 69e54bde1f Allow opening the password reset link in a new window when its a URL 2016-06-01 12:15:10 +02:00
Robin Appelman 2ca5f3f957 trigger size calculation after scanning 2016-06-01 10:27:56 +02:00
Joas Schilling 9070fd2c03 Add a warning when the transaction isolation level is not READ_COMMITED (#24915) 2016-05-31 16:11:51 +02:00
Vincent Petry 95cdbd45b8 Merge pull request #24908 from owncloud/stable9-backport-properly-check-for-mbstring
[stable9] Properly check for mbstring extension
2016-05-31 13:52:23 +02:00
Lukas Reschke 2516d07fdd [stable9] Properly check for mbstring extension
mb_detect_encoding is in the fallback we ship in the polyfill library, mb_strcut is not. Thus this lead to a false positive and ownCloud would just break.
2016-05-31 08:15:18 +02:00
Joas Schilling abd8475336 Only show message in the UI when the checker is enabled (#24773) 2016-05-30 14:50:45 +02:00
Vincent Petry 0ec4098955 Merge pull request #24830 from owncloud/stable9-lenz1111-share_download_range_requests_support
[stable9] lenz1111's fantastic share download range requests support
2016-05-30 12:27:16 +02:00
Vincent Petry 761a0b252c Merge pull request #24839 from owncloud/shared-storage-local-9
[9.0] Improve isLocal performance for SharedStorage
2016-05-30 12:23:32 +02:00
Fabian da0ee2ce3a dont update search onResize (#24848) 2016-05-30 11:31:39 +02:00
Björn Schießle b8c4233c7d don't fail on "bad signature" during login. Most likely this happens because (#24837)
the login password changed at the user back-end (e.g ldap). Such failures will
be handled after login correctly by allowing the user to adjust the passwords
2016-05-30 11:19:57 +02:00
Piotr Filiciak 002a7f8294 replaced UnseekableException => NotPermittedException 2016-05-25 15:38:48 +02:00
Robin Appelman 35c32ca721 Improve isLocal performance for SharedStorage 2016-05-25 13:40:34 +02:00
Vincent Petry 8c439643a1 Lowercase class name for unseekableexception
Because 9.1 was PSR-4 and the backport goes back to the old style
2016-05-25 11:13:06 +02:00
Piotr Filiciak 7a791c5472 Code style and doc fix 2016-05-25 11:11:56 +02:00
Piotr Filiciak f29f85709a Http Range requests support in downloads
Http range requests support is required for video preview
2016-05-25 11:11:47 +02:00
Vincent Petry a9c8eee15c Merge pull request #24817 from owncloud/filesystem_check_changes-9
clarify filesystem_check_changes in config.sample.php
2016-05-25 09:40:43 +02:00
Carla Schroder cb8b4740e3 clarify filesystem_check_changes in config.sample.php 2016-05-24 08:14:57 -07:00
Vincent Petry 3d4f29f622 Merge pull request #24417 from owncloud/fix_24182_9.0
[stable9] first call the post_login hooks, before we call getUserFolder.
2016-05-24 10:41:09 +02:00
Vincent Petry 64ec70a70f Merge pull request #24772 from owncloud/backport-24765-boolean-installed-config
[9.0] Make sure we evaluate installed everywhere as a boolean
2016-05-24 10:31:59 +02:00
Joas Schilling b30f4c2799 Make sure we evaluate installed like we do it everywhere 2016-05-23 13:24:03 +02:00
Joas Schilling 3c73e54eb9 Make sure that installed is a boolean 2016-05-23 13:23:51 +02:00
Vincent Petry ad81dff3b4 Merge pull request #24709 from owncloud/backport-24336-remove-password-from-exception-trace-in-dav-auth
Remove the password from the validateUserPass() method as well
2016-05-20 10:35:12 +02:00
Joas Schilling 5da9f10af2 Remove the password from the validateUserPass() method as well 2016-05-19 12:11:31 +02:00
Vincent Petry 173e304be9 Merge pull request #24414 from owncloud/stable9_24405
[Stable9] Use a CappedCache in the user database backend
2016-05-19 10:31:31 +02:00
Vincent Petry ceea3e9104 Merge pull request #24705 from owncloud/locking-mark-reload-free-9
[9.0] free up memory when releasing the last shared lock
2016-05-19 10:28:23 +02:00
Vincent Petry fe1b8adf08 Merge pull request #24676 from owncloud/stable9-fixchunkttl
[stable9] Allow chunk GC mtime tolerance for unfinished part chunks
2016-05-18 18:19:26 +02:00
Robin Appelman e36d70c0de free up memory when releasing the last shared lock 2016-05-18 16:19:35 +02:00
Vincent Petry dfc0a7a4a6 Allow chunk GC mtime tolerance for unfinished part chunks
Whenever part chunks are written, every fwrite in the write loop will
reset the mtime to the current mtime. Only at the end will the touch()
operation set the mtime to now + ttl, in the future.

However the GC code is expecting that every chunk with mtime < now are
old and must be deleted. This causes the GC to sometimes delete part
chunks in which the write loop is slow.

To fix this, a tolerance value is added in the GC code to allow for
more time before a part chunk gets deleted.
2016-05-17 17:15:09 +02:00
Vincent Petry de97110f58 Merge pull request #24441 from owncloud/backport-24432-never-save-app-language-into-request-lang
[9.0] Do not save the language as request lang for apps when we didn't find…
2016-05-17 16:15:05 +02:00
Vincent Petry 56031fe155 Merge pull request #24540 from owncloud/stable9-do-not-automatically-try-to-enable-index-php-less-urls
[Stable9] do not automatically try to enable index php less urls
2016-05-13 16:13:09 +02:00
Vincent Petry 27b12d2901 Merge pull request #24530 from owncloud/backport-24526-forward-user-manager-error-messages-to-ui
[9.0] Pass on the error message from the user manager to the UI
2016-05-13 16:11:55 +02:00
Robin Appelman f8979a9ee2 cap the normalized path cache (#24390) 2016-05-12 16:24:56 +02:00
Lukas Reschke 283347a026 Remove repair steps for broken updater repair (#24438)
That's only required for an update to 9.0.2, the updater server has the required logic to ensure that clients get the right update delivered.
2016-05-12 12:08:54 +02:00
VicDeo 60ec1fc85d Put back pcntl warning (#24295) 2016-05-12 12:08:08 +02:00
Thomas Müller de915934e6 Merge pull request #24538 from owncloud/fix-oracle-ci-stable9
[stable9] Wait a while even after successful connect ...
2016-05-11 19:20:48 +02:00
Thomas Müller 7de566b7c0 Wait a while even after successful conect ... 2016-05-11 18:25:01 +02:00
Thomas Müller d9a2b85059 Merge pull request #24502 from owncloud/stable9-updater-server-configurable
[stable9] Make update server URL configurable
2016-05-11 16:43:41 +02:00
Thomas Müller 877a8f09b4 Merge pull request #24574 from owncloud/stable9_24568
[Stable 9] Fix etag propegation test race condition
2016-05-11 16:29:08 +02:00
Roeland Jago Douma 8aebab9853 Fix test race condition
E-tag propagation replies on the mtime of the file. Order of events:

1. add file 'foo.txt' with content 'bar'
2. Set mtime to now() - 1
3. Check if etag changed.

Now this goes right often when 1 and 2 happen in the same second.
However imagine

1. add file 'foo.txt' with content 'bar' (at t=0.999)
2. Set mtime to now() - 1 (at t=1.001)

Now the mtime will be set to the same time. Thus not chaning the etag.
2016-05-11 14:54:21 +02:00
Lukas Reschke 3505776b6e Make update server URL configurable
Currently testing the updates is a big problem and not really super easy possible. Since we now have a new updater server we should also make this configurable so that people can properly test updates.
2016-05-11 14:37:53 +02:00
Thomas Müller d7da0ac1dc Merge pull request #24384 from owncloud/backport-24327-memory-usage-in-callForAllUsers
[9.0] Better callForAllUsers memory usage
2016-05-11 14:37:13 +02:00
Thomas Müller 6c6cf01af1 Merge pull request #24554 from owncloud/kill-en@pirate-stable9
[stable9] Yo-ho-oh - Murder all band 'o pirates
2016-05-11 13:25:14 +02:00
Thomas Müller 750aeda8b7 Yo-ho-oh - Murder all band 'o pirates - backport of #24550 2016-05-11 11:22:08 +02:00
Joas Schilling decb4789bb Pass on the error message from the user manager to the UI 2016-05-11 11:08:00 +02:00
Thomas Müller 45413d7952 Merge pull request #24541 from owncloud/stable9-backport-23705
[stable9] Fixed 'Help Translate' link
2016-05-11 09:38:56 +02:00
Pau 5d73670686 Fixed 'Help Translate' link 2016-05-10 17:24:56 +02:00
Lukas Reschke b78625e0ae Add repair step for copying the RewriteBase 2016-05-10 17:19:45 +02:00
Lukas Reschke 4e10b81eb0 Move file since stable9 uses old autoloader 2016-05-10 16:53:50 +02:00
Lukas Reschke fefb59e7d0 Do not automatically try to enable index.php-less URLs
The current logic for mod_rewrite relies on the fact that people have properly configured ownCloud, basically it reads from the `overwrite.cli.ur
l` entry and then derives the `RewriteBase` from it.

This usually works. However, since the ownCloud packages seem to install themselves at `/owncloud` (because subfolders are cool or so…) _a lot_ of people have just created a new Virtual Host for it or have simply symlinked the path etc.

This means that `overwrite.cli.url` is wrong, which fails hard if it is used as RewriteBase since Apache does not know where it should serve files from. In the end the ownCloud instance will not be accessible anymore and users will be frustrated. Also some shared hosters like 1&1 (because using shared hosters is so awesome… ;-)) have somewhat dubious Apache configurations or use versions of mod_rewrite from the mediveal age. (because updating is money or so…)

Anyhow. This makes this explicitly an opt-in configuration flag. If `htaccess.RewriteBase` is set then it will configure index.php-less URLs, if
admins set that after installation and don't want to wait until the next ownCloud version they can run `occ maintenance:update:htaccess`.

For ownCloud 9.0 we also have to add a repair step to make sure that instances that already have a RewriteBase configured continue to use it by copying it into the config file. That way all existing URLs stay valid. That one is not in this PR since this is unneccessary in master.

Effectively this reduces another risk of breakage when updating from ownCloud 8 to ownCloud 9.

Fixes https://github.com/owncloud/core/issues/24525, https://github.com/owncloud/core/issues/24426 and probably some more.
2016-05-10 16:49:36 +02:00
Thomas Müller a3bdcfbb90 Merge pull request #24446 from weits/cherry_webdav
solves problem with moving files via WebDAV
2016-05-09 09:17:59 +02:00
Petr Svoboda 7fb631a13b solves problem with moving files via WebDAV
When moving files via WebDAV I sometimes got 

PHP Fatal error:  Nesting level too deep - recursive dependency? in /var/www/owncloud/lib/private/files/view.php on line 729

This small change has fixed the problem for me
2016-05-04 17:23:12 +02:00
Joas Schilling f7f9ef55b6 Do not save the language as request lang for apps when we didn't find any 2016-05-04 14:07:07 +02:00
Björn Schießle 6c797eed82 first call the post_login hooks, before we call getUserFolder.
The login process needs to be completed before we can safely create
the users home folder. For example we need to give encryption a chance
to initialize the users encryption keys in order to copy the skeleton
files correctly
2016-05-03 14:16:17 +02:00
Thomas Müller f9aef7ab9f Fixes #23899 2016-05-03 14:14:59 +02:00
Roeland Jago Douma 1c7ec3a7f5 Use a CappedCache in the user database backend
When running with a user database backend on large installations the
cache can grow to significant sizes. This can be especially problematic
when running big cron/repair jobs.
2016-05-03 13:08:30 +02:00
C Montero-Luque e13d02de2d 9.0.2 2016-05-03 04:37:42 -04:00
Joas Schilling bbcef57d2a When we iterate over all users that might be too much memory 2016-05-02 13:03:56 +02:00
Joas Schilling 13ea66e791 Don't loop over the backends, we already know where the user should be 2016-05-02 13:03:47 +02:00
C Montero-Luque fb82321090 9.0.2 RC2 2016-05-02 04:14:16 -04:00
C. Montero Luque 218a206a6e Merge pull request #24343 from owncloud/stable9_24326
[Stable 9] Make ownCloud work again in php 7.0.6
2016-05-02 04:09:23 -04:00
Roeland Jago Douma a834531aef Make ownCloud work again in php 7.0.6
See https://bugs.php.net/bug.php?id=72117
Basically a bugfix in php caused this issue. So isset is not called more
often. We have to catch this.
2016-05-01 12:31:26 +02:00
Thomas Müller ec1a66b8a6 Merge pull request #24311 from owncloud/more-intelligent-update-detection
[stable9] Check for hash instead of file existence
2016-04-28 07:02:12 +02:00
Lukas Reschke 145810dc20 Check for hash instead of file existence
The previous logic did not necessarily trigger in every case. This logic is more error-resistant, the autoload_classmap.php file has a guaranteed different hash on 9.0.0, 9.0.1 and 9.0.2

Fixes https://github.com/owncloud/updater/issues/342
2016-04-27 15:46:24 +02:00
C Montero-Luque 795f321a19 9.0.2 RC1 2016-04-26 21:22:56 -04:00
C. Montero Luque d359311afc Merge pull request #24294 from owncloud/stable9-remove-pcntl-warning
Remove pcntl warning for 9.0.2
2016-04-26 21:19:30 -04:00
C. Montero Luque 1c23fa5d16 Merge pull request #24289 from owncloud/local-invalid-9
[9.0] error out if a local storage isn't setup correctly
2016-04-26 21:19:23 -04:00
C. Montero Luque fe753fe722 Merge branch 'stable9' into local-invalid-9 2016-04-26 16:46:23 -04:00
C. Montero Luque 62a35d3f7a Merge branch 'stable9' into stable9-remove-pcntl-warning 2016-04-26 16:46:12 -04:00
C. Montero Luque 98820f2af3 Merge pull request #24292 from owncloud/stable9-work-around-more-updater-issues
[stable9] Also exclude __apps
2016-04-26 14:51:09 -04:00
C. Montero Luque 4f5c03e310 Merge pull request #24261 from owncloud/scanner-propagate-9
[9.0] triger the propagator from the command line scanner
2016-04-26 14:50:02 -04:00
C. Montero Luque 36bba77575 Merge pull request #24282 from owncloud/backport-24262-stable9
[stable9] check whether index is set before using it
2016-04-26 14:49:51 -04:00
C. Montero Luque 438d451391 Merge pull request #24281 from owncloud/backport-disable-paste-zone
[stable9] Disable pastezone for jquery.fileupload
2016-04-26 14:49:38 -04:00
Robin Appelman 884c8215f8 add tests 2016-04-26 20:17:17 +02:00
Robin Appelman 06bfd58b2c error out if a local storage isn't setup correctly 2016-04-26 20:17:17 +02:00
Lukas Reschke 9a1688db7c Merge pull request #24278 from owncloud/stable9-more-sanity
[stable9] Don't write empty RewriteBase
2016-04-26 20:16:23 +02:00
Lukas Reschke 7ee7d091f2 Don't write empty RewriteBase
ownCloud may be configured to live at the root folder without a
trailing slash being specified. In this case manually set the
rewrite base to `/`
2016-04-26 20:13:20 +02:00
Victor Dubiniuk ffe561df62 Remove pcntl warning for now 2016-04-26 21:08:33 +03:00
Lukas Reschke 590ed3edda Also exclude __apps
Workaround for https://github.com/owncloud/updater/issues/331 for 9.0.2
2016-04-26 19:18:31 +02:00
Lukas Reschke a70d6f6a62 Disable pastezone for jquery.fileupload
jquery.fileupload offers the [`pastezone`](https://github.com/blueimp/jQuery-File-Upload/wiki/Options#pastezone) functionality. This functionality is enabled by default and if somebody copy-pastes something into Chrome it will automatically trigger an upload of the content to any configured jquery.fileupload element embedded in the JS.

This implementation triggers some problems:

1. The pastezone is defined globally by default (🙈). So if there are multiple fileupload's on a page (such as in the personal settings) then stuff is going to be uploaded to all embedded uploads.
2. Our server code is not able to parse the data. For example for uploads in the files app we expect a file name which is not specified => Just an error is thrown. You can reproduce this by taking a file into your clipboard and in Chrome then pressing <kbd>CTRL + V</kbd>.
3. When copy-pasting some string from MS Office on the personal page a temporary avatar with said content is created.

Considering that this is anyways was never working at all and causes bugs I've set the `pastezone` to `null`. This mens that upload via copy and paste will be disabled.

Lesson learned: Third-party JS libraries can have some weird details.
2016-04-26 14:37:40 +02:00
Arthur Schiwon e542bfd1d7 check whether index is set before using it 2016-04-26 14:36:24 +02:00
Thomas Müller 1087385cae Merge pull request #24259 from owncloud/stable9-mount-unique
[stable9] don't get the config for the same mount multiple times
2016-04-26 14:35:12 +02:00
Thomas Müller 80a31b7565 Merge pull request #24242 from owncloud/stable9-backport-24052
[stable9] Fix LDAP race conditions
2016-04-26 14:34:57 +02:00
Thomas Müller 6c861f71eb Merge pull request #24202 from owncloud/backport-stable9-23972
[9.0] Call private cache methods only for `OC\Files\Cache\Cache`
2016-04-25 23:10:51 +02:00
Thomas Müller bec8465902 Merge pull request #24250 from owncloud/scanner-locking-9
[9.0] add locks in the scanner to prevent multiple scanners running on the …
2016-04-25 23:03:20 +02:00
Thomas Müller b425a0e307 Merge pull request #24236 from owncloud/backport-24214-stable9
[stable9] on clone Connection, do not take over the existing LDAP resource
2016-04-25 23:03:05 +02:00
Robin Appelman 1397d9a93c triger the propagator from the command line scanner 2016-04-25 18:29:57 +02:00
Robin Appelman b375086c47 add test 2016-04-25 17:43:52 +02:00
Robin Appelman d436326e19 don't get the config for the same mount multiple times 2016-04-25 17:43:40 +02:00
Robin Appelman 51f5edd749 add locks in the scanner to prevent multiple scanners running on the same files 2016-04-25 15:46:04 +02:00
Daniel Jagszent 1aa8765177 [9.0] Call private cache methods only for OC\Files\Cache\Cache 2016-04-25 14:55:05 +02:00
Thomas Müller 5925ab99f8 Merge pull request #24241 from owncloud/backport-24240-add-missing-use-statement
Add missing use statement
2016-04-25 14:45:58 +02:00
Joas Schilling dd415b62f5 Add missing use statement 2016-04-25 13:34:20 +02:00
Morris Jobke 5b126cde48 Fix LDAP race conditions
* getFromCache is wrapped in isCached
* inbetween the two calls the cache entry hits it's TTL
* getFromCache returns null
* this fix only checkes if the returned value is null and
  return only non-null values
2016-04-25 13:32:40 +02:00
Arthur Schiwon 8ebde1e74d on clone Connection, do not take over the existing LDAP resource
For one, it solves potential conflicts when using the resource. For the
other, one on the login check (the only place where a clone happens
currently) we do not need to rebind after confirming the user's login
was successful.
2016-04-25 12:41:52 +02:00
Thomas Müller 57b9ae18f0 Merge pull request #24196 from owncloud/backport-24183-change-background-job-sort-order
[9.0] Change the sort order of background jobs to be DESC instead of ASC
2016-04-22 17:26:26 +02:00
Thomas Müller 98431b490e Merge pull request #24195 from owncloud/stable9-fs-initmountpoint-nulluser
[stable9] Throw NoUserException when attempting to init mount point for null user
2016-04-22 17:26:06 +02:00
Thomas Müller a6164472a3 Merge pull request #24180 from owncloud/backport-24145-limit-background-job-runtime-9.0
[9.0] Make sure that CLI cron doesn't run for ever, but makes use of the ne…
2016-04-22 17:23:53 +02:00
Thomas Müller d2b4bf7682 Merge pull request #24158 from owncloud/encryped-size-progation-9
[9.0] dont do optimized size propagation for encrypted files
2016-04-22 15:24:38 +02:00
Thomas Müller bbc720d2d3 Merge pull request #24192 from owncloud/create-personal-calendar-stable9
Personal calendar should be generated even if the birthday calendar a…
2016-04-22 14:23:09 +02:00
Joas Schilling 3e1dc64737 Change the sort order of background jobs to be DESC instead of ASC
In theory, if your instance ever creates more jobs then your system cron can
handle, the default background jobs get never executed anymore. Because
everytime when the joblist returns the next job it looks for the next ID,
however there is always a new next ID, so it will never wrap back to execute
the low IDs. But when we change the sort order to be DESC, we make sure that
these low IDs are always executed, before the system jumps back up to
execute the new IDs.
2016-04-22 14:11:26 +02:00
Vincent Petry 27d12f7a99 Throw NoUserException when attempting to init mount point for null user
In some scenarios initMountPoints is called with an empty user, and
also there is no user in the session.

In such cases, it is unsafe to let the code move on with an empty user.
2016-04-22 14:02:55 +02:00
Thomas Müller 711641e4a9 Personal calendar should be generated even if the birthday calendar already exists - fixes #24082 2016-04-22 13:03:31 +02:00
Thomas Müller 27d6852b3e Merge pull request #24131 from owncloud/dont-transfer-files-to-not-ready-user-stable9
[9.0] Introduce isReadyForUser and verify in file transfer ownership
2016-04-22 10:33:18 +02:00
Joas Schilling 9dc1c6c41f Make sure that CLI cron doesn't run for ever, but makes use of the next spawn 2016-04-22 09:56:18 +02:00
Thomas Müller 81b5df3236 Merge pull request #24172 from owncloud/stable9-certificate
[stable9] Ignore certificate file if it starts with file://
2016-04-22 09:36:32 +02:00
Thomas Müller 6365851672 Merge pull request #24153 from owncloud/stable9-remember-email-when-setting-expiration
[stable9] remember email when setting expiration date
2016-04-21 23:22:01 +02:00
Thomas Müller 7a2a6ce609 Merge pull request #24163 from owncloud/fix-birthday_calendar-acl-stable9
[stable9] Birthday calendar should never have write acl
2016-04-21 23:21:05 +02:00
Lukas Reschke 830a080f0e [stable9] Ignore certificate file if it starts with file:// 2016-04-21 19:00:27 +02:00
Thomas Müller 4e50dd87d5 Birthday calendar should never have write acl - fixes #24154 2016-04-21 16:44:06 +02:00
Thomas Müller ed746a7ec2 Merge pull request #24112 from owncloud/backport-24111-chunking-users-in-background-jobs
[9.0] Chunk the users correctly in the trashbin and versions background job
2016-04-21 16:21:12 +02:00
Robin Appelman 74ed0a8aba dont do optimized size propagation for encrypted files 2016-04-21 14:24:53 +02:00
Robin Appelman 440cf335ad Add unit tests for shared size propagation with encryption 2016-04-21 14:24:49 +02:00
Christoph Wurst e33adcf0df remember email when setting expiration date
fixes #22947
2016-04-21 13:01:17 +02:00
Thomas Müller 68f62ad50a Merge pull request #24129 from owncloud/stable9_24098
[stable9] When the scanner detects a file is changed clear checksum
2016-04-21 12:56:04 +02:00
Thomas Müller 80993b245b Merge pull request #24134 from owncloud/fix-problems-caused-by-updater
[stable9] Add repair step for updater issues
2016-04-21 12:55:42 +02:00
Thomas Müller a4a800fe30 Merge pull request #24136 from owncloud/backport-24135
[stable9] Write .htaccess also from CLI
2016-04-21 12:51:34 +02:00
Lukas Reschke 572ff9c9fe Write .htaccess also from CLI
The new updater as shipped with ownCloud 9.0.x invokes `occ` via `shell_exec`. This means that the `\OC::$CLI` code is used when updating.

This removes the manual `.htaccess` modifications, effectively leading to the fact that URLs without index.php in it stop working. This also affects share URLs which could be considered a rather serious regression.

- User installs 9.0.0 via web
- User shares /s/1234
- User updates to 9.0.1 via ownCloud updater
- Link to /s/1234 is broken, /index.php/s/1234 works
2016-04-20 22:25:02 +02:00
Lukas Reschke 2d373416d8 Add repair step for updater issues
The updater as shipped with ownCloud =< 9.0.1 has several bugs leading to a not properly executed update. For example the third-party changes are not copied.

This pull request:

1. Ships the third-party files changed since ownCloud 9.0.1 in the resources folder. On update the files are replaced. (https://github.com/owncloud/updater/issues/316)
2. Adds updater/* and _oc_upgrade/* as an exemption to the code integrity checker since the updater is updating in the wrong order. (https://github.com/owncloud/updater/issues/318)
2016-04-20 21:40:53 +02:00
Thomas Müller 22f9a12c74 Merge pull request #24108 from owncloud/fix_24032
Allow setting can edit permissions on federated shares in webUI
2016-04-20 20:42:03 +02:00
Thomas Müller fcebd32e37 Merge pull request #24099 from owncloud/fix_23632_9.0
[stable9] init users mount point before recovery
2016-04-20 20:41:35 +02:00
Thomas Müller e2a274fdd3 Merge pull request #23831 from owncloud/backport-23511
[9.0] sidebar click modification
2016-04-20 20:41:03 +02:00
Thomas Müller df544e8dbe Introduce isReadyForUser and verify in file transfer ownership - fixes #23786 2016-04-20 20:25:22 +02:00
Thomas Müller fdab395925 Merge pull request #23576 from owncloud/background-scan-unscanned-9
[9.0] handle completely unscanned storages in the background scanner
2016-04-20 20:22:07 +02:00
Roeland Jago Douma 2296552104 When the scanner detects a file is changed clear checksum
Fixes #23782 and #23783

If the file scanner detects a changed file we clear the checksum while
we update the cache.

* Unit test added
2016-04-20 19:09:26 +02:00
Thomas Müller 98647b8fe4 Merge pull request #24119 from owncloud/fix_24095_9.0
[stable9] preserve information if it is a rename operation or not
2016-04-20 13:47:19 +02:00
Björn Schießle ccddb18cab preserve information if it is a rename operation or not 2016-04-20 12:34:20 +02:00
Roeland Jago Douma 466b7dc05f Allow setting can edit permissions on federated shares in webUI
Fixes #24032

Since we have a slightly different UI for the federated shares our
normal logic fails us. This makes sure to add the correct permissions
when it is a federated share.
2016-04-20 11:14:32 +02:00
Joas Schilling 21970c1b19 Chunk the users correctly in the trashbin and versions background job 2016-04-20 10:39:14 +02:00
Björn Schießle 288b4e21d0 we need to initialize the mount points of the given user before we recover
access to his files
2016-04-19 17:17:39 +02:00
Thomas Müller bd19bbb926 Merge pull request #23924 from josh4trunks/stable9
Backport  #23752 to stable9
2016-04-13 14:11:37 +02:00
Thomas Müller 6f5d30b8ee Merge pull request #23941 from owncloud/stable9-exclude-autoload-static
Exclude autoload_static.php (#23935)
2016-04-13 00:32:49 +02:00
Thomas Müller 57c08cfd77 Fix the exclude path 2016-04-12 16:26:25 +02:00
Lukas Reschke 6e8adea2ab Exclude autoload_static.php (#23935)
Composer 1.1 has since yesterday a new performance improvement that will be automatically used for PHP >= 5.6, however this file is incompatible with older PHP versions and thus we need to exclude it from the checks.

Note that this performance improvement is only used on >= 5.6 so ownCloud will still run fine on older PHP versions as well.
2016-04-12 14:37:10 +02:00
Thomas Müller 4f5d1e9f60 Merge pull request #23930 from owncloud/stable9-backport-23901
[stable9] Catch the AutoloadNotAllowedException also for legacy jobs
2016-04-12 14:27:17 +02:00
Thomas Müller a87d961d01 Merge pull request #23784 from owncloud/stable9-backport-23304
[stable9] Fix PHP memory leak in file_get_contents()
2016-04-12 13:11:28 +02:00
Morris Jobke aecfcf64c4 Catch the AutoloadNotAllowedException also for legacy jobs
* same as #18839 for legacy jobs
* avoids spamming the log with useless entries
2016-04-12 09:16:44 +02:00
Joshua Ruehlig 5408b16728 Backport #23752 to stable9
Fixes orientation of thumbnails and gallery view of JPG's with exif rotation.
2016-04-11 09:40:41 -07:00
Thomas Müller 3e0f106876 Merge pull request #23840 from owncloud/backport-23839-sabre-dav-3.0.9
Update sabre/dav to 3.0.9 on stable9
2016-04-11 14:03:34 +02:00
Joas Schilling 3587531331 Update sabre/dav to 3.0.9 onb stable9 2016-04-11 11:28:23 +02:00
Thomas Müller 847834ee73 Merge pull request #23897 from owncloud/add-VCFExportPlugin-stable9
Adding VCFExportPlugin
2016-04-11 10:17:34 +02:00
Thomas Müller 1d4d45e91f Adding VCFExportPlugin 2016-04-10 20:41:44 +02:00
Joas Schilling d2c11a35b7 Correctly return an empty string for empty files 2016-04-08 15:08:52 +02:00
Thomas Müller c929c4db84 Merge pull request #23801 from owncloud/fix-23496-master-stable9
[stable9] Avoid fatal php error dring cron execution
2016-04-08 14:50:32 +02:00
Thomas Müller 0a79241a0a Merge pull request #23837 from owncloud/stable9-handle-null-in-usermanager
[stable9] Prevent null to be passed into the closure of callForAllUsers
2016-04-08 14:50:15 +02:00
Thomas Müller 8b87837a4d Prevent null to be passed into the closure of callForAllUsers 2016-04-07 14:11:48 +02:00
Erik Pellikka 35d044c121 sidebar click modification 2016-04-07 05:07:15 -04:00
C Montero-Luque 54fc92c372 9.0.1 2016-04-06 17:30:21 -04:00
Thomas Müller 76342fa27d Merge pull request #23572 from owncloud/stabe9-release-notes
[Stable9] release notes
2016-04-06 20:53:59 +02:00
Joas Schilling c43713515b Remove duplicated message 2016-04-06 15:51:25 +02:00
Joas Schilling e5bec54e4e Make the version a string 2016-04-06 15:41:25 +02:00
Victor Dubiniuk b87b27cbd9 Show hint in CLI 2016-04-06 15:34:16 +02:00
Thomas Müller dca6869a89 Merge pull request #23574 from owncloud/sabre-plugin-browser-error-page-stable9
[stable9] Sabre plugin browser error page
2016-04-06 15:32:12 +02:00
C. Montero Luque 1092de539f Merge pull request #23799 from owncloud/dont-collide-with-php-internals
[stable9] Use static method
2016-04-06 09:20:19 -04:00
C. Montero Luque 6e55f93836 Merge branch 'stable9' into dont-collide-with-php-internals 2016-04-06 09:20:11 -04:00
Thomas Müller fa7f1874dd Merge pull request #23805 from owncloud/backport-of-#23760
[stable9] Fix conditional check in MySQL setup
2016-04-06 14:28:57 +02:00
Victor Dubiniuk cfd8cc3fd8 Show release notes 2016-04-05 17:13:31 +03:00
Victor Dubiniuk 118c39d472 Show cli notice for big installations 2016-04-05 17:13:31 +03:00
Victor Dubiniuk b05269826a Add releasenotes class 2016-04-05 17:13:31 +03:00
Daniel Hansson cff3122a37 [stable9] Fix conditional check in MySQL setup
Backport of #23760

Fix conditional check in MySQL setup.
2016-04-05 15:16:02 +02:00
Thomas Müller 19541dd1ce fixes #23496 2016-04-05 14:01:23 +02:00
Lukas Reschke a50619200c Use static method
This is ugly as hell. But if we directly access `\OCP\IUserSession::getUser` here PHP throws a segfault on some servers:

```
gdb /usr/sbin/apache2 --batch --quiet -ex "run -f /etc/apache2/apache2.conf -DNO_DETACH -DONE_PROCESS -DDEBUG $defines" -ex "quit"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
warning: the debug information found in "/usr/lib/debug//usr/lib/php5/20121212/mysql.so" does not match "/usr/lib/php5/20121212/mysql.so" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug/usr/lib/php5/20121212/mysql.so" does not match "/usr/lib/php5/20121212/mysql.so" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug//usr/lib/php5/20121212/mysqli.so" does not match "/usr/lib/php5/20121212/mysqli.so" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug/usr/lib/php5/20121212/mysqli.so" does not match "/usr/lib/php5/20121212/mysqli.so" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug//usr/lib/php5/20121212/pdo_mysql.so" does not match "/usr/lib/php5/20121212/pdo_mysql.so" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug/usr/lib/php5/20121212/pdo_mysql.so" does not match "/usr/lib/php5/20121212/pdo_mysql.so" (CRC mismatch).

[New Thread 0x7fffdd206700 (LWP 28386)]
[Thread 0x7fffdd206700 (LWP 28386) exited]
[New Thread 0x7fffdd206700 (LWP 28387)]
[New Thread 0x7fffdc975700 (LWP 28388)]

Program received signal SIGSEGV, Segmentation fault.
zend_parse_parameters (num_args=2, type_spec=type_spec@entry=0x7ffff3f85227 "s|s") at /build/php5-pO28mL/php5-5.5.9+dfsg/Zend/zend_API.c:923
923 /build/php5-pO28mL/php5-5.5.9+dfsg/Zend/zend_API.c: No such file or directory.
A debugging session is active.

    Inferior 1 [process 28382] will be killed.

Quit anyway? (y or n) [answered Y; input not from terminal]
```

I'm still struggling to get a minimal example of this (also considering that it doesn't happen on every system :party). Anyways, it's a functional workaround until I determined the root cause… (also given the fact that patches may never be backported to distributions 🙈
2016-04-05 12:45:46 +02:00
Morris Jobke 7fdac35654 Fix PHP memory leak in file_get_contents()
* ref https://bugs.php.net/bug.php?id=61961
* ref https://github.com/owncloud/core/issues/20261#issuecomment-180000256
* code is based on the proposal of @chriseqipe
* fixes #20261
2016-04-04 18:14:39 +02:00
Thomas Müller 277c9f4a03 Merge pull request #23764 from owncloud/backport-23743-transfer-ownership
[9.0] Unmount the share before deleting it, so we don't try to use it later on
2016-04-04 16:48:29 +02:00
Thomas Müller 4da4163d14 Merge pull request #23541 from owncloud/backport-23515-menu-language
[9.0] Fix the translations of the User menu
2016-04-04 16:47:39 +02:00
Morris Jobke 85a0dd3689 [stable9] Read available l10n files also from theme folder
* Read available l10n files also from theme folder

The old behaviour was that only languages could be used for an app
that are already present in the apps/$app/l10n folder. If there is
a themed l10n that is not present in the apps default l10n folder
the language could not be used and the texts are not translated.

With this change this is possible and also the l10n files are
loaded even if the default l10n doesn't contain the l10n file.

* Inject server root - allows proper testing and separation of concerns
2016-04-04 13:29:04 +02:00
Thomas Müller f8b1e2cca1 Merge pull request #23723 from owncloud/stable9-also-hide-password-for-private-key-password-update
[stable9] Also replace password in updatePrivateKeyPassword
2016-04-04 10:54:47 +02:00
Thomas Müller 501cb1a147 Merge pull request #23735 from owncloud/stable9-core-globalajaxerrorwhengoingaway
[stable9] Detect user navigating away, don't interpret as ajax error
2016-04-04 10:54:34 +02:00
Joas Schilling dd5f38e351 Inject the Mount Manager 2016-04-04 09:10:43 +02:00
Joas Schilling d857f7caf2 Unmount the share before deleting it, so we don't try to use it later on 2016-04-04 09:10:33 +02:00
C Montero-Luque 6774f60240 9.0.1 RC2 2016-04-01 23:00:23 +02:00
Vincent Petry c58e96e639 Adjust core unit tests for unload/reload cases 2016-04-01 16:55:55 +02:00
Vincent Petry 51ff3e7443 Stronger fix for navigate away detection 2016-04-01 16:55:47 +02:00
Vincent Petry d8261d41cc Firefox returns 303 on cross-domain redirect
Added 303 to catch SSO cross-domain redirect in Firefox.
2016-04-01 16:55:40 +02:00
Vincent Petry 752e6676e1 Detect user navigating away, don't interpret as ajax error
Whenever a user navigates away, all ajax calls will fail with the same
result like a cross-domain redirect (SSO). To distinguish these cases,
we need to detect whether the error is a result of the user navigating
away. For this, we introduce a new flag that will be set in
"beforeunload".

Additional handling was required for false positives in case "beforeunload" is
used (ex: cancelled upload) and the user cancelled the navigation.
2016-04-01 16:55:34 +02:00
Lukas Reschke 78ee14dad5 Also replace password in updatePrivateKeyPassword
Fixes https://github.com/owncloud/core/issues/23717
2016-04-01 11:06:31 +02:00
Thomas Müller 9c800f62dd Merge pull request #23590 from owncloud/fix-themes-for-stable9
[stable9] Fix for themes with .jpg backgrounds
2016-04-01 11:02:42 +02:00
Thomas Müller 059df32542 Merge pull request #23684 from owncloud/stable9-backport-23676
[stable9] Properly handle return values of OC_App::getAppInfo()
2016-04-01 11:02:09 +02:00
Morris Jobke 43579e784f Properly handle return values of OC_App::getAppInfo()
* fixes #23668
2016-04-01 09:16:47 +02:00
Thomas Müller 193a33a8ad Merge pull request #23709 from owncloud/stable9-make-sure-that-encrypted-version-is-set
[stable9] Make sure that the encrypted version is set
2016-04-01 09:08:50 +02:00
Thomas Müller b84746ce36 Merge pull request #23710 from owncloud/fix_encryption_versions_on_external_storages_9.0
[stable9] fix creation of versions of encrypted files on external storages
2016-04-01 09:08:09 +02:00
Bjoern Schiessle 2cb45e71ea fix creation of versions of encrypted files on external storages
in order to create a 1:1 copy of a file if a version gets created
we need to store this information on copyBetweenStorage(). This
allows us to by-pass the encryption wrapper if we read the source file.
2016-03-31 23:18:45 +02:00
Thomas Müller e3cc82df38 Merge pull request #23518 from owncloud/stable9-gdrive-stream-download
[stable9] GDrive stream download with RetryWrapper
2016-03-31 23:14:49 +02:00
Frank Karlitschek 05fd4f2da0 Merge pull request #23522 from owncloud/stable9-dropbox-stream-download
[stable9] Dropbox stream download with RetryWrapper
2016-03-31 21:18:29 +02:00
Lukas Reschke d16553d2d8 Make sure that the encrypted version is set
The code path called when using external storage with WebDAV is using `\OC\Files\Storage\Wrapper\Encryption::getMetaData` which did not contain the actual encrypted version inside the cache entry version. This lead to the following:

1. User uploaded a file
2. File is created and `\OC\Files\Storage\Wrapper\Encryption::getMetaData` is called. It has an empty `encryptedVersion` but sets `encrypted` to either `true` or `false`.
3. The call when updating the file cache will use the old version.
2016-03-31 20:39:35 +02:00
Thomas Müller 8453073fdb Merge pull request #23689 from owncloud/revert-23629
Revert "Explicitly add the current principal to the acl in case of gr…
2016-03-31 12:32:34 +02:00
Thomas Müller b6fb3148c2 Revert "Explicitly add the current principal to the acl in case of group sharing"
This reverts commit 52f4acf23d.
2016-03-31 11:22:47 +02:00
Thomas Müller cfe0a6450e Merge pull request #23673 from owncloud/stable9-fix-sftp-retry-wrapper
[stable9] Use RetryWrapper for SFTP storage
2016-03-31 11:12:29 +02:00
Thomas Müller 5f5e13351a Merge pull request #23552 from owncloud/fix-group-sharing-for-v1-caldav-and-carddav-stable9
Fix group sharing for v1 caldav and carddav stable9
2016-03-31 11:12:12 +02:00
Thomas Müller ef8b75960c Handle group shares of addressbooks on v1 as well ... now FINALLY .... 2016-03-31 09:07:36 +02:00
Thomas Müller f28817aed5 Fix acls for calendar objects and cards - fixes #23273 2016-03-31 09:07:36 +02:00
Thomas Müller cb300d164e Return proper current-user-principal on v1 endpoints - fixes #23306 2016-03-31 09:05:39 +02:00
Thomas Müller e664e582fb Fix group shares on v1 caldav and carddav - fixes #23328 2016-03-31 09:05:39 +02:00
Thomas Müller 9bd5fd23e7 Merge pull request #23629 from owncloud/fix-group-sharing-access-stable9
Explicitly add the current principal to the acl in case of group sharing
2016-03-31 09:04:07 +02:00
Thomas Müller 835e24826d Merge pull request #23640 from owncloud/backport-23545-lock-mountpoint-on-removal
[9.0] Lock the mountpoint while removing
2016-03-31 08:59:28 +02:00
Thomas Müller 8d6aff69a8 Merge pull request #23659 from owncloud/backport-23654-xcache-availablility
[9.0] xcache.var_size with 64M should evaluate to isAvailable
2016-03-31 08:58:18 +02:00
Joas Schilling 7c7e079a36 Lock the mountpoint while removing 2016-03-30 23:50:10 +02:00
Lukas Reschke 1f7b037a59 Use RetryWrapper for SFTP storage
Equivalent to https://github.com/owncloud/core/pull/23442

Required for making encryption work with external storage reliable.
2016-03-30 23:01:42 +02:00
Vincent Petry 99843c06f9 GDrive stream download with RetryWrapper 2016-03-30 18:43:01 +02:00
Thomas Müller ed88f7b8b5 Merge pull request #23664 from owncloud/stable9-share-displayownerfix
[stable9] Fix displaying owner before share icon in file list
2016-03-30 18:42:49 +02:00
Thomas Müller 03f89d8242 Merge pull request #23662 from owncloud/make-google-drive-drumpf-again
[stable9] Use the shipped cacerts.pem instead of the global one
2016-03-30 18:41:36 +02:00
Vincent Petry f981661195 Fix displaying owner before share icon in file list
Initial display of owner was missing
2016-03-30 18:10:56 +02:00
Thomas Müller 424c2b8263 Merge pull request #23652 from owncloud/stable9_23651
[Stable 9] Non moveable mount points should always be UPDATE+DELETE shareable
2016-03-30 17:01:41 +02:00
Thomas Müller 2ab503f70a Merge pull request #23641 from owncloud/avatar-remove-9
[9.0] only remove avatars from the folder we store them in
2016-03-30 17:00:53 +02:00
Thomas Müller cdff098357 Merge pull request #23618 from owncloud/backport-23543-activity-emails-always-short
Backport 23543 activity emails always short
2016-03-30 16:59:22 +02:00
Lukas Reschke 57596e1415 Use the shipped cacerts.pem instead of the global one
The one we ship may cause problems since Equifax is not included anymore (SHA-1 certs) are deprecated. We should just be consistent here and also use the certificate file which is used by the other calls in the library.
2016-03-30 16:55:26 +02:00
Joas Schilling dd8d1c2b94 xcache.var_size with 64M should evaluate to isAvailable 2016-03-30 16:43:28 +02:00
Roeland Jago Douma 2660cf80c3 Non moveable mount points should always be UPDATE+DELETE shareable
Fixes #23536

The new sharing code is much stricter in checking permissions. However
for non moveable mounts the permissions UPDATE+DELETE are not reported
on the mount point.

This is just a quick fix.

* Updated unit tests
2016-03-30 13:42:08 +02:00
Robin Appelman 3cadc45ca5 only remove avatars from the folder we store them in 2016-03-30 10:25:37 +02:00
Thomas Müller 8c9842fbd9 Fix unit test 2016-03-30 10:01:17 +02:00
Thomas Müller 456035a750 Merge pull request #23631 from owncloud/stable9-upload-white
[stable9] correct form of upload-white icon to be same as upload icon
2016-03-30 09:09:20 +02:00
C Montero-Luque fb77aa2e62 9.0.1 RC1 2016-03-29 22:03:08 +02:00
Jan-Christoph Borchardt 3b4999c835 correct form of upload-white icon to be same as upload icon 2016-03-29 19:18:54 +02:00
Thomas Müller 52f4acf23d Explicitly add the current principal to the acl in case of group sharing 2016-03-29 19:09:31 +02:00
Thomas Müller 6b7c694a42 Merge pull request #23582 from owncloud/avatar-save-failure-9
[9.0] dont die when we cant save the resized avatar, log instead
2016-03-29 18:49:22 +02:00
Thomas Müller 605abf9088 Merge pull request #23570 from owncloud/stable9-dav-sharetypes-remote
[stable9] Return remote shares in oc:share-types Webdav property
2016-03-29 18:41:25 +02:00
Joas Schilling b5922e467a Allow the activity app to set the current user when sending emails 2016-03-29 09:12:12 +02:00
Joas Schilling 1733b6e8c8 We are only formatting an object when it's not null 2016-03-29 09:11:48 +02:00
Daniel Hansson c066882309 [stable9] Fix for themes with .jpg backgrounds
Without this all themes with .jpg or .jpeg are broken.
2016-03-26 15:10:04 +01:00
Robin Appelman b456035aa7 dont die when we cant save the resized avatar, log instead 2016-03-25 14:13:17 +01:00
Thomas Müller 03f461591e Merge pull request #23550 from owncloud/backport-23542
[stable9] getAppPath can return false
2016-03-24 22:44:31 +01:00
Robin Appelman 4f78cb1e3d handle completely unscanned storages in the background scanner 2016-03-24 19:41:03 +01:00
Lukas Reschke 1f4e824d0b Add magical regex to catch browsers 2016-03-24 19:03:21 +01:00
Thomas Müller 7a6d4a3287 In case of exception we return an html page in case the client is a browser 2016-03-24 19:03:21 +01:00
Vincent Petry 1f4738c372 Return remote shares in oc:share-types Webdav property
Fixes web UI to properly display the share status icon when an outgoing
remote share exists
2016-03-24 17:22:09 +01:00
Thomas Müller af7c34d9a6 Merge pull request #23401 from owncloud/backport-23282-stable9
[stable9] fix writing to cache when fallback server should be used immediately
2016-03-24 13:30:44 +01:00
Thomas Müller 515ebc02b0 Merge pull request #23539 from owncloud/backport-23530
[stable9] Backport 23530
2016-03-24 13:06:00 +01:00
Lukas Reschke 0bb7644150 getAppPath can return false
Fixes https://github.com/owncloud/core/issues/23533
2016-03-24 12:22:42 +01:00
Thomas Müller c9eadb7b77 Merge pull request #23520 from owncloud/node-get-from-cache-9
[9.0] Query the cache when checking if a node exists
2016-03-24 11:58:48 +01:00
Joas Schilling a381cbc241 Fix the translations of the User menu 2016-03-24 09:17:17 +01:00
Lukas Reschke 2139130ec8 Check if request is sent from official ownCloud client
There are authentication backends such as Shibboleth that do send no Basic Auth credentials for DAV requests. This means that the ownCloud DAV backend would consider these requests coming from an untrusted source and require higher levels of security checks. (e.g. a CSRF check)

While an elegant solution would rely on authenticating via token (so that one can properly ensure that the request came indeed from a trusted client) this is a okay'ish workaround for this problem until we have something more reliable in the authentication code.
2016-03-24 09:00:35 +01:00
Vincent Petry 195cf4111e Dropbox stream download with RetryWrapper 2016-03-23 18:07:13 +01:00
Vincent Petry 443d72ee87 Fix dropbox storage to not store the whole file in memory
Since the library can only store the full response in memory on
download, we use an alternate client lib and set the correct headers to
be able to stream the content to a temp file.
2016-03-23 18:07:13 +01:00
Robin Appelman 5a630c6a0e properly use fileinfo objects 2016-03-23 17:13:32 +01:00
Robin Appelman 24670b4218 set watch policy in test 2016-03-23 17:13:28 +01:00
Robin Appelman c864420d6c improve reuse in getUserFolder 2016-03-23 17:13:24 +01:00
Robin Appelman f77ce8829c pass the fileinfo to the node if available 2016-03-23 17:13:21 +01:00
Robin Appelman 70a5233f69 Query the cache when checking if a node exists 2016-03-23 17:13:17 +01:00
Thomas Müller 5ca10cf6f8 Merge pull request #23308 from owncloud/smb-not-available-9
[9.0] handle connection errors as storage not available in smb
2016-03-23 11:03:15 +01:00
Thomas Müller 0009bf244b Merge pull request #23464 from owncloud/stable9-backport-23443
[stable9] Log more information by default
2016-03-23 09:13:10 +01:00
Thomas Müller 3d0e4bdc82 Merge pull request #23493 from owncloud/stable9_22679
[Stable 9] When the Share API is disabled do not return shares
2016-03-23 08:07:06 +01:00
Thomas Müller 6edf403f3f Merge pull request #23475 from owncloud/stable9-RealRancor-exclude_lost_and_found
[stable9] Exclude lost+found dir in integrity check
2016-03-23 08:06:36 +01:00
Lukas Reschke 43516ebef9 Only use the user session if ownCloud is already installed
When installing ownCloud with autotest and MySQL some log entries may be created which will invoke the logging class. IUserSession has a dependency on the database which will make the installation fail => 💣
2016-03-22 22:27:35 +01:00
C Montero-Luque 53f95373ba 9.0.1 beta 2016-03-22 17:01:51 -04:00
Thomas Müller a9c13dc58a Merge pull request #23361 from owncloud/stable9-gdrive-chunkupload
[stable9] Chunk upload for GDrive
2016-03-22 21:27:14 +01:00
Roeland Jago Douma 7fb32f8358 When the Share API is disabled do not return shares
Fixes #22668

Block everything in the OCS Share API
2016-03-22 19:51:01 +01:00
Thomas Müller 656c7f38b6 Merge pull request #23478 from owncloud/backport-l10n
Backport translations to stable9
2016-03-22 17:44:59 +01:00
Thomas Müller 97dc57a143 Merge pull request #23456 from owncloud/backport-23329-stable9
[stable9] Avatar must be saved after login is done and external storages set up…
2016-03-22 17:40:48 +01:00
Thomas Müller 3b98e8c56d Merge pull request #23467 from owncloud/early-creation-of-birthday-calendar-stable9
Create the contact birthday calendar right away as soon as the comman…
2016-03-22 17:28:11 +01:00
Thomas Müller 1a100c69ba Merge pull request #23473 from owncloud/stable9_23398
[stable 9]  Allow blocking of group sharing
2016-03-22 17:16:23 +01:00
Thomas Müller 03fcbc8ceb Merge pull request #23479 from owncloud/backport-23461-activity-without-sharing
[9.0] Fix "AutoloadNotAllowedException" when files_sharing is disabled
2016-03-22 17:15:24 +01:00
Thomas Müller 49b5b1b08c Merge pull request #23447 from owncloud/smb-permissions-9
[9.0] properly use smb permissions
2016-03-22 17:12:41 +01:00
Thomas Müller 2da2f26e56 Merge pull request #23466 from owncloud/backport-23448-exception-on-enabling-default-app
[9.0] Do not abort with an exception when a default app can not be enabled
2016-03-22 16:26:06 +01:00
Thomas Müller d60f39e4f2 Merge pull request #23442 from owncloud/fix_22286_9.0
[stable9] apply retry wrapper to make sure that we always read/write a complete block
2016-03-22 16:23:54 +01:00
Thomas Müller 329e72a286 Merge pull request #23480 from owncloud/backport-23404-stable9
[stable9] adjust PrincipalUri as returned from Sabre to effective username
2016-03-22 16:20:22 +01:00
Arthur Schiwon 90a2be58f8 adjust PrincipalUri as returned from Sabre to effective username
backport of #23404
2016-03-22 15:24:01 +01:00
Thomas Müller 9b2fdc5358 Merge pull request #23359 from owncloud/streams-0.4-9
[9.0] Update icewind/streams and icewind/smb
2016-03-22 15:10:36 +01:00
Joas Schilling 0d9edd80f1 Fix "AutoloadNotAllowedException" when files_sharing is disabled 2016-03-22 15:01:52 +01:00
Joas Schilling 4fdb2254a4 Backport translations to stable9 2016-03-22 13:10:33 +01:00
RealRancor b3ead7568d Exclude lost+found dir in integrity check 2016-03-22 12:59:18 +01:00
Roeland Jago Douma f8f292ab16 Fix js strings if group sharing is disabled 2016-03-22 12:37:45 +01:00
Roeland Jago Douma c7f1b82b4b Respect disabled group sharing in sharee endpoint
* Fix tests
2016-03-22 12:37:34 +01:00
Roeland Jago Douma aa75cfcf14 Block group sharing in API and in share manager
* Fix tests
2016-03-22 12:37:20 +01:00
Roeland Jago Douma e9fc791e9f Add config to sharemanager 2016-03-22 12:37:08 +01:00
Roeland Jago Douma 4d8c81a2d9 Add allow sharing with groups checkbox to admin page 2016-03-22 12:36:59 +01:00
Thomas Müller ad852ca24a Create the contact birthday calendar right away as soon as the command is executed once - fixes #23203 2016-03-22 10:31:53 +01:00
Joas Schilling 50e94db4d5 Do not abort with an exception when a default app can not be enabled 2016-03-22 10:28:59 +01:00
Thomas Müller ae2c207b6e Merge pull request #23453 from owncloud/generate-birthdays-on-upgrade-stable9
Generate birthdays on upgrade stable9
2016-03-22 10:17:41 +01:00
Thomas Müller f5fe2b4d08 Merge pull request #23462 from owncloud/backport-23422-comments-activities
[9.0] Add comment icons and "You commented" translations
2016-03-22 10:05:25 +01:00
Robin Appelman 77afc18b82 properly use smb permissions 2016-03-22 09:57:38 +01:00
Vincent Petry 3a955ca43c Adjusted 3rdparty submodule commit 2016-03-22 09:46:32 +01:00
Robin Appelman 204288f4a5 update icewind/smb to 1.0.8 2016-03-22 09:46:32 +01:00
Robin Appelman 8af75c734a update icewind/streams to 0.4.0 and icewind/smb to 1.0.7 in files_external 2016-03-22 09:46:32 +01:00
Lukas Reschke 177ad39854 Log more information by default
This modifies the logger to add the following logging information by default:

- Request Method
- Request URL
- Current user
2016-03-22 09:46:02 +01:00
Joas Schilling d59860aacd Add comment icons and "You commented" translations 2016-03-22 08:55:32 +01:00
Arthur Schiwon f6b6813f5f Avatar must be saved after login is done and external storages set up properly, fixes #21555 2016-03-21 22:20:50 +01:00
Thomas Müller da95db78d0 Merge pull request #23436 from owncloud/backport-23388-infinite-cronjob
[9.0] Do not create a new job when it failed to connect atm
2016-03-21 18:05:30 +01:00
Thomas Müller 3d19a179c7 Merge pull request #23383 from owncloud/backport-use-raw-path
[stable9] Use raw PATH_INFO
2016-03-21 18:03:10 +01:00
Thomas Müller 3f4be066f9 Generate birthdays on upgrade from 8.2 as well 2016-03-21 17:53:03 +01:00
Thomas Müller 419adc8d50 Birthday events are generated on upgrade 2016-03-21 17:52:59 +01:00
Bjoern Schiessle 627724bc6a apply retry wrapper to make sure that we always read/write a complete block 2016-03-21 15:18:13 +01:00
Thomas Müller b3fef39006 Merge pull request #23307 from owncloud/stable9-update-sabre3.0.8-fseek-only
[stable9] Update 3rdparty submodule for sabre 3.0.8 update
2016-03-21 14:31:18 +01:00
Thomas Müller 3d9187e231 Merge pull request #23390 from owncloud/stable9-share-keepoptioncheckboxinblocks
[stable9] Keep share checkboxes together
2016-03-21 14:15:40 +01:00
Joas Schilling 1a239b2f0d Do not create a new job when it failed to connect atm 2016-03-21 14:00:29 +01:00
Thomas Müller 6afac05937 Merge pull request #23389 from owncloud/backport-23287-fed-share-action-links
[9.0] Make sure to append the web root as per doc
2016-03-21 11:16:15 +01:00
Thomas Müller 571de654cd Merge pull request #23378 from owncloud/stable9-backport-23370
[stable9] Update avatar on username change if avatar is set
2016-03-21 09:49:32 +01:00
Thomas Müller 546a0929a6 Merge pull request #23163 from owncloud/stable9-wording
[stable9] Adjust wording a bit
2016-03-21 09:48:49 +01:00
Thomas Müller fefaa1fd87 Merge pull request #23293 from owncloud/backport-23108
[stable9] Ensure that stored version is at least 1 for cross-storage copy
2016-03-21 09:48:15 +01:00
Thomas Müller ce0f68c7ce Merge pull request #23382 from owncloud/backport-fix-htaccess-issues
[stable9] Write .htaccess update only if not already written
2016-03-21 09:42:57 +01:00
Thomas Müller 660c0da0a9 Merge pull request #23384 from owncloud/stable9-dav-sharesproperty
[stable9] Add webdav share-types property to fix favorites/tags share status icon
2016-03-21 09:42:36 +01:00
Thomas Müller 179ac2b98c Merge pull request #23387 from owncloud/stable9-systemtags-create-same-prefix
[stable9] Allow creating tags where another one with same prefix exists
2016-03-21 09:42:18 +01:00
Arthur Schiwon d282affec2 fix writing to cache when fallback server should be used immediately 2016-03-18 20:34:23 +01:00
Vincent Petry 8ef8be6be5 Keep share checkboxes together
- removed leading spaces before markup which can affect rendering in
  some cases
- added shareOption CSS class to group and keep share option checkbox +
  label
- moved ".showCruds" arrow into the matching shareOption to keep the
  arrow together with the checkbox
2016-03-18 14:16:26 +01:00
Joas Schilling 064e13511f Make sure to append the web root as per doc 2016-03-18 13:36:51 +01:00
Vincent Petry a7dfc70e2e Allow creating tags where another one with same prefix exists
When creating a new entry, compare the full tag name and not only the
prefix.
2016-03-18 12:32:29 +01:00
Roeland Jago Douma df056e1299 Remove duplicated copyright 2016-03-18 11:38:02 +01:00
Roeland Jago Douma 26deb0a897 Add intergration tests
Intergration tests to ensure the share-types property is set correctly.

* Unshared item
* Shared with user
* Shared with group
* Shared by link
* Shared with user & group & link
2016-03-18 11:37:56 +01:00
Vincent Petry 3c77311397 Display share status info in favorite list
Returns the shareTypes share status info to the favorites file list.
2016-03-18 11:36:43 +01:00
Vincent Petry fb705fa305 Add webdav property for share info in PROPFIND response 2016-03-18 11:36:39 +01:00
Vincent Petry c513317c49 Update 3rdparty submodule for sabre 3.0.8 update 2016-03-18 11:03:41 +01:00
Lukas Reschke d9b632c001 Use raw PATH_INFO
PATH_INFO will be empty at this point and thus the logic in base.php did not catch this. Changing this to "getRawPathInfo" will ensure that the path info is properly read.

Fixes https://github.com/owncloud/core/issues/23199
2016-03-18 10:30:26 +01:00
Lukas Reschke 1fdf790c8f Write .htaccess update only if not already written
The ownCloud update routine also runs the "updateHtaccess" code in case only an application gets updated. This leads to having entries multiple time in the .htaccess file leading to unpredictable behaviour.

With 9.0 we added the "#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####" entry to the .htaccess file, this change uses it to ensure that only to the .htaccess gets written if the file has not been modified already. Since the .htaccess modifications are optional this is not a big deal.

Without this change updates of applications can break the rewrite rules (ending in endless redirects) as well as breaking the code integrity checker.
2016-03-18 09:18:46 +01:00
Morris Jobke d65c3a77e2 Update avatar on username change if avatar is set
* fixes #20455
2016-03-18 08:51:29 +01:00
Thomas Müller 382b18e85e Merge pull request #23309 from owncloud/backport-23164-stable9
[stable9] Prevent certain DBs throwing exceptions on same-value updates
2016-03-17 20:52:11 +01:00
Thomas Müller 9e5c5c804b Merge pull request #23358 from owncloud/stable9-backport-occ-typos
Some typo corrections in occ command output
2016-03-17 20:50:41 +01:00
Thomas Müller 7d80b20368 Merge pull request #23355 from owncloud/stable9_backport_23346
[Stable 9] Set proper public webdav permissions when public upload disabled
2016-03-17 17:14:13 +01:00
Vincent Petry 1e1c0885c6 Only use GDrive chunks when needed 2016-03-17 16:12:42 +01:00
Vincent Petry 8e0b78c746 Chunk upload for GDrive
Instead of storing the WHOLE file in memory in a PHP variable, use the
library's chunk upload support.
2016-03-17 16:12:38 +01:00
Carla Schroder e7152f495c Some typo corrections in occ command output 2016-03-17 07:05:34 -07:00
Thomas Müller 00ef623f1c Merge pull request #23259 from owncloud/backport-22998
[stable9] Delay check till scanner is used
2016-03-17 14:29:39 +01:00
Roeland Jago Douma 9dfcb55a2f Set proper public webdav permissions when public upload disabled
Fixes #23325

It can happen that a user shares a folder with public upload. And some
time later the admin disables public upload on the server.

To make sure this is handled correctly we need to check the config value
and reduce the permissions.

Fix is kept small to be easy backportable.
2016-03-17 13:54:53 +01:00
Thomas Müller ec4c5a3e75 Merge pull request #23128 from owncloud/contacts_calendar_name_color-stable9
add title and color to birthday calendar
2016-03-17 13:08:03 +01:00
Thomas Müller f46225fa2c Merge pull request #23335 from owncloud/ext-user-mounting-gui-stable9
[stable9] Display external storage GUI even if user mounting disabled
2016-03-17 12:25:53 +01:00
Thomas Müller f28f6a3001 Merge pull request #23302 from owncloud/fed-unshare-with-9
[9.0] Specify the target user when unsharing a federated share
2016-03-17 10:07:19 +01:00
Thomas Müller 25027c31ff Merge pull request #23313 from owncloud/check-syntax-travis-stable9
[stable9] Execute parallel-lint
2016-03-17 09:29:26 +01:00
Joas Schilling b8af6e703a Don't try to execute a dav syntax test 2016-03-17 09:07:55 +01:00
Robin McCorkell 403eb87f4d Display external storage GUI even if user mounting disabled 2016-03-16 22:10:36 +00:00
Thomas Müller ed4ed0e26f Merge pull request #23319 from owncloud/backport-23189-1
[stable9] Require at least libxml 2.7.0
2016-03-16 21:53:33 +01:00
Thomas Müller 24dcdf9d5c Merge pull request #23324 from owncloud/stable9-backport-23253
[stable9] Give swift 15 seconds after startup
2016-03-16 21:53:09 +01:00
Morris Jobke 3a773f4eca Give swift 15 seconds after startup 2016-03-16 18:08:42 +01:00
Lukas Reschke e71ebf334d [stable9] Execute parallel-lint
Backport of #22994 and #23303
2016-03-16 17:31:18 +01:00
Thomas Müller 08b9193919 Merge pull request #23315 from owncloud/travis-stable9
Execute travis on stable9 as well
2016-03-16 17:29:27 +01:00
Lukas Reschke dbcb037639 Require at least libxml 2.7.0
Fixes https://github.com/owncloud/core/issues/23168
2016-03-16 17:13:13 +01:00
Thomas Müller adbc5bbd1f Merge pull request #23271 from owncloud/backport-23192
[stable9] Backport 23192
2016-03-16 16:50:04 +01:00
Thomas Müller 4720719b08 Merge pull request #23270 from owncloud/backport-fix-support-for-php7-in-htaccess
[stable9] Backport fix support for php7 in htaccess
2016-03-16 16:49:38 +01:00
Morris Jobke 7b818d9442 Execute travis on stable9 as well
Backport of #23100 to stable9
2016-03-16 15:39:07 +01:00
Robin McCorkell aa91d50d04 Prevent certain DBs throwing exceptions on same-value updates
A PreconditionNotMetException must only be thrown if explicit
preconditions are specified for setValues(), not if the value is merely
the same as was already in the DB.
2016-03-16 14:50:00 +01:00
Robin Appelman 95cd1671b3 handle connection errors as storage not available in smb 2016-03-16 14:47:03 +01:00
Robin Appelman 8c035ae6f6 Specify the target user when unsharing a federated share 2016-03-16 13:29:04 +01:00
Thomas Müller d54106dada Merge pull request #23264 from owncloud/fix_22907_9.0
allow group shares, even if not all public keys are available
2016-03-16 11:18:51 +01:00
Lukas Reschke f9ad57ee52 Ensure that stored version is at least 1 for cross-storage copy
In case of a move operation from an unencrypted to an encrypted
storage the old encrypted version would stay with "0" while the
correct value would be "1". Thus we manually set the value to "1"
for those cases.

See also https://github.com/owncloud/core/issues/23078
2016-03-16 10:37:41 +01:00
Lukas Reschke cdadd4cd1b Fallback for crappy ancient distributions
Fixes https://github.com/owncloud/core/issues/23181
2016-03-15 17:14:53 +01:00
Lukas Reschke 6f7fc6c5db always_populate_raw_post_data has been removed with PHP 7.0 2016-03-15 17:03:19 +01:00
Lukas Reschke 9ef7340dc7 Add support for custom values in integrity checker 2016-03-15 17:03:16 +01:00
Lukas Reschke d1978a6950 Replace all required values 2016-03-15 17:03:13 +01:00
Lukas Reschke dfc7e6b421 Duplicate block for PHP 7 2016-03-15 17:03:09 +01:00
Thomas Müller b580d26270 Merge pull request #23237 from owncloud/backport-22901
[stable9] Add DAV authenticated also to other scopes
2016-03-15 16:03:35 +01:00
Thomas Müller 5466a800fa Merge pull request #23252 from owncloud/invalid-share-storage-9
[9.0] dont break when there is an invalid share
2016-03-15 15:59:24 +01:00
Bjoern Schiessle 0f372a2a8c allow group shares, even if not all public keys are available 2016-03-15 15:13:55 +01:00
Lukas Reschke 987146d5db Delay check till scanner is used
Fixes https://github.com/owncloud/core/issues/22973 and https://github.com/owncloud/core/issues/22987
2016-03-15 14:39:16 +01:00
Robin Appelman 9d688e655d move failedstorage to core 2016-03-15 12:49:12 +01:00
Robin Appelman f29440dbbc dont break when there is an invalid share 2016-03-15 12:49:06 +01:00
Thomas Müller 5a6b2956d8 Merge pull request #23022 from owncloud/stable9_backport_22602
[stable 9]   Do not check all chunks of a chunked upload if we do not need to
2016-03-15 12:15:45 +01:00
Thomas Müller 99de93a6c6 Merge pull request #23075 from owncloud/backport-23074-oracle-ext-storage
[9.0] Correctly escape join statements and use selectAlias
2016-03-15 12:13:54 +01:00
Thomas Müller 4159187a6e Merge pull request #23229 from owncloud/backport-23218-memcached-exceptions-on-success
[9.0] Fix errors in memcached implementation
2016-03-15 12:10:23 +01:00
Thomas Müller 6f64c99653 Merge pull request #23230 from owncloud/backport-23191
[stable9] Verify the getResponse returns a ResponseInterface
2016-03-15 12:09:55 +01:00
Thomas Müller ce0f28c123 Merge pull request #23231 from owncloud/backport-23190
[stable9] Use proper URLs for search results
2016-03-15 12:07:45 +01:00
Thomas Müller cca3a249fd Merge pull request #23240 from owncloud/backport-23222
backport of #23222
2016-03-15 12:07:15 +01:00
Thomas Müller 0608455b01 Merge pull request #23247 from owncloud/stable9_backport_23226
[stable 9] Generate a valid URL for link notification
2016-03-15 12:06:41 +01:00
Roeland Jago Douma 3a5e90fa03 Generate a valid URL for link notification
fixes #23197

* Updated unit test
2016-03-15 07:34:53 +01:00
Phiber2000 e2c557ab82 backport of #23222 (#23225) 2016-03-14 17:59:40 +01:00
Lukas Reschke e1727477ac Add DAV authenticated also to other scopes
Fixes https://github.com/owncloud/core/issues/22893
2016-03-14 17:57:37 +01:00
Thomas Müller cf232c4182 Merge pull request #23112 from owncloud/backport-23086-stable9
[9.0] remove deprecated ldap_sort
2016-03-14 17:16:36 +01:00
Thomas Müller efa673136e Merge pull request #23223 from owncloud/backport-23091-case-insensitive-group-sharing
[9.0] Case insensitive group sharing
2016-03-14 16:33:51 +01:00
Thomas Müller 3380a3af74 Merge pull request #22949 from owncloud/stable9-fix-group-share-migration-for-calendars-and-contacts
Fix group sharing and sharing permissions - fixes #22932
2016-03-14 16:31:08 +01:00
Thomas Müller 80d0e43fc7 Merge pull request #22933 from owncloud/stable9-backport-22872
[stable9] Update error text for link passwords
2016-03-14 16:20:00 +01:00
Lukas Reschke effc522572 Use proper URLs for search results
Fixes https://github.com/owncloud/core/issues/23136
2016-03-14 16:16:25 +01:00
Thomas Müller 689f3dea45 Merge pull request #22943 from owncloud/backport-22800-stable9
[9.0] don't hide server not available exception, fixes #20536
2016-03-14 16:15:50 +01:00
Lukas Reschke 3a73f97706 Verify the getResponse returns a ResponseInterface
Can also return `null` as per PHPDoc. Regression added by https://github.com/owncloud/core/commit/97f5c095f4018119e15d7c612a685da1dc91a340

Fixes https://github.com/owncloud/core/issues/23145
2016-03-14 16:15:18 +01:00
Thomas Müller a09ffb274b Merge pull request #23065 from owncloud/stable9-add-rewrite-rules-after-setup
[stable9] Add base rewrite rule only when RewriteBase is defined
2016-03-14 16:14:21 +01:00
Thomas Müller 2609bf3500 Merge pull request #23114 from owncloud/no-fatal-error-if-DSTART-is-not-set-stable9
No fatal error if dstart is not set stable9
2016-03-14 16:14:03 +01:00
Joas Schilling 9190885b4e Fix errors in memcached implementation 2016-03-14 16:13:35 +01:00
Thomas Müller f79195853e Merge pull request #23221 from owncloud/backport-23214-url-cache-key-length
[9.0] Shorter cache key for URL entries
2016-03-14 16:08:29 +01:00
Thomas Müller 884a3b9bb4 Merge pull request #23105 from owncloud/readonly-birthday-cal-stable9
The birthday_calendar is read-only
2016-03-14 16:07:42 +01:00
Joas Schilling a9ed80869a Correctly lower the search input as well 2016-03-14 13:48:45 +01:00
Joas Schilling 8e49a99896 Add integration tests for sharee API 2016-03-14 13:48:21 +01:00
Joas Schilling 5b593450c3 Return the correct group casing in sharee api 2016-03-14 13:48:13 +01:00
Joas Schilling 69cf557d0b Shorter cache key for URL entries 2016-03-14 13:34:34 +01:00
Thomas Müller 5c38c1c845 Merge pull request #23156 from owncloud/add-port-support-to-trusteddomain-stable9
Explicitly check for port
2016-03-14 12:30:58 +01:00
Thomas Müller dac69225d2 Merge pull request #23102 from owncloud/stable9-backport-23094
[stable9] Fake LOCK statement for Windows 7, 8 and 10 network mounts
2016-03-13 19:51:26 +01:00
Lukas Reschke f984718921 Adjust wording a bit
**Before:**
> Your PHP version (5.4.16) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.

**After:**
> You are currently running PHP 5.4.0. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by the PHP Group as soon as your distribution supports it.

Fixes https://github.com/owncloud/enterprise/issues/1170
2016-03-11 17:46:21 +01:00
Thomas Müller b752a08d63 Merge pull request #23127 from owncloud/fix-getOwner-on-fileshome-stable9
getOwner is not available on FileHome - fixes #23116
2016-03-11 15:05:20 +01:00
Lukas Reschke 9bc99bb297 Explicitly check for port
The setup uses `\OCP\IRequest::getInsecureServerHost` which in some cases can also include a port. This makes the trusted domain check fail thus.

I've decided to add this here that way because adjusting the setup would require parsing the host properly. This is not something that can be done very good in PHP. Check the following example for why `parse_url` is not our friend: https://3v4l.org/k501Z
2016-03-11 14:54:20 +01:00
Thomas Müller e3de44ea51 Merge pull request #23060 from owncloud/stable9_backport_23056
[stable 9] Add mimetype to OCS Share API output
2016-03-11 14:51:21 +01:00
Thomas Müller aeb480a8c3 Merge pull request #23113 from owncloud/allow-migrating-all-calendars-stable9
Allow to migrate calendars of all users
2016-03-10 23:10:41 +01:00
Georg Ehrke b0c7eba7d0 add title and color to birthday calendar 2016-03-10 22:55:32 +01:00
Thomas Müller e89f27e191 getOwner is not available on FileHome - fixes #23116 2016-03-10 22:51:02 +01:00
Lukas Reschke bd17cc793c Improved rewrite rule
As per https://github.com/owncloud/core/issues/23098 and https://github.com/owncloud/core/issues/23117
2016-03-10 22:18:53 +01:00
Thomas Müller 62a36ee884 The birthday_calendar is read-only 2016-03-10 21:36:11 +01:00
Thomas Müller a58e374956 Merge pull request #22909 from owncloud/backport-22244-prevent-calendar-proppatch
[9.0] Prevent calendar proppatch for share recipients
2016-03-10 21:32:38 +01:00
Roeland Jago Douma 67c4759017 Add intergration tests 2016-03-10 21:20:49 +01:00
Thomas Müller 36b543c490 fixes #23004 2016-03-10 17:59:02 +01:00
Thomas Müller 8465f9b6c6 fixes #23020 2016-03-10 17:58:53 +01:00
Thomas Müller 281a0e9e03 Merge pull request #23096 from owncloud/stable9_backport_23084
[stable 9] Fix MKCOL for IE11 as well
2016-03-10 17:49:01 +01:00
Joas Schilling 7126b64088 Allow to migrate calendars of all users 2016-03-10 17:47:08 +01:00
Arthur Schiwon 38d137c34c remove deprecated ldap_sort 2016-03-10 17:08:25 +01:00
Morris Jobke 098ce188b7 Fake LOCK statement for Windows 7, 8 and 10 network mounts
* fixes #22596
2016-03-10 15:57:33 +01:00
Thomas Müller 730620cfb2 Merge pull request #22912 from owncloud/stable9-diskfreespace-filesworkaround
[stable9] Fix call to disk_free_space when a file is provided
2016-03-10 15:31:38 +01:00
Roeland Jago Douma dd7131512d Fix MKCOL for IE11 as well
Using https://github.com/owncloud/core/pull/22274 we have to patch the
iedavclient.js as well.
2016-03-10 15:18:58 +01:00
Thomas Müller 85168315ab Merge pull request #23071 from owncloud/backport-23032-no-response-on-cli
[9.0] Do not set response status in CLI in case of error
2016-03-10 10:54:25 +01:00
Joas Schilling 09febaad49 Correctly escape join statements and use selectAlias 2016-03-10 10:28:39 +01:00
Thomas Müller 83894b58fe Merge pull request #23016 from owncloud/stable9_backport_23008
[stable 9] Select queries in the default share provider should query for file/folder
2016-03-10 09:10:22 +01:00
Vincent Petry f374368568 Do not set response status in CLI in case of error 2016-03-10 08:57:29 +01:00
Thomas Müller 4030b82c97 Merge pull request #23030 from owncloud/require-xmlreader
[stable9] Add XMLReader as requirement
2016-03-10 08:26:48 +01:00
Thomas Müller 4e90bc017e Merge pull request #22825 from owncloud/backport-22778-stable9
[backport] [stable9] untangle different user manager instances, fixes #22770
2016-03-10 08:26:11 +01:00
Lukas Reschke b315a5ee29 Add base rewrite rule only when RewriteBase is defined
In case Apache is configured with an `Alias` such as with the ownCloud packages the rewrite rules will fail when no valid RewriteBase is configured.
2016-03-09 22:41:32 +01:00
Thomas Müller b017434302 Merge pull request #23024 from owncloud/stable9-backport-22986
[stable9] Remove disabled autocorrect for new file names
2016-03-09 21:44:47 +01:00
Roeland Jago Douma 48cdf38d00 Add mimetype to OCS Share API output
Fixes #23044
2016-03-09 21:28:38 +01:00
Vincent Petry 11f76b2918 Fix call to disk_free_space when a file is provided
In the case of shared files, we have to call free_space() on the file
name. This has the side-effect that when uploading to a local storage
without quota set, it will call disk_free_space with the file name,
which fails.

This fix uses the parent folder in case the given path is a file.
2016-03-09 15:53:37 +01:00
Lukas Reschke 316f86f2a3 Add XMLReader as requirement
The SabreDAV release in 9.0 requires XMLReader, while this is usually compiled in by default some distributions like Gentoo don't.

Without this ownCloud gives a fatal 500 error instead of telling people to enable XMLReader.

Fixes https://github.com/owncloud/core/issues/23003
2016-03-09 15:29:08 +01:00
Thomas Müller bd144efeb1 Merge pull request #22990 from owncloud/stable9-backport-has-key
[stable9] Use "hasKey" instead of checking the value
2016-03-09 15:04:59 +01:00
Morris Jobke 88b9db44a0 Remove disabled autocorrect for new file names
* ref #22784
2016-03-09 14:59:57 +01:00
Roeland Jago Douma 91c7d293ca Added tests
* Unit tests for OC_Filechunking to verify the isComplete function
* Intergration tests to show that shuffling chunks is all fine
2016-03-09 14:48:42 +01:00
Roeland Jago Douma 313b881d2b Do not check all chunks of a chunked upload if we do not need to
Fixes #22601

Before we did a full test on all chunks to verify if a chunked upload
was completed. This is unneeded since if we are missing one chunk we can
already fail.

Also we look from back to front since it is much more likely that we
find a missing chunk thus can error out early.
2016-03-09 14:48:31 +01:00
Roeland Jago Douma 9120448302 Select queries in the default share provider should query for file/folder
There can be leftover calendar and contacts shares in the oc_share
table. We need to filter those out properly.
2016-03-09 13:56:35 +01:00
Thomas Müller d4d4b8d51a Merge pull request #22841 from owncloud/stable9_22830
[Stable 9] Rename and move permissions are set when a file is updatable
2016-03-09 12:27:03 +01:00
Thomas Müller b955ce6141 Merge pull request #22886 from owncloud/stable9-show-version-to-update-to
[stable9] Show version to update to properly
2016-03-09 12:26:53 +01:00
Thomas Müller e2b43c4095 Merge pull request #22908 from owncloud/backport-22904-group-manager-wrong-return
[9.0] Make sure that the return value is an array
2016-03-09 12:26:42 +01:00
Thomas Müller d84cccb911 Merge pull request #22919 from owncloud/backport-double-url-encoding
[stable9] Remove double URL encoding
2016-03-09 12:26:29 +01:00
Thomas Müller c2a16e0584 Merge pull request #22922 from owncloud/stable9-share-archivenamedownloadall
[stable9] Fix archive file name when downloading public share
2016-03-09 12:26:18 +01:00
Thomas Müller d652c87f86 Merge pull request #22924 from owncloud/stable9-versions-fixmtimetooltip
[stable9] Fix tooltip for versions mtime
2016-03-09 12:26:04 +01:00
Thomas Müller 72d4e672b2 Merge pull request #22925 from owncloud/stable9-trash-returnfalseon401
[stable9] Return false on 401 in file list + trash file list
2016-03-09 12:25:47 +01:00
Thomas Müller 95201a829f Merge pull request #22926 from owncloud/stable9-files-newmenu-removebrowsercomplete
[stable9] Remove browser autocomplete in new file menu
2016-03-09 12:25:30 +01:00
Thomas Müller 734b3e1408 Merge pull request #22965 from owncloud/stable9-fix-gdrive
[stable9] Fix compatibility with PHP 5.4
2016-03-09 12:20:24 +01:00
Lukas Reschke ddf56b84d4 Use "hasKey" instead of checking the value
If the check is negative it would depending on the used cache store the value as an empty string. When reading the value this check would thus return "false" even if a value exists.
2016-03-09 09:19:11 +01:00
Lukas Reschke 1975ffa9e7 Fix compatibility with PHP 5.4
Fixes https://github.com/owncloud/core/issues/22960
2016-03-08 19:58:49 +01:00
C Montero-Luque 81f694d83e 9.0.0 2016-03-08 08:48:12 -05:00
Thomas Müller 8d6a6667e5 Fix group sharing and sharing permissions - fixes #22932 2016-03-08 14:45:36 +01:00
Thomas Müller f9a80a9c12 Merge pull request #22945 from owncloud/stable9-fixsharemountrecursion
[stable9] Fix share mounting recursion
2016-03-08 14:42:04 +01:00
Vincent Petry d63f5561fb Fix share mounting recursion 2016-03-08 12:58:46 +01:00
Arthur Schiwon 213dfa2b85 don't hide server not available exception, fixes #20536 2016-03-08 12:40:12 +01:00
Morris Jobke 859303164e Update error text for link passwords
* this removes the old tooltip first before showing
  the new one to update the text - otherwise the old
  text will be shown
2016-03-08 09:00:37 +01:00
Vincent Petry 795331212a Remove browser autocomplete in new file menu 2016-03-07 22:04:36 +01:00
Vincent Petry c9476115b0 Return false on 401 in file list + trash file list
This gives a chance to the global ajax error handler to do its work if
the session expired.
2016-03-07 22:02:19 +01:00
Vincent Petry cfd9c7f6b9 Fix tooltip for versions mtime
It was missing a call to jquery.tooltip
2016-03-07 21:58:17 +01:00
Vincent Petry ebfc8b67d7 Remove "files" arg from download URL in public link page
When no files were specified for download, it means folder download.
In this case, no need to pass an empty "files" argument.
2016-03-07 21:48:15 +01:00
Vincent Petry f9e1d4d56e Fix archive file name when downloading public share
When download a public link share folder using the button on the top
right, it doesn't provide a list of files.

This fix makes sure to trigger the correct logic when no file list was
given.
2016-03-07 21:48:10 +01:00
Lukas Reschke fab42c7cd2 Remove double URL encoding
ZipStreamer as bundled with 9.0 will properly encode the filename already.

Fixes https://github.com/owncloud/core/issues/22836#issuecomment-193336245
2016-03-07 19:33:50 +01:00
C. Montero Luque 9232a124e2 Merge pull request #22913 from owncloud/fix-failing-migration-stable9
Fix failing migration stable9
2016-03-07 11:33:14 -05:00
Thomas Müller b5a06ecd5c Calendar and addressbook migration commands are always available 2016-03-07 15:24:23 +01:00
Thomas Müller 79811b5806 Handle addressbook migration issue by writing the faulty event to the log and continue 2016-03-07 15:24:13 +01:00
Thomas Müller 6413fffdcb Handle calendar migration issue by writing the faulty event to the log and continue 2016-03-07 15:24:03 +01:00
Thomas Müller b3b57621b7 Merge pull request #22897 from owncloud/backport-22896
[9.0] Correctly default to null and add type hint
2016-03-07 14:59:49 +01:00
Thomas Müller 6bfeb4595d Merge pull request #22906 from owncloud/stable9-quota-allowuploadwhenfreespaceisunlimited
[stable9] Fix uploading to fed shares where free space is unlimited
2016-03-07 14:58:31 +01:00
Joas Schilling 5af8ebe3bd Allow to change properties of readonly calendars 2016-03-07 13:58:44 +01:00
Joas Schilling 27f3dcc682 Allow to hide a shared calendar 2016-03-07 13:58:32 +01:00
Thomas Müller b1a1a46193 For 9.0 we don't have the possibility to store calendar and addressbook properties on a per-user basis and therefore we simple don't allow this for now 2016-03-07 13:58:24 +01:00
Joas Schilling 71b3033b35 Make sure that the return value is an array 2016-03-07 13:55:33 +01:00
Vincent Petry c1876ea51c Fix uploading when free space is unlimited
A federated share can report unlimited quota as -3, so the
ajax/upload.php code needs to be adjusted to block uploads when the free
space is unlimited.
2016-03-07 12:41:36 +01:00
Joas Schilling 9ec89b99b1 Correctly default to null and add type hint 2016-03-07 10:55:01 +01:00
C Montero-Luque 0945cb7a0e 9.0.0 RC3 2016-03-06 17:51:05 -05:00
Thomas Müller 6f4712a314 Merge pull request #22884 from owncloud/backport-cache-results
[stable9] Cache results of testRemoteUrl
2016-03-06 19:57:53 +01:00
Thomas Müller d043b6ba91 Merge pull request #22889 from owncloud/stable9-use-custom-header
[stable9] Use custom header
2016-03-06 19:53:19 +01:00
Lukas Reschke ef66729980 Use custom header
PHP in CGI mode eats the Authorization header => 💣
2016-03-05 23:07:11 +01:00
Lukas Reschke 17f5f19187 Show version to update to properly
Properly shows the version that will be updated to.
2016-03-05 22:02:55 +01:00
Lukas Reschke 71e3f7f866 Cache results of testRemoteUrl
Otherwise setting up the storage will result in a HTTP request and thus slowing down ownCloud.

Replaces https://github.com/owncloud/core/pull/22855
2016-03-05 21:09:58 +01:00
C Montero-Luque 0a5f34ab80 9.0.0 RC2 2016-03-04 18:08:02 -05:00
C. Montero Luque 5488bb74fe Merge pull request #22879 from owncloud/stable9-backport-use-clob-for-timezone
[stable9] Use CLOB for timezone
2016-03-04 18:02:45 -05:00
C. Montero Luque 4b85660984 Merge pull request #22871 from owncloud/enable-federation-app-stable9
[stable9] Automatically enabled federation app
2016-03-04 18:02:32 -05:00
C. Montero Luque 5080c34d78 Merge pull request #22867 from owncloud/stable9-backport-22865
[stable9] Run cleanup of expired DB file locks to background job
2016-03-04 17:45:07 -05:00
C. Montero Luque 5d402fc817 Merge pull request #22848 from owncloud/stable9-fileactions-downloadspinnerfix
[stable9] Fix download spinner to work with CSS styles
2016-03-04 16:41:26 -05:00
Lukas Reschke fb62043cc1 [stable9] Use CLOB for timezone
TEXT defaults to a length of 255 which is going to fail in some cases as the timezone can be rather long.

This changes it back to a CLOB as it has been before as well: owncloudarchive/calendar@8d8bb68. I'm not super convinced that CLOB is the best choice here but at least it seems to work.

Fixes #22876

Backport of https://github.com/owncloud/core/pull/22878 to stable9
2016-03-04 22:12:54 +01:00
C. Montero Luque b3c9ed8d5c Merge pull request #22782 from owncloud/backport-22776-doc-fix
Add Versions app header to config.sample.php
2016-03-04 16:10:35 -05:00
Morris Jobke 9737290e39 Run cleanup of expired DB file locks to background job
* fixes #22819

The old way fired a DELETE statement on each destruction of the
DBLockingProvider. Which could cause a lot of queries. It's enough
to run this every 5 minutes in a background job, which in the end
could result in file locks that exists 5 minutes longer - in the
worst case and for not properly released locks.

This makes the DB based locking a lot more performant and could
result in a similar performance to the Redis based locking provider.
2016-03-04 20:13:05 +01:00
C. Montero Luque 121ff350d4 Merge branch 'stable9' into enable-federation-app-stable9 2016-03-04 13:38:02 -05:00
C. Montero Luque bb0c304482 Merge pull request #22861 from owncloud/stable9-trashbin-checkpath
[stable9] Properly check path validity before deleting to trash
2016-03-04 13:33:23 -05:00
Lukas Reschke c9c85b8d4a Adjust OCS test 2016-03-04 17:59:57 +01:00
Lukas Reschke eb59aa8be4 Automatically enabled federation app 2016-03-04 17:40:45 +01:00
Vincent Petry 96d45e90dc Properly check path validity before deleting to trash
This prevents deleting the whole "files" folder of the user whenever
$ownerPath is empty. This can happen in concurrency situations.
2016-03-04 15:33:02 +01:00
Thomas Müller 0655f25406 Merge pull request #22858 from owncloud/stable9-release-channel
[stable9] Add release channel selection back
2016-03-04 15:29:37 +01:00
Thomas Müller 434747f450 Merge pull request #22832 from owncloud/external-unavailable-recheck9
[9.0] allow availability recheck for external storages
2016-03-04 15:29:27 +01:00
Lukas Reschke 7ff2b9232b Add release channel selection back
Allows to select the release channels again and also shows the last check date
2016-03-04 14:39:14 +01:00
Thomas Müller 3d28f364c5 Merge pull request #22852 from owncloud/backport-22851-php54-for-comments
[9.0] ucwords does not support delimiter on 5.4
2016-03-04 14:05:45 +01:00
Joas Schilling 62399f7852 ucwords does not support delimiter on 5.4 2016-03-04 12:20:50 +01:00
Thomas Müller 4fc6deaaf0 Merge pull request #22822 from owncloud/stable9-exclude-assets
[stable9] Exclude the assets folder from integrity check
2016-03-04 11:50:24 +01:00
Vincent Petry e6c6ee8d2a Fix download spinner to work with CSS styles
A recent change replaced img elements with CSS icons for file actions.
This fix adjusts the logic to work properly with CSS icons instead of
images.
2016-03-04 10:50:41 +01:00
Roeland Jago Douma 3673cfae3c Rename and move permissions are set when a file is updatable
* Fix unit tests
2016-03-04 09:37:52 +01:00
Thomas Müller 4da858b3b7 Merge pull request #22829 from owncloud/stable9-revert-22264-read-version-from-info.xml-only
[stable9] Revert "No longer evaluate appinfo/version"
2016-03-04 08:55:52 +01:00
Vincent Petry 8e8f5cdddf Properly set exception in FailedStorage 2016-03-03 20:07:22 +01:00
Robin Appelman f603c57751 allow availability recheck for external storages 2016-03-03 20:07:18 +01:00
Vincent Petry e155f28f5e Revert "No longer evaluate appinfo/version" 2016-03-03 18:42:23 +01:00
Arthur Schiwon dd556d77da untangle different user manager instances, fixes #22770 2016-03-03 17:26:52 +01:00
Lukas Reschke 750fc9ae26 Merge pull request #22818 from owncloud/backport-fix-encryption-on-version-restore
[stable9] Keep "encryptedVersion" when calling `\OC\Files\View::copy`
2016-03-03 16:18:51 +01:00
Lukas Reschke 4186bcbdf2 Exclude the assets folder from integrity check
We should not scan the assets folder as this can contain user specific content. Partially addresses https://github.com/owncloud/core/issues/22803
2016-03-03 16:00:34 +01:00
Lukas Reschke 98f79173ed Keep "encryptedVersion" when calling \OC\Files\View::copy
When calling `\OC\Files\View::copy` we should also keep the version to ensure that the file will always have the correct version attached and can be successfully decrypted.

To test this the following steps are necessary (from https://github.com/owncloud/core/issues/22781#issuecomment-191328982):

1. setup a new ownCloud 9.0 beta2
2. enable encryption
2. upload a docx (5.7MB large)
3. upload the same file again and overwrite the existing file
4. I can download the original file and the first version
5. I restore the first version
6. restored version can no longer be downloaded with the error described above

The manual cache operation in `\OCA\Files_Versions\Storage` is unfortunately necessary since `\OCA\Files_Versions\Storage::copyFileContents` is not using `\OCP\Files\Storage::moveFromStorage` in the case when an object storage is used. Due to the workaround added in https://github.com/owncloud/core/commit/54cea05271b887f1c8062c034741df869bc0f055 the stream is directly copied and thus bypassing the FS.
2016-03-03 14:41:53 +01:00
RealRancor 8d07cb4d85 Add Versions app header to config.sample.php 2016-03-02 15:33:09 +01:00
C Montero-Luque 445957a0e2 9.0.0 RC1 2016-03-01 16:59:42 -05:00
1247 changed files with 31572 additions and 3567 deletions
+11 -18
View File
@@ -37,6 +37,17 @@
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_php7.c>
php_value upload_max_filesize 513M
php_value post_max_size 513M
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
php_value output_buffering 0
<IfModule mod_env.c>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
@@ -48,24 +59,6 @@
RewriteRule ^(build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
# Rewrite rules for `front_controller_active`
Options -MultiViews
RewriteRule ^core/js/oc.js$ index.php/core/js/oc.js [PT,E=PATH_INFO:$1]
RewriteRule ^core/preview.png$ index.php/core/preview.png [PT,E=PATH_INFO:$1]
RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff|ico)$
RewriteCond %{REQUEST_FILENAME} !core/img/favicon.ico$
RewriteCond %{REQUEST_FILENAME} !/remote.php
RewriteCond %{REQUEST_FILENAME} !/public.php
RewriteCond %{REQUEST_FILENAME} !/cron.php
RewriteCond %{REQUEST_FILENAME} !/core/ajax/update.php
RewriteCond %{REQUEST_FILENAME} !/status.php
RewriteCond %{REQUEST_FILENAME} !/ocs/v1.php
RewriteCond %{REQUEST_FILENAME} !/ocs/v2.php
RewriteCond %{REQUEST_FILENAME} !/updater/
RewriteCond %{REQUEST_FILENAME} !/ocs-provider/
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
RewriteRule .* index.php [PT,E=PATH_INFO:$1]
</IfModule>
<IfModule mod_mime.c>
AddType image/svg+xml svg svgz
+10 -1
View File
@@ -13,7 +13,7 @@ env:
branches:
only:
- master
# - /^stable\d+(\.\d+)?$/
- /^stable\d+(\.\d+)?$/
addons:
apt:
@@ -29,6 +29,7 @@ install:
script:
- sh -c "if [ '$TC' = 'syntax' ]; then composer install && vendor/bin/parallel-lint --exclude vendor/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude vendor/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .; fi"
- sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi"
- sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi"
@@ -42,5 +43,13 @@ matrix:
env: DB=sqlite;TC=carddav
- php: 5.4
env: DB=sqlite;TC=caldav
- php: 5.4
env: DB=sqlite;TC=syntax;TEST_DAV=0
- php: 5.5
env: DB=sqlite;TC=syntax;TEST_DAV=0
- php: 5.6
env: DB=sqlite;TC=syntax;TEST_DAV=0
- php: 7.0
env: DB=sqlite;TC=syntax;TEST_DAV=0
fast_finish: true
+1 -1
View File
@@ -26,7 +26,7 @@ Help us to maximize the effort we can spend fixing issues and adding new feature
[template]: https://raw.github.com/owncloud/core/master/issue_template.md
[mailinglist]: https://mailman.owncloud.org/mailman/listinfo/owncloud
[forum]: https://forum.owncloud.org/
[forum]: https://central.owncloud.org/
[irc]: https://webchat.freenode.net/?channels=owncloud&uio=d4
## Contributing to Source Code
Vendored
+144
View File
@@ -0,0 +1,144 @@
#!groovy
/*
* This Jenkinsfile is intended to run on https://ci.owncloud.org and may fail anywhere else.
* It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc.
*/
timestampedNode('SLAVE') {
stage 'Checkout'
checkout scm
sh '''git submodule update --init'''
stage 'JavaScript Testing'
executeAndReport('tests/autotest-results-js.xml') {
sh '''./autotest-js.sh'''
}
stage 'PHPUnit'
executeAndReport('tests/autotest-results-sqlite.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 7.0
./autotest.sh sqlite
'''
}
executeAndReport('tests/autotest-results-mysql.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.4
./autotest.sh mysql
'''
}
executeAndReport('tests/autotest-results-pgsql.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.6
./autotest.sh pgsql
'''
}
executeAndReport('tests/autotest-results-oci.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.5
./autotest.sh oci
'''
}
stage 'Files External Testing'
executeAndReport('tests/autotest-external-results-sqlite-webdav-ownCloud.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite webdav-ownCloud
'''
}
executeAndReport('tests/autotest-external-results-sqlite-smb-silvershell.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite smb-silvershell
'''
}
executeAndReport('tests/autotest-external-results-sqlite-swift-ceph.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite swift-ceph
'''
}
executeAndReport('tests/autotest-external-results-sqlite-smb-windows.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite smb-windows
'''
}
step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite.xml'])
stage 'Primary Objectstore Test - Swift'
executeAndReport('tests/autotest-results-mysql.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
export RUN_OBJECTSTORE_TESTS=1
export PRIMARY_STORAGE_CONFIG="swift"
unset USEDOCKER
rm tests/autotest-results-*.xml
./autotest.sh mysql
'''
}
stage 'Integration Testing'
executeAndReport('build/integration/output/*.xml') {
sh '''phpenv local 7.0
rm -rf config/config.php
./occ maintenance:install --admin-pass=admin
rm -rf build/integration/output
rm -rf build/integration/vendor
rm -rf build/integration/composer.lock
cd build/integration
./run.sh
'''
}
}
void executeAndReport(String testResultLocation, def body) {
def failed = false
// We're wrapping this in a timeout - if it takes longer, kill it.
try {
timeout(time: 120, unit: 'MINUTES') {
body.call()
}
} catch (Exception e) {
failed = true
echo "Test execution failed: ${e}"
} finally {
step([$class: 'JUnitResultArchiver', testResults: testResultLocation])
}
if (failed) {
if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'stable9.1' || env.BRANCH_NAME == 'stable9' || env.BRANCH_NAME == 'stable8.2') {
mail body: "project build error is here: ${env.BUILD_URL}" ,
subject: "Build on release branch failed: ${env.BRANCH_NAME}",
to: 'jenkins@owncloud.com'
}
error "Test execution failed. Terminating the build"
}
}
// Runs the given body within a Timestamper wrapper on the given label.
def timestampedNode(String label, Closure body) {
node(label) {
wrap([$class: 'TimestamperBuildWrapper']) {
body.call()
}
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ https://owncloud.org/contribute/
Learn about the different ways you can get support for ownCloud: https://owncloud.org/support/
## Get in touch
* :clipboard: [Forum](https://forum.owncloud.org)
* :clipboard: [Forum](https://central.owncloud.org)
* :envelope: [Mailing list](https://mailman.owncloud.org/mailman/listinfo)
* :hash: [IRC channel](https://webchat.freenode.net/?channels=owncloud)
* :busts_in_silhouette: [Facebook] (https://facebook.com/ownclouders)
+22 -1
View File
@@ -105,7 +105,7 @@ class Extension implements IExtension {
public function getTypeIcon($type) {
switch ($type) {
case self::APP_NAME:
return false;
return 'icon-comment';
}
return false;
@@ -150,6 +150,9 @@ class Extension implements IExtension {
switch ($text) {
case self::ADD_COMMENT_SUBJECT:
if ($this->authorIsCurrentUser($params[0])) {
return (string) $l->t('You commented');
}
return (string) $l->t('%1$s commented', $params);
case self::ADD_COMMENT_MESSAGE:
return $this->convertParameterToComment($params[0], 120);
@@ -168,6 +171,9 @@ class Extension implements IExtension {
switch ($text) {
case self::ADD_COMMENT_SUBJECT:
if ($this->authorIsCurrentUser($params[0])) {
return (string) $l->t('You commented on %2$s', $params);
}
return (string) $l->t('%1$s commented on %2$s', $params);
case self::ADD_COMMENT_MESSAGE:
return $this->convertParameterToComment($params[0]);
@@ -176,6 +182,21 @@ class Extension implements IExtension {
return false;
}
/**
* Check if the author is the current user
*
* @param string $user Parameter e.g. `<user display-name="admin">admin</user>`
* @return bool
*/
protected function authorIsCurrentUser($user) {
try {
return strip_tags($user) === $this->activityManager->getCurrentUserId();
} catch (\UnexpectedValueException $e) {
// FIXME this is awkward, but we have no access to the current user in emails
return false;
}
}
/**
* The extension can define the type of parameters for translation
*
+1 -1
View File
@@ -31,7 +31,7 @@
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
' <textarea class="message" placeholder="{{newMessagePlaceholder}}">{{{message}}}</textarea>' +
' <textarea class="message" placeholder="{{newMessagePlaceholder}}">{{message}}</textarea>' +
' <input class="submit" type="submit" value="{{submitText}}" />' +
'{{#if isEditMode}}' +
' <input class="cancel" type="button" value="{{cancelText}}" />' +
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"{count} unread comments" : "{count} nepřečtených komentářů",
"Comment" : "Komentář"
"Comment" : "Komentář",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"{count} unread comments" : "{count} nepřečtených komentářů",
"Comment" : "Komentář"
"Comment" : "Komentář",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"{count} unread comments" : "{count} ungelesene Kommentare",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"{count} unread comments" : "{count} ungelesene Kommentare",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"{count} unread comments" : "[count] ungelesene Kommentare",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"{count} unread comments" : "[count] ungelesene Kommentare",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters {count} of {max}",
"{count} unread comments" : "{count} unread comments",
"Comment" : "Comment"
"Comment" : "Comment",
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters {count} of {max}",
"{count} unread comments" : "{count} unread comments",
"Comment" : "Comment"
"Comment" : "Comment",
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Konservi",
"Allowed characters {count} of {max}" : "Permesataj karakteroj: {count} el {max}",
"{count} unread comments" : "{count} nelegitaj komentoj",
"Comment" : "Komento"
"Comment" : "Komento",
"<strong>Comments</strong> for files" : "<strong>Komentoj</strong> por dosieroj"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Konservi",
"Allowed characters {count} of {max}" : "Permesataj karakteroj: {count} el {max}",
"{count} unread comments" : "{count} nelegitaj komentoj",
"Comment" : "Komento"
"Comment" : "Komento",
"<strong>Comments</strong> for files" : "<strong>Komentoj</strong> por dosieroj"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"{count} unread comments" : "{count} comentarios no leídos",
"Comment" : "Comentario"
"Comment" : "Comentario",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> en archivos"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"{count} unread comments" : "{count} comentarios no leídos",
"Comment" : "Comentario"
"Comment" : "Comentario",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> en archivos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Tallenna",
"Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}",
"{count} unread comments" : "{count} lukematonta kommenttia",
"Comment" : "Kommentti"
"Comment" : "Kommentti",
"<strong>Comments</strong> for files" : "<strong>Kommentit</strong> tiedostoille"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Tallenna",
"Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}",
"{count} unread comments" : "{count} lukematonta kommenttia",
"Comment" : "Kommentti"
"Comment" : "Kommentti",
"<strong>Comments</strong> for files" : "<strong>Kommentit</strong> tiedostoille"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
"{count} unread comments" : "{count} commentaires non lus",
"Comment" : "Commenter"
"Comment" : "Commenter",
"<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers"
},
"nplurals=2; plural=(n > 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
"{count} unread comments" : "{count} commentaires non lus",
"Comment" : "Commenter"
"Comment" : "Commenter",
"<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "שמירה",
"Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}",
"{count} unread comments" : "{count} תגובות שלא נקראו",
"Comment" : "תגובה"
"Comment" : "תגובה",
"<strong>Comments</strong> for files" : "<strong>תגובות</strong> לקבצים"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "שמירה",
"Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}",
"{count} unread comments" : "{count} תגובות שלא נקראו",
"Comment" : "תגובה"
"Comment" : "תגובה",
"<strong>Comments</strong> for files" : "<strong>תגובות</strong> לקבצים"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+6 -1
View File
@@ -3,6 +3,11 @@ OC.L10N.register(
{
"Cancel" : "Mégsem",
"Save" : "Mentés",
"Comment" : "Komment"
"Comment" : "Komment",
"<strong>Comments</strong> for files" : "<strong>Hozzászólások</strong> a fájlokhoz",
"Delete comment" : "Hozzászólás törlése",
"Edit comment" : "Hozzászólás szerkesztése",
"No other comments available" : "Nincs több hozzászólás.",
"Post" : "Küldés"
},
"nplurals=2; plural=(n != 1);");
+6 -1
View File
@@ -1,6 +1,11 @@
{ "translations": {
"Cancel" : "Mégsem",
"Save" : "Mentés",
"Comment" : "Komment"
"Comment" : "Komment",
"<strong>Comments</strong> for files" : "<strong>Hozzászólások</strong> a fájlokhoz",
"Delete comment" : "Hozzászólás törlése",
"Edit comment" : "Hozzászólás szerkesztése",
"No other comments available" : "Nincs több hozzászólás.",
"Post" : "Küldés"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Simpan",
"Allowed characters {count} of {max}" : "Karakter yang diizinkan {count} dari {max}",
"{count} unread comments" : "{count} komentar belum dibaca",
"Comment" : "Komentar"
"Comment" : "Komentar",
"<strong>Comments</strong> for files" : "<strong>Komentar</strong> untuk berkas"
},
"nplurals=1; plural=0;");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Simpan",
"Allowed characters {count} of {max}" : "Karakter yang diizinkan {count} dari {max}",
"{count} unread comments" : "{count} komentar belum dibaca",
"Comment" : "Komentar"
"Comment" : "Komentar",
"<strong>Comments</strong> for files" : "<strong>Komentar</strong> untuk berkas"
},"pluralForm" :"nplurals=1; plural=0;"
}
+6 -1
View File
@@ -3,6 +3,11 @@ OC.L10N.register(
{
"Cancel" : "Hætta við",
"Save" : "Vista",
"Comment" : "Athugasemd"
"Comment" : "Athugasemd",
"<strong>Comments</strong> for files" : "<strong>Athugasemdir</strong> við skrár",
"Delete comment" : "Eyða athugasemd",
"Edit comment" : "Breyta athugasemd",
"No other comments available" : "Engar aðrar athugasemdir eru tiltækar",
"Post" : "Senda"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
+6 -1
View File
@@ -1,6 +1,11 @@
{ "translations": {
"Cancel" : "Hætta við",
"Save" : "Vista",
"Comment" : "Athugasemd"
"Comment" : "Athugasemd",
"<strong>Comments</strong> for files" : "<strong>Athugasemdir</strong> við skrár",
"Delete comment" : "Eyða athugasemd",
"Edit comment" : "Breyta athugasemd",
"No other comments available" : "Engar aðrar athugasemdir eru tiltækar",
"Post" : "Senda"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Salva",
"Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}",
"{count} unread comments" : "{count} commenti non letti",
"Comment" : "Commento"
"Comment" : "Commento",
"<strong>Comments</strong> for files" : "<strong>Commenti</strong> sui file"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Salva",
"Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}",
"{count} unread comments" : "{count} commenti non letti",
"Comment" : "Commento"
"Comment" : "Commento",
"<strong>Comments</strong> for files" : "<strong>Commenti</strong> sui file"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "保存",
"Allowed characters {count} of {max}" : "入力文字数 {count} / {max}",
"{count} unread comments" : "未読コメント数 {count}",
"Comment" : "コメント"
"Comment" : "コメント",
"<strong>Comments</strong> for files" : "ファイルについての<strong>コメント</strong>"
},
"nplurals=1; plural=0;");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "保存",
"Allowed characters {count} of {max}" : "入力文字数 {count} / {max}",
"{count} unread comments" : "未読コメント数 {count}",
"Comment" : "コメント"
"Comment" : "コメント",
"<strong>Comments</strong> for files" : "ファイルについての<strong>コメント</strong>"
},"pluralForm" :"nplurals=1; plural=0;"
}
+6 -1
View File
@@ -3,6 +3,11 @@ OC.L10N.register(
{
"Cancel" : "취소",
"Save" : "저장",
"Comment" : "설명"
"Comment" : "설명",
"<strong>Comments</strong> for files" : "파일에 <strong>댓글</strong> 남기기",
"Delete comment" : "댓글 삭제",
"Edit comment" : "댓글 편집",
"No other comments available" : "더 이상 댓글 없음",
"Post" : "게시"
},
"nplurals=1; plural=0;");
+6 -1
View File
@@ -1,6 +1,11 @@
{ "translations": {
"Cancel" : "취소",
"Save" : "저장",
"Comment" : "설명"
"Comment" : "설명",
"<strong>Comments</strong> for files" : "파일에 <strong>댓글</strong> 남기기",
"Delete comment" : "댓글 삭제",
"Edit comment" : "댓글 편집",
"No other comments available" : "더 이상 댓글 없음",
"Post" : "게시"
},"pluralForm" :"nplurals=1; plural=0;"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Bewaren",
"Allowed characters {count} of {max}" : "{count} van de {max} toegestane tekens",
"{count} unread comments" : "{count} ongelezen reacties",
"Comment" : "Reactie"
"Comment" : "Reactie",
"<strong>Comments</strong> for files" : "<strong>Reacties</strong> voor bestanden"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Bewaren",
"Allowed characters {count} of {max}" : "{count} van de {max} toegestane tekens",
"{count} unread comments" : "{count} ongelezen reacties",
"Comment" : "Reactie"
"Comment" : "Reactie",
"<strong>Comments</strong> for files" : "<strong>Reacties</strong> voor bestanden"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+6 -1
View File
@@ -3,6 +3,11 @@ OC.L10N.register(
{
"Cancel" : "Anuluj",
"Save" : "Zapisz",
"Comment" : "Komentarz"
"Comment" : "Komentarz",
"<strong>Comments</strong> for files" : "<strong>Komentarze</strong> dla plików",
"Delete comment" : "Skasuj komentarz",
"Edit comment" : "Edytuj komentarz",
"No other comments available" : "Nie ma więcej komentarzy",
"Post" : "Zapisz"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+6 -1
View File
@@ -1,6 +1,11 @@
{ "translations": {
"Cancel" : "Anuluj",
"Save" : "Zapisz",
"Comment" : "Komentarz"
"Comment" : "Komentarz",
"<strong>Comments</strong> for files" : "<strong>Komentarze</strong> dla plików",
"Delete comment" : "Skasuj komentarz",
"Edit comment" : "Edytuj komentarz",
"No other comments available" : "Nie ma więcej komentarzy",
"Post" : "Zapisz"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Salvar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário"
"Comment" : "Comentário",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> por arquivos"
},
"nplurals=2; plural=(n > 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Salvar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário"
"Comment" : "Comentário",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> por arquivos"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} de {max} caracteres restantes",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário"
"Comment" : "Comentário",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para ficheiros"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} de {max} caracteres restantes",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário"
"Comment" : "Comentário",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para ficheiros"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Сохранить",
"Allowed characters {count} of {max}" : "Допустимых символов {count} из {max}",
"{count} unread comments" : "{count} непрочитанных комментариев",
"Comment" : "Коментарий"
"Comment" : "Коментарий",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Сохранить",
"Allowed characters {count} of {max}" : "Допустимых символов {count} из {max}",
"{count} unread comments" : "{count} непрочитанных комментариев",
"Comment" : "Коментарий"
"Comment" : "Коментарий",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Shrani",
"Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}",
"{count} unread comments" : "{count} neprebranih opomb",
"Comment" : "Opomba"
"Comment" : "Opomba",
"<strong>Comments</strong> for files" : "<strong>Opombe</strong> datotek"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Shrani",
"Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}",
"{count} unread comments" : "{count} neprebranih opomb",
"Comment" : "Opomba"
"Comment" : "Opomba",
"<strong>Comments</strong> for files" : "<strong>Opombe</strong> datotek"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"{count} unread comments" : "{count} komente të palexuar",
"Comment" : "Koment"
"Comment" : "Koment",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për kartela"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"{count} unread comments" : "{count} komente të palexuar",
"Comment" : "Koment"
"Comment" : "Koment",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për kartela"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+6 -1
View File
@@ -3,6 +3,11 @@ OC.L10N.register(
{
"Cancel" : "Одустани",
"Save" : "Сачувај",
"Comment" : "Коментар"
"Comment" : "Коментар",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> фајлова",
"Delete comment" : "Обриши коментар",
"Edit comment" : "Уреди коментар",
"No other comments available" : "Нема других коментара",
"Post" : "Објави"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+6 -1
View File
@@ -1,6 +1,11 @@
{ "translations": {
"Cancel" : "Одустани",
"Save" : "Сачувај",
"Comment" : "Коментар"
"Comment" : "Коментар",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> фајлова",
"Delete comment" : "Обриши коментар",
"Edit comment" : "Уреди коментар",
"No other comments available" : "Нема других коментара",
"Post" : "Објави"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Spara",
"Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
"{count} unread comments" : "{count} olästa kommentarer",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> till filer"
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Spara",
"Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
"{count} unread comments" : "{count} olästa kommentarer",
"Comment" : "Kommentar"
"Comment" : "Kommentar",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> till filer"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -12,6 +12,7 @@ OC.L10N.register(
"Edit comment" : "แก้ไขความคิดเห็น",
"[Deleted user]" : "[ผู้ใช้ถูกลบไปแล้ว]",
"Save" : "บันทึก",
"Comment" : "แสดงความคิดเห็น"
"Comment" : "แสดงความคิดเห็น",
"<strong>Comments</strong> for files" : "<strong>แสดงความคิดเห็น</strong> สำหรับไฟล์"
},
"nplurals=1; plural=0;");
+2 -1
View File
@@ -10,6 +10,7 @@
"Edit comment" : "แก้ไขความคิดเห็น",
"[Deleted user]" : "[ผู้ใช้ถูกลบไปแล้ว]",
"Save" : "บันทึก",
"Comment" : "แสดงความคิดเห็น"
"Comment" : "แสดงความคิดเห็น",
"<strong>Comments</strong> for files" : "<strong>แสดงความคิดเห็น</strong> สำหรับไฟล์"
},"pluralForm" :"nplurals=1; plural=0;"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Kaydet",
"Allowed characters {count} of {max}" : "İzin verilen karakterler {count} {max}",
"{count} unread comments" : "{count} okunmamış yorumlar",
"Comment" : "Yorum"
"Comment" : "Yorum",
"<strong>Comments</strong> for files" : "Dosyalar için <strong>Yorumlar</strong>"
},
"nplurals=2; plural=(n > 1);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Kaydet",
"Allowed characters {count} of {max}" : "İzin verilen karakterler {count} {max}",
"{count} unread comments" : "{count} okunmamış yorumlar",
"Comment" : "Yorum"
"Comment" : "Yorum",
"<strong>Comments</strong> for files" : "Dosyalar için <strong>Yorumlar</strong>"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "Зберегти",
"Allowed characters {count} of {max}" : "Доступно символів {count} з {max}",
"{count} unread comments" : "{count} непрочитаних коментарів",
"Comment" : "Коментар"
"Comment" : "Коментар",
"<strong>Comments</strong> for files" : "<strong>Коментарі</strong> до файлів"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "Зберегти",
"Allowed characters {count} of {max}" : "Доступно символів {count} з {max}",
"{count} unread comments" : "{count} непрочитаних коментарів",
"Comment" : "Коментар"
"Comment" : "Коментар",
"<strong>Comments</strong> for files" : "<strong>Коментарі</strong> до файлів"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
+2 -1
View File
@@ -16,6 +16,7 @@ OC.L10N.register(
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
"{count} unread comments" : "{count} 条未读评论",
"Comment" : "评论"
"Comment" : "评论",
"<strong>Comments</strong> for files" : "<strong>评论文件</strong>"
},
"nplurals=1; plural=0;");
+2 -1
View File
@@ -14,6 +14,7 @@
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
"{count} unread comments" : "{count} 条未读评论",
"Comment" : "评论"
"Comment" : "评论",
"<strong>Comments</strong> for files" : "<strong>评论文件</strong>"
},"pluralForm" :"nplurals=1; plural=0;"
}
+4 -2
View File
@@ -46,6 +46,8 @@ $eventDispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
$cm = \OC::$server->getContactsManager();
$cm->register(function() use ($cm, $app) {
$userId = \OC::$server->getUserSession()->getUser()->getUID();
$app->setupContactsProvider($cm, $userId);
$user = \OC::$server->getUserSession()->getUser();
if (!is_null($user)) {
$app->setupContactsProvider($cm, $user->getUID());
}
});
+30 -3
View File
@@ -32,6 +32,7 @@ use OCA\Dav\Migration\AddressBookAdapter;
use OCA\Dav\Migration\CalendarAdapter;
use OCA\Dav\Migration\MigrateAddressbooks;
use OCA\Dav\Migration\MigrateCalendars;
use OCA\Dav\Migration\NothingToDoException;
use \OCP\AppFramework\App;
use OCP\AppFramework\IAppContainer;
use OCP\Contacts\IManager;
@@ -99,18 +100,24 @@ class Application extends App {
$container->registerService('MigrateAddressbooks', function($c) {
/** @var IAppContainer $c */
$db = $c->getServer()->getDatabaseConnection();
$logger = $c->getServer()->getLogger();
return new MigrateAddressbooks(
new AddressBookAdapter($db),
$c->query('CardDavBackend')
$c->query('CardDavBackend'),
$logger,
null
);
});
$container->registerService('MigrateCalendars', function($c) {
/** @var IAppContainer $c */
$db = $c->getServer()->getDatabaseConnection();
$logger = $c->getServer()->getLogger();
return new MigrateCalendars(
new CalendarAdapter($db),
$c->query('CalDavBackend')
$c->query('CalDavBackend'),
$logger,
null
);
});
@@ -131,7 +138,8 @@ class Application extends App {
public function setupContactsProvider(IManager $contactsManager, $userID) {
/** @var ContactsManager $cm */
$cm = $this->getContainer()->query('ContactsManager');
$cm->setupContactsProvider($contactsManager, $userID);
$urlGenerator = $this->getContainer()->getServer()->getURLGenerator();
$cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
}
public function registerHooks() {
@@ -184,6 +192,8 @@ class Application extends App {
/** @var IUser $user */
$migration->migrateForUser($user->getUID());
});
} catch (NothingToDoException $ex) {
// nothing to do, yay!
} catch (\Exception $ex) {
$this->getContainer()->getServer()->getLogger()->logException($ex);
}
@@ -200,6 +210,23 @@ class Application extends App {
/** @var IUser $user */
$migration->migrateForUser($user->getUID());
});
} catch (NothingToDoException $ex) {
// nothing to do, yay!
} catch (\Exception $ex) {
$this->getContainer()->getServer()->getLogger()->logException($ex);
}
}
public function generateBirthdays() {
try {
/** @var BirthdayService $migration */
$migration = $this->getContainer()->query('BirthdayService');
$userManager = $this->getContainer()->getServer()->getUserManager();
$userManager->callForAllUsers(function($user) use($migration) {
/** @var IUser $user */
$migration->syncUser($user->getUID());
});
} catch (\Exception $ex) {
$this->getContainer()->getServer()->getLogger()->logException($ex);
}
+2 -2
View File
@@ -283,7 +283,7 @@ CREATE TABLE calendarobjects (
description TEXT,
calendarorder INT(11) UNSIGNED NOT NULL DEFAULT '0',
calendarcolor VARBINARY(10),
timezone TEXT,
timezone CLOB,
components VARBINARY(20),
transparent TINYINT(1) NOT NULL DEFAULT '0',
UNIQUE(principaluri, uri)
@@ -337,7 +337,7 @@ CREATE TABLE calendarobjects (
</field>
<field>
<name>timezone</name>
<type>text</type>
<type>clob</type>
</field>
<field>
<name>components</name>
+1 -1
View File
@@ -5,7 +5,7 @@
<description>ownCloud WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
<version>0.1.4</version>
<version>0.1.6</version>
<default_enable/>
<types>
<filesystem/>
+1
View File
@@ -25,3 +25,4 @@ $app = new Application();
$app->setupCron();
$app->migrateAddressbooks();
$app->migrateCalendars();
$app->generateBirthdays();
+2 -10
View File
@@ -29,7 +29,6 @@ use OCA\DAV\Command\SyncSystemAddressBook;
$dbConnection = \OC::$server->getDatabaseConnection();
$userManager = OC::$server->getUserManager();
$groupManager = OC::$server->getGroupManager();
$config = \OC::$server->getConfig();
$app = new Application();
@@ -38,12 +37,5 @@ $application->add(new CreateCalendar($userManager, $groupManager, $dbConnection)
$application->add(new CreateAddressBook($userManager, $app->getContainer()->query('CardDavBackend')));
$application->add(new SyncSystemAddressBook($app->getSyncService()));
$application->add(new SyncBirthdayCalendar($userManager, $app->getContainer()->query('BirthdayService')));
// the occ tool is *for now* only available in debug mode for developers to test
if ($config->getSystemValue('debug', false)){
$app = new \OCA\Dav\AppInfo\Application();
$migration = $app->getContainer()->query('MigrateAddressbooks');
$application->add(new MigrateAddressbooks($userManager, $migration));
$migration = $app->getContainer()->query('MigrateCalendars');
$application->add(new MigrateCalendars($userManager, $migration));
}
$application->add(new MigrateAddressbooks($userManager, $app->getContainer()->query('MigrateAddressbooks')));
$application->add(new MigrateCalendars($userManager, $app->getContainer()->query('MigrateCalendars')));
+1
View File
@@ -23,3 +23,4 @@ use OCA\Dav\AppInfo\Application;
$app = new Application();
$app->setupCron();
$app->generateBirthdays();
+3 -2
View File
@@ -23,11 +23,12 @@
// Backends
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\Connector\LegacyDAVACL;
use OCA\DAV\CalDAV\CalendarRoot;
use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin;
use OCA\DAV\Connector\Sabre\MaintenancePlugin;
use OCA\DAV\Connector\Sabre\Principal;
use Sabre\CalDAV\CalendarRoot;
$authBackend = new Auth(
\OC::$server->getSession(),
@@ -65,7 +66,7 @@ $server->addPlugin(new MaintenancePlugin());
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new \Sabre\CalDAV\Plugin());
$acl = new \OCA\DAV\Connector\LegacyDAVACL();
$acl = new LegacyDAVACL();
$server->addPlugin($acl);
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
+1
View File
@@ -69,6 +69,7 @@ $acl = new \OCA\DAV\Connector\LegacyDAVACL();
$server->addPlugin($acl);
$server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin());
$server->addPlugin(new \OCA\DAV\CardDAV\ImageExportPlugin(\OC::$server->getLogger()));
$server->addPlugin(new ExceptionLoggerPlugin('carddav', \OC::$server->getLogger()));
// And off we go!
+2 -2
View File
@@ -61,8 +61,8 @@ class MigrateCalendars extends Command {
protected function execute(InputInterface $input, OutputInterface $output) {
$this->service->setup();
if ($input->hasArgument('user')) {
$user = $input->getArgument('user');
$user = $input->getArgument('user');
if (!is_null($user)) {
if (!$this->userManager->userExists($user)) {
throw new \InvalidArgumentException("User <$user> in unknown.");
}
+2 -2
View File
@@ -61,8 +61,8 @@ class SyncBirthdayCalendar extends Command {
* @param OutputInterface $output
*/
protected function execute(InputInterface $input, OutputInterface $output) {
if ($input->hasArgument('user')) {
$user = $input->getArgument('user');
$user = $input->getArgument('user');
if (!is_null($user)) {
if (!$this->userManager->userExists($user)) {
throw new \InvalidArgumentException("User <$user> in unknown.");
}
+12 -11
View File
@@ -50,8 +50,7 @@ class BirthdayService {
$book = $this->cardDavBackEnd->getAddressBookById($addressBookId);
$principalUri = $book['principaluri'];
$calendarUri = self::BIRTHDAY_CALENDAR_URI;
$calendar = $this->ensureCalendarExists($principalUri, $calendarUri, []);
$calendar = $this->ensureCalendarExists($principalUri);
$objectUri = $book['uri'] . '-' . $cardUri. '.ics';
$calendarData = $this->buildBirthdayFromContact($cardData);
$existing = $this->calDavBackEnd->getCalendarObject($calendar['id'], $objectUri);
@@ -77,27 +76,27 @@ class BirthdayService {
public function onCardDeleted($addressBookId, $cardUri) {
$book = $this->cardDavBackEnd->getAddressBookById($addressBookId);
$principalUri = $book['principaluri'];
$calendarUri = self::BIRTHDAY_CALENDAR_URI;
$calendar = $this->ensureCalendarExists($principalUri, $calendarUri, []);
$calendar = $this->ensureCalendarExists($principalUri);
$objectUri = $book['uri'] . '-' . $cardUri. '.ics';
$this->calDavBackEnd->deleteCalendarObject($calendar['id'], $objectUri);
}
/**
* @param string $principal
* @param string $id
* @param array $properties
* @return array|null
* @throws \Sabre\DAV\Exception\BadRequest
*/
public function ensureCalendarExists($principal, $id, $properties) {
$book = $this->calDavBackEnd->getCalendarByUri($principal, $id);
public function ensureCalendarExists($principal) {
$book = $this->calDavBackEnd->getCalendarByUri($principal, self::BIRTHDAY_CALENDAR_URI);
if (!is_null($book)) {
return $book;
}
$this->calDavBackEnd->createCalendar($principal, $id, $properties);
$this->calDavBackEnd->createCalendar($principal, self::BIRTHDAY_CALENDAR_URI, [
'{DAV:}displayname' => 'Contact birthdays',
'{http://apple.com/ns/ical/}calendar-color' => '#FFFFCA',
]);
return $this->calDavBackEnd->getCalendarByUri($principal, $id);
return $this->calDavBackEnd->getCalendarByUri($principal, self::BIRTHDAY_CALENDAR_URI);
}
/**
@@ -156,7 +155,9 @@ class BirthdayService {
* @param string $user
*/
public function syncUser($user) {
$books = $this->cardDavBackEnd->getAddressBooksForUser('principals/users/'.$user);
$principal = 'principals/users/'.$user;
$this->ensureCalendarExists($principal);
$books = $this->cardDavBackEnd->getAddressBooksForUser($principal);
foreach($books as $book) {
$cards = $this->cardDavBackEnd->getCards($book['id']);
foreach($cards as $card) {
+8 -5
View File
@@ -138,6 +138,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return array
*/
function getCalendarsForUser($principalUri) {
$principalUriOriginal = $principalUri;
$principalUri = $this->convertPrincipal($principalUri, true);
$fields = array_values($this->propertyMap);
$fields[] = 'id';
@@ -184,7 +185,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$stmt->closeCursor();
// query for shared calendars
$principals = $this->principalBackend->getGroupMembership($principalUri);
$principals = $this->principalBackend->getGroupMembership($principalUriOriginal, true);
$principals[]= $principalUri;
$fields = array_values($this->propertyMap);
@@ -194,6 +195,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$fields[] = 'a.components';
$fields[] = 'a.principaluri';
$fields[] = 'a.transparent';
$fields[] = 's.access';
$query = $this->db->getQueryBuilder();
$result = $query->select($fields)
->from('dav_shares', 's')
@@ -221,6 +223,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
];
foreach($this->propertyMap as $xmlName=>$dbName) {
@@ -815,9 +818,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
function getCalendarObjectByUID($principalUri, $uid) {
$query = $this->db->getQueryBuilder();
$query->select([$query->createFunction('c.`uri` AS `calendaruri`'), $query->createFunction('co.`uri` AS `objecturi`')])
$query->selectAlias('c.uri', 'calendaruri')->selectAlias('co.uri', 'objecturi')
->from('calendarobjects', 'co')
->leftJoin('co', 'calendars', 'c', 'co.`calendarid` = c.`id`')
->leftJoin('co', 'calendars', 'c', $query->expr()->eq('co.calendarid', 'c.id'))
->where($query->expr()->eq('c.principaluri', $query->createNamedParameter($principalUri)))
->andWhere($query->expr()->eq('co.uid', $query->createNamedParameter($uid)));
@@ -1294,7 +1297,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
if (!$componentType) {
throw new \Sabre\DAV\Exception\BadRequest('Calendar objects must have a VJOURNAL, VEVENT or VTODO component');
}
if ($componentType === 'VEVENT') {
if ($componentType === 'VEVENT' && $component->DTSTART) {
$firstOccurence = $component->DTSTART->getDateTime()->getTimeStamp();
// Finding the last occurence is a bit harder
if (!isset($component->RRULE)) {
@@ -1333,7 +1336,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'etag' => md5($calendarData),
'size' => strlen($calendarData),
'componentType' => $componentType,
'firstOccurence' => $firstOccurence,
'firstOccurence' => is_null($firstOccurence) ? null : max(0, $firstOccurence),
'lastOccurence' => $lastOccurence,
'uid' => $uid,
];
+47 -10
View File
@@ -22,7 +22,9 @@
namespace OCA\DAV\CalDAV;
use OCA\DAV\DAV\Sharing\IShareable;
use Sabre\CalDAV\Backend\BackendInterface;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\PropPatch;
class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
@@ -76,7 +78,33 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
}
function getACL() {
$acl = parent::getACL();
$acl = [
[
'privilege' => '{DAV:}read',
'principal' => $this->getOwner(),
'protected' => true,
]];
if ($this->getName() !== BirthdayService::BIRTHDAY_CALENDAR_URI) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $this->getOwner(),
'protected' => true,
];
}
if ($this->getOwner() !== parent::getOwner()) {
$acl[] = [
'privilege' => '{DAV:}read',
'principal' => parent::getOwner(),
'protected' => true,
];
if ($this->canWrite()) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => parent::getOwner(),
'protected' => true,
];
}
}
/** @var CalDavBackend $calDavBackend */
$calDavBackend = $this->caldavBackend;
@@ -84,11 +112,7 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
}
function getChildACL() {
$acl = parent::getChildACL();
/** @var CalDavBackend $calDavBackend */
$calDavBackend = $this->caldavBackend;
return $calDavBackend->applyShareAcl($this->getResourceId(), $acl);
return $this->getACL();
}
function getOwner() {
@@ -99,10 +123,6 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
}
function delete() {
if ($this->getName() === BirthdayService::BIRTHDAY_CALENDAR_URI) {
throw new Forbidden();
}
if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) {
$principal = 'principal:' . parent::getOwner();
$shares = $this->getShares();
@@ -122,4 +142,21 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
}
parent::delete();
}
function propPatch(PropPatch $propPatch) {
$mutations = $propPatch->getMutations();
// If this is a shared calendar, the user can only change the enabled property, to hide it.
if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']) && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) {
throw new Forbidden();
}
parent::propPatch($propPatch);
}
private function canWrite() {
if (isset($this->calendarInfo['{http://owncloud.org/ns}read-only'])) {
return !$this->calendarInfo['{http://owncloud.org/ns}read-only'];
}
return true;
}
}
+46 -35
View File
@@ -21,15 +21,13 @@
namespace OCA\DAV\CardDAV;
use OCA\DAV\DAV\Sharing\IShareable;
use Sabre\CardDAV\Card;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\PropPatch;
class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
public function __construct(CardDavBackend $carddavBackend, array $addressBookInfo) {
parent::__construct($carddavBackend, $addressBookInfo);
}
/**
* Updates the list of shares.
*
@@ -73,7 +71,31 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
}
function getACL() {
$acl = parent::getACL();
$acl = [
[
'privilege' => '{DAV:}read',
'principal' => $this->getOwner(),
'protected' => true,
]];
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $this->getOwner(),
'protected' => true,
];
if ($this->getOwner() !== parent::getOwner()) {
$acl[] = [
'privilege' => '{DAV:}read',
'principal' => parent::getOwner(),
'protected' => true,
];
if ($this->canWrite()) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => parent::getOwner(),
'protected' => true,
];
}
}
if ($this->getOwner() === 'principals/system/system') {
$acl[] = [
'privilege' => '{DAV:}read',
@@ -82,49 +104,24 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
];
}
// add the current user
if (isset($this->addressBookInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'])) {
$owner = $this->addressBookInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'];
$acl[] = [
'privilege' => '{DAV:}read',
'principal' => $owner,
'protected' => true,
];
if ($this->addressBookInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only']) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $owner,
'protected' => true,
];
}
}
/** @var CardDavBackend $carddavBackend */
$carddavBackend = $this->carddavBackend;
return $carddavBackend->applyShareAcl($this->getResourceId(), $acl);
}
function getChildACL() {
$acl = parent::getChildACL();
if ($this->getOwner() === 'principals/system/system') {
$acl[] = [
'privilege' => '{DAV:}read',
'principal' => '{DAV:}authenticated',
'protected' => true,
];
}
/** @var CardDavBackend $carddavBackend */
$carddavBackend = $this->carddavBackend;
return $carddavBackend->applyShareAcl($this->getResourceId(), $acl);
return $this->getACL();
}
function getChild($name) {
$obj = $this->carddavBackend->getCard($this->getResourceId(), $name);
$obj = $this->carddavBackend->getCard($this->addressBookInfo['id'], $name);
if (!$obj) {
throw new NotFound('Card not found');
}
$obj['acl'] = $this->getChildACL();
return new Card($this->carddavBackend, $this->addressBookInfo, $obj);
}
/**
@@ -162,10 +159,24 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
parent::delete();
}
function propPatch(PropPatch $propPatch) {
if (isset($this->addressBookInfo['{http://owncloud.org/ns}owner-principal'])) {
throw new Forbidden();
}
parent::propPatch($propPatch);
}
public function getContactsGroups() {
/** @var CardDavBackend $cardDavBackend */
$cardDavBackend = $this->carddavBackend;
return $cardDavBackend->collectCardProperties($this->getResourceId(), 'CATEGORIES');
}
private function canWrite() {
if (isset($this->addressBookInfo['{http://owncloud.org/ns}read-only'])) {
return !$this->addressBookInfo['{http://owncloud.org/ns}read-only'];
}
return true;
}
}
+34 -10
View File
@@ -24,6 +24,7 @@ namespace OCA\DAV\CardDAV;
use OCP\Constants;
use OCP\IAddressBook;
use OCP\IURLGenerator;
use Sabre\VObject\Component\VCard;
use Sabre\VObject\Property\Text;
use Sabre\VObject\Reader;
@@ -40,21 +41,27 @@ class AddressBookImpl implements IAddressBook {
/** @var AddressBook */
private $addressBook;
/** @var IURLGenerator */
private $urlGenerator;
/**
* AddressBookImpl constructor.
*
* @param AddressBook $addressBook
* @param array $addressBookInfo
* @param CardDavBackend $backend
* @param IUrlGenerator $urlGenerator
*/
public function __construct(
AddressBook $addressBook,
array $addressBookInfo,
CardDavBackend $backend) {
CardDavBackend $backend,
IURLGenerator $urlGenerator) {
$this->addressBook = $addressBook;
$this->addressBookInfo = $addressBookInfo;
$this->backend = $backend;
$this->urlGenerator = $urlGenerator;
}
/**
@@ -83,11 +90,11 @@ class AddressBookImpl implements IAddressBook {
* @since 5.0.0
*/
public function search($pattern, $searchProperties, $options) {
$result = $this->backend->search($this->getKey(), $pattern, $searchProperties);
$results = $this->backend->search($this->getKey(), $pattern, $searchProperties);
$vCards = [];
foreach ($result as $cardData) {
$vCards[] = $this->vCard2Array($this->readCard($cardData));
foreach ($results as $result) {
$vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata']));
}
return $vCards;
@@ -100,13 +107,12 @@ class AddressBookImpl implements IAddressBook {
*/
public function createOrUpdate($properties) {
$update = false;
if (!isset($properties['UID'])) { // create a new contact
if (!isset($properties['URI'])) { // create a new contact
$uid = $this->createUid();
$uri = $uid . '.vcf';
$vCard = $this->createEmptyVCard($uid);
} else { // update existing contact
$uid = $properties['UID'];
$uri = $uid . '.vcf';
$uri = $properties['URI'];
$vCardData = $this->backend->getCard($this->getKey(), $uri);
$vCard = $this->readCard($vCardData['carddata']);
$update = true;
@@ -122,7 +128,7 @@ class AddressBookImpl implements IAddressBook {
$this->backend->createCard($this->getKey(), $uri, $vCard->serialize());
}
return $this->vCard2Array($vCard);
return $this->vCard2Array($uri, $vCard);
}
@@ -207,13 +213,31 @@ class AddressBookImpl implements IAddressBook {
/**
* create array with all vCard properties
*
* @param string $uri
* @param VCard $vCard
* @return array
*/
protected function vCard2Array(VCard $vCard) {
$result = [];
protected function vCard2Array($uri, VCard $vCard) {
$result = [
'URI' => $uri,
];
foreach ($vCard->children as $property) {
$result[$property->name] = $property->getValue();
if ($property->name === 'PHOTO' && $property->getValueType() === 'BINARY') {
$url = $this->urlGenerator->getAbsoluteURL(
$this->urlGenerator->linkTo('', 'remote.php') . '/dav/');
$url .= implode('/', [
'addressbooks',
substr($this->addressBookInfo['principaluri'], 11), //cut off 'principals/'
$this->addressBookInfo['uri'],
$uri
]) . '?photo';
$result['PHOTO'] = 'VALUE=uri:' . $url;
} else {
$result[$property->name] = $property->getValue();
}
}
if ($this->addressBookInfo['principaluri'] === 'principals/system/system' &&
$this->addressBookInfo['uri'] === 'system') {
+10 -11
View File
@@ -62,10 +62,6 @@ class CardDavBackend implements BackendInterface, SyncSupport {
'BDAY', 'UID', 'N', 'FN', 'TITLE', 'ROLE', 'NOTE', 'NICKNAME',
'ORG', 'CATEGORIES', 'EMAIL', 'TEL', 'IMPP', 'ADR', 'URL', 'GEO', 'CLOUD');
const ACCESS_OWNER = 1;
const ACCESS_READ_WRITE = 2;
const ACCESS_READ = 3;
/** @var EventDispatcherInterface */
private $dispatcher;
@@ -78,7 +74,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
*/
public function __construct(IDBConnection $db,
Principal $principalBackend,
$dispatcher ) {
EventDispatcherInterface $dispatcher = null) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->dispatcher = $dispatcher;
@@ -103,6 +99,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return array
*/
function getAddressBooksForUser($principalUri) {
$principalUriOriginal = $principalUri;
$principalUri = $this->convertPrincipal($principalUri, true);
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken'])
@@ -126,7 +123,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$result->closeCursor();
// query for shared calendars
$principals = $this->principalBackend->getGroupMembership($principalUri);
$principals = $this->principalBackend->getGroupMembership($principalUriOriginal, true);
$principals[]= $principalUri;
$query = $this->db->getQueryBuilder();
@@ -153,7 +150,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
'{http://calendarserver.org/ns/}getctag' => $row['synctoken'],
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => $row['access'] === self::ACCESS_READ,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
];
}
}
@@ -782,7 +779,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
}
$query2->andWhere($query2->expr()->eq('cp.addressbookid', $query->createNamedParameter($addressBookId)));
$query->select('c.carddata')->from($this->dbCardsTable, 'c')
$query->select('c.carddata', 'c.uri')->from($this->dbCardsTable, 'c')
->where($query->expr()->in('c.id', $query->createFunction($query2->getSQL())));
$result = $query->execute();
@@ -790,8 +787,10 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$result->closeCursor();
return array_map(function($array) {return $this->readBlob($array['carddata']);}, $cards);
return array_map(function($array) {
$array['carddata'] = $this->readBlob($array['carddata']);
return $array;
}, $cards);
}
/**
@@ -848,7 +847,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$query = $this->db->getQueryBuilder();
$query->select('*')->from($this->dbCardsTable)
->where($query->expr()->eq('uri', $query->createNamedParameter($uri)))
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)));
->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)));
$queryResult = $query->execute();
$contact = $queryResult->fetch();
$queryResult->closeCursor();
+9 -5
View File
@@ -22,6 +22,7 @@
namespace OCA\DAV\CardDAV;
use OCP\Contacts\IManager;
use OCP\IURLGenerator;
class ContactsManager {
@@ -37,26 +38,29 @@ class ContactsManager {
/**
* @param IManager $cm
* @param string $userId
* @param IURLGenerator $urlGenerator
*/
public function setupContactsProvider(IManager $cm, $userId) {
public function setupContactsProvider(IManager $cm, $userId, IURLGenerator $urlGenerator) {
$addressBooks = $this->backend->getAddressBooksForUser("principals/users/$userId");
$this->register($cm, $addressBooks);
$this->register($cm, $addressBooks, $urlGenerator);
$addressBooks = $this->backend->getAddressBooksForUser("principals/system/system");
$this->register($cm, $addressBooks);
$this->register($cm, $addressBooks, $urlGenerator);
}
/**
* @param IManager $cm
* @param $addressBooks
* @param IURLGenerator $urlGenerator
*/
private function register(IManager $cm, $addressBooks) {
private function register(IManager $cm, $addressBooks, $urlGenerator) {
foreach ($addressBooks as $addressBookInfo) {
$addressBook = new \OCA\DAV\CardDAV\AddressBook($this->backend, $addressBookInfo);
$cm->registerAddressBook(
new AddressBookImpl(
$addressBook,
$addressBookInfo,
$this->backend
$this->backend,
$urlGenerator
)
);
}
+2 -1
View File
@@ -54,6 +54,7 @@ class Converter {
$vCard->add(new Text($vCard, 'CLOUD', $cloudId));
}
if ($image) {
unset($vCard->PHOTO);
$vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]);
}
$vCard->validate();
@@ -161,7 +162,7 @@ class Converter {
*/
private function getAvatarImage(IUser $user) {
try {
$image = $user->getAvatarImage(-1);
$image = $user->getAvatarImage(96);
return $image;
} catch (\Exception $ex) {
return null;
+156
View File
@@ -0,0 +1,156 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\CardDAV;
use OCP\ILogger;
use Sabre\CardDAV\Card;
use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
use Sabre\VObject\Parameter;
use Sabre\VObject\Property\Binary;
use Sabre\VObject\Reader;
class ImageExportPlugin extends ServerPlugin {
/** @var Server */
protected $server;
/** @var ILogger */
private $logger;
public function __construct(ILogger $logger) {
$this->logger = $logger;
}
/**
* Initializes the plugin and registers event handlers
*
* @param Server $server
* @return void
*/
function initialize(Server $server) {
$this->server = $server;
$this->server->on('method:GET', [$this, 'httpGet'], 90);
}
/**
* Intercepts GET requests on addressbook urls ending with ?photo.
*
* @param RequestInterface $request
* @param ResponseInterface $response
* @return bool|void
*/
function httpGet(RequestInterface $request, ResponseInterface $response) {
$queryParams = $request->getQueryParameters();
// TODO: in addition to photo we should also add logo some point in time
if (!array_key_exists('photo', $queryParams)) {
return true;
}
$path = $request->getPath();
$node = $this->server->tree->getNodeForPath($path);
if (!($node instanceof Card)) {
return true;
}
$this->server->transactionType = 'carddav-image-export';
// Checking ACL, if available.
if ($aclPlugin = $this->server->getPlugin('acl')) {
/** @var \Sabre\DAVACL\Plugin $aclPlugin */
$aclPlugin->checkPrivileges($path, '{DAV:}read');
}
if ($result = $this->getPhoto($node)) {
$response->setHeader('Content-Type', $result['Content-Type']);
$response->setStatus(200);
$response->setBody($result['body']);
// Returning false to break the event chain
return false;
}
return true;
}
function getPhoto(Card $node) {
// TODO: this is kind of expensive - load carddav data from database and parse it
// we might want to build up a cache one day
try {
$vObject = $this->readCard($node->get());
if (!$vObject->PHOTO) {
return false;
}
$photo = $vObject->PHOTO;
$type = $this->getType($photo);
$val = $photo->getValue();
if ($photo->getValueType() === 'URI') {
$parsed = \Sabre\URI\parse($val);
//only allow data://
if ($parsed['scheme'] !== 'data') {
return false;
}
if (substr_count($parsed['path'], ';') === 1) {
list($type,) = explode(';', $parsed['path']);
}
$val = file_get_contents($val);
}
return [
'Content-Type' => $type,
'body' => $val
];
} catch(\Exception $ex) {
$this->logger->logException($ex);
}
return false;
}
private function readCard($cardData) {
return Reader::read($cardData);
}
/**
* @param Binary $photo
* @return Parameter
*/
private function getType($photo) {
$params = $photo->parameters();
if (isset($params['TYPE']) || isset($params['MEDIATYPE'])) {
/** @var Parameter $typeParam */
$typeParam = isset($params['TYPE']) ? $params['TYPE'] : $params['MEDIATYPE'];
$type = $typeParam->getValue();
if (strpos($type, 'image/') === 0) {
return $type;
} else {
return 'image/' . strtolower($type);
}
}
return '';
}
}
+2
View File
@@ -263,6 +263,8 @@ class SyncService {
$systemAddressBook = $this->getLocalSystemAddressBook();
$this->userManager->callForAllUsers(function($user) use ($systemAddressBook, $progressCallback) {
$this->updateUser($user);
// avatar fetching sets up FS, need to clear again
\OC_Util::tearDownFS();
if (!is_null($progressCallback)) {
$progressCallback();
}
+15
View File
@@ -23,7 +23,10 @@
namespace OCA\DAV\Connector;
use OCA\DAV\Connector\Sabre\DavAclPlugin;
use Sabre\DAV\INode;
use Sabre\DAV\PropFind;
use Sabre\HTTP\URLUtil;
use Sabre\DAVACL\Xml\Property\Principal;
class LegacyDAVACL extends DavAclPlugin {
@@ -67,4 +70,16 @@ class LegacyDAVACL extends DavAclPlugin {
}
return "principals/$name";
}
function propFind(PropFind $propFind, INode $node) {
/* Overload current-user-principal */
$propFind->handle('{DAV:}current-user-principal', function () {
if ($url = parent::getCurrentUserPrincipal()) {
return new Principal(Principal::HREF, $url . '/');
} else {
return new Principal(Principal::UNAUTHENTICATED);
}
});
parent::propFind($propFind, $node);
}
}
+6 -1
View File
@@ -61,6 +61,11 @@ class PublicAuth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
return false;
}
if ((int)$linkItem['share_type'] === \OCP\Share::SHARE_TYPE_LINK &&
$this->config->getAppValue('core', 'shareapi_allow_public_upload', 'yes') !== 'yes') {
$this->share['permissions'] &= ~(\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE);
}
// check if the share is password protected
if (isset($linkItem['share_with'])) {
if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) {
@@ -84,7 +89,7 @@ class PublicAuth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
}
return true;
} else if (\OC::$server->getSession()->exists('public_link_authenticated')
&& \OC::$server->getSession()->get('public_link_authenticated') === $linkItem['id']) {
&& \OC::$server->getSession()->get('public_link_authenticated') === (string)$linkItem['id']) {
return true;
} else {
return false;
+72 -18
View File
@@ -30,6 +30,7 @@
namespace OCA\DAV\Connector\Sabre;
use Exception;
use OC\AppFramework\Http\Request;
use OCP\IRequest;
use OCP\ISession;
use OCP\IUserSession;
@@ -48,6 +49,8 @@ class Auth extends AbstractBasic {
private $userSession;
/** @var IRequest */
private $request;
/** @var string */
private $currentUser;
/**
* @param ISession $session
@@ -130,7 +133,46 @@ class Auth extends AbstractBasic {
$msg = $e->getMessage();
throw new ServiceUnavailable("$class: $msg");
}
}
}
/**
* Checks whether a CSRF check is required on the request
*
* @return bool
*/
private function requiresCSRFCheck() {
// GET requires no check at all
if($this->request->getMethod() === 'GET') {
return false;
}
// Official ownCloud clients require no checks
if($this->request->isUserAgent([
Request::USER_AGENT_OWNCLOUD_DESKTOP,
Request::USER_AGENT_OWNCLOUD_ANDROID,
Request::USER_AGENT_OWNCLOUD_IOS,
])) {
return false;
}
// If not logged-in no check is required
if(!$this->userSession->isLoggedIn()) {
return false;
}
// POST always requires a check
if($this->request->getMethod() === 'POST') {
return true;
}
// If logged-in AND DAV authenticated no check is required
if($this->userSession->isLoggedIn() &&
$this->isDavAuthenticated($this->userSession->getUser()->getUID())) {
return false;
}
return true;
}
/**
* @param RequestInterface $request
@@ -139,27 +181,33 @@ class Auth extends AbstractBasic {
* @throws NotAuthenticated
*/
private function auth(RequestInterface $request, ResponseInterface $response) {
// If request is not GET and not authenticated via WebDAV a requesttoken is required
if($this->userSession->isLoggedIn() &&
$this->request->getMethod() !== 'GET' &&
!$this->isDavAuthenticated($this->userSession->getUser()->getUID())) {
if(!$this->request->passesCSRFCheck()) {
$forcedLogout = false;
if(!$this->request->passesCSRFCheck() &&
$this->requiresCSRFCheck()) {
// In case of a fail with POST we need to recheck the credentials
if($this->request->getMethod() === 'POST') {
$forcedLogout = true;
} else {
$response->setStatus(401);
throw new \Sabre\DAV\Exception\NotAuthenticated('CSRF check not passed.');
}
}
if (\OC_User::handleApacheAuth() ||
//Fix for broken webdav clients
($this->userSession->isLoggedIn() && is_null($this->session->get(self::DAV_AUTHENTICATED))) ||
//Well behaved clients that only send the cookie are allowed
($this->userSession->isLoggedIn() && $this->session->get(self::DAV_AUTHENTICATED) === $this->userSession->getUser()->getUID() && $request->getHeader('Authorization') === null)
) {
$user = $this->userSession->getUser()->getUID();
\OC_Util::setupFS($user);
$this->currentUser = $user;
$this->session->close();
return [true, $this->principalPrefix . $user];
if($forcedLogout) {
$this->userSession->logout();
} else {
if (\OC_User::handleApacheAuth() ||
//Fix for broken webdav clients
($this->userSession->isLoggedIn() && is_null($this->session->get(self::DAV_AUTHENTICATED))) ||
//Well behaved clients that only send the cookie are allowed
($this->userSession->isLoggedIn() && $this->session->get(self::DAV_AUTHENTICATED) === $this->userSession->getUser()->getUID() && $request->getHeader('Authorization') === null)
) {
$user = $this->userSession->getUser()->getUID();
\OC_Util::setupFS($user);
$this->currentUser = $user;
$this->session->close();
return [true, $this->principalPrefix . $user];
}
}
if (!$this->userSession->isLoggedIn() && in_array('XMLHttpRequest', explode(',', $request->getHeader('X-Requested-With')))) {
@@ -169,6 +217,12 @@ class Auth extends AbstractBasic {
throw new \Sabre\DAV\Exception\NotAuthenticated('Cannot authenticate over ajax calls');
}
return parent::check($request, $response);
$data = parent::check($request, $response);
if($data[0] === true) {
$startPos = strrpos($data[1], '/') + 1;
$user = $this->userSession->getUser()->getUID();
$data[1] = substr_replace($data[1], $user, $startPos);
}
return $data;
}
}
@@ -327,7 +327,7 @@ class CustomPropertiesBackend implements BackendInterface {
$result = $this->connection->executeQuery(
$sql,
array($this->user, rtrim($path, '/') . '/%', $requestedProperties),
array($this->user, $this->connection->escapeLikeParameter(rtrim($path, '/')) . '/%', $requestedProperties),
array(null, null, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
);
+38 -14
View File
@@ -27,6 +27,7 @@
namespace OCA\DAV\Connector\Sabre;
use OCP\Files\ForbiddenException;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\IFile;
use \Sabre\DAV\PropFind;
@@ -75,16 +76,26 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
*/
private $fileView;
/**
* @var IRequest
*/
private $request;
/**
* @param \Sabre\DAV\Tree $tree
* @param \OC\Files\View $view
* @param \OCP\IRequest $request
* @param bool $isPublic
*/
public function __construct(\Sabre\DAV\Tree $tree,
\OC\Files\View $view,
$isPublic = false) {
public function __construct(
\Sabre\DAV\Tree $tree,
\OC\Files\View $view,
\OCP\IRequest $request,
$isPublic = false
) {
$this->tree = $tree;
$this->fileView = $view;
$this->request = $request;
$this->isPublic = $isPublic;
}
@@ -192,7 +203,18 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
if (!($node instanceof IFile)) return;
// adds a 'Content-Disposition: attachment' header
$response->addHeader('Content-Disposition', 'attachment');
$filename = $node->getName();
if ($this->request->isUserAgent(
[
\OC\AppFramework\Http\Request::USER_AGENT_IE,
\OC\AppFramework\Http\Request::USER_AGENT_ANDROID_MOBILE_CHROME,
\OC\AppFramework\Http\Request::USER_AGENT_FREEBOX,
])) {
$response->addHeader('Content-Disposition', 'attachment; filename="' . rawurlencode($filename) . '"');
} else {
$response->addHeader('Content-Disposition', 'attachment; filename*=UTF-8\'\'' . rawurlencode($filename)
. '; filename="' . rawurlencode($filename) . '"');
}
if ($node instanceof \OCA\DAV\Connector\Sabre\File) {
//Add OC-Checksum header
@@ -235,6 +257,16 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
$propFind->handle(self::GETETAG_PROPERTYNAME, function() use ($node) {
return $node->getEtag();
});
$propFind->handle(self::OWNER_ID_PROPERTYNAME, function() use ($node) {
$owner = $node->getOwner();
return $owner->getUID();
});
$propFind->handle(self::OWNER_DISPLAY_NAME_PROPERTYNAME, function() use ($node) {
$owner = $node->getOwner();
$displayName = $owner->getDisplayName();
return $displayName;
});
}
if ($node instanceof \OCA\DAV\Connector\Sabre\File) {
@@ -247,6 +279,8 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
}
} catch (StorageNotAvailableException $e) {
return false;
} catch (ForbiddenException $e) {
return false;
}
return false;
});
@@ -267,16 +301,6 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
return $node->getSize();
});
}
$propFind->handle(self::OWNER_ID_PROPERTYNAME, function() use ($node) {
$owner = $node->getOwner();
return $owner->getUID();
});
$propFind->handle(self::OWNER_DISPLAY_NAME_PROPERTYNAME, function() use ($node) {
$owner = $node->getOwner();
$displayName = $owner->getDisplayName();
return $displayName;
});
}
/**
+1 -1
View File
@@ -230,7 +230,7 @@ abstract class Node implements \Sabre\DAV\INode {
if ($this->info->isDeletable()) {
$p .= 'D';
}
if ($this->info->isDeletable()) {
if ($this->info->isUpdateable()) {
$p .= 'NV'; // Renameable, Moveable
}
if ($this->info->getType() === \OCP\Files\FileInfo::TYPE_FILE) {
+9 -2
View File
@@ -102,9 +102,11 @@ class ObjectTree extends \Sabre\DAV\Tree {
* Returns the INode object for the requested path
*
* @param string $path
* @throws \Sabre\DAV\Exception\ServiceUnavailable
* @throws \Sabre\DAV\Exception\NotFound
* @return \Sabre\DAV\INode
* @throws InvalidPath
* @throws \Sabre\DAV\Exception\Locked
* @throws \Sabre\DAV\Exception\NotFound
* @throws \Sabre\DAV\Exception\ServiceUnavailable
*/
public function getNodeForPath($path) {
if (!$this->fileView) {
@@ -279,6 +281,11 @@ class ObjectTree extends \Sabre\DAV\Tree {
throw new InvalidPath($ex->getMessage());
}
// Webdav's copy will implicitly do a delete+create, so only create+delete permissions are required
if (!$this->fileView->isCreatable($destinationDir)) {
throw new \Sabre\DAV\Exception\Forbidden();
}
try {
$this->fileView->copy($source, $destination);
} catch (StorageNotAvailableException $e) {
+3 -2
View File
@@ -132,10 +132,11 @@ class Principal implements BackendInterface {
* Returns the list of groups a principal is a member of
*
* @param string $principal
* @param bool $needGroups
* @return array
* @throws Exception
*/
public function getGroupMembership($principal) {
public function getGroupMembership($principal, $needGroups = false) {
list($prefix, $name) = URLUtil::splitPath($principal);
if ($prefix === $this->principalPrefix) {
@@ -144,7 +145,7 @@ class Principal implements BackendInterface {
throw new Exception('Principal not found');
}
if ($this->hasGroups) {
if ($this->hasGroups || $needGroups) {
$groups = $this->groupManager->getUserGroups($user);
$groups = array_map(function($group) {
/** @var IGroup $group */
+17 -1
View File
@@ -26,6 +26,7 @@
namespace OCA\DAV\Connector\Sabre;
use OCA\DAV\Files\BrowserErrorPagePlugin;
use OCP\Files\Mount\IMountManager;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -110,10 +111,15 @@ class ServerFactory {
if($this->request->isUserAgent([
'/WebDAVFS/',
'/Microsoft Office OneNote 2013/',
'/Microsoft-WebDAV-MiniRedir/',
])) {
$server->addPlugin(new \OCA\DAV\Connector\Sabre\FakeLockerPlugin());
}
if (BrowserErrorPagePlugin::isBrowserRequest($this->request)) {
$server->addPlugin(new BrowserErrorPagePlugin());
}
// wait with registering these until auth is handled and the filesystem is setup
$server->on('beforeMethod', function () use ($server, $objectTree, $viewCallBack) {
// ensure the skeleton is copied
@@ -131,11 +137,21 @@ class ServerFactory {
}
$objectTree->init($root, $view, $this->mountManager);
$server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesPlugin($objectTree, $view));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesPlugin(
$objectTree,
$view,
$this->request
));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\QuotaPlugin($view));
if($this->userSession->isLoggedIn()) {
$server->addPlugin(new \OCA\DAV\Connector\Sabre\TagsPlugin($objectTree, $this->tagManager));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\SharesPlugin(
$objectTree,
$this->userSession,
$userFolder,
\OC::$server->getShareManager()
));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin(\OC::$server->getCommentsManager(), $this->userSession));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesReportPlugin(
$objectTree,
@@ -0,0 +1,177 @@
<?php
/**
* @author Vincent Petry <pvince81@owncloud.com>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\Connector\Sabre;
use \Sabre\DAV\PropFind;
use \Sabre\DAV\PropPatch;
use OCP\IUserSession;
use OCP\Share\IShare;
use OCA\DAV\Connector\Sabre\ShareTypeList;
/**
* Sabre Plugin to provide share-related properties
*/
class SharesPlugin extends \Sabre\DAV\ServerPlugin {
const NS_OWNCLOUD = 'http://owncloud.org/ns';
const SHARETYPES_PROPERTYNAME = '{http://owncloud.org/ns}share-types';
/**
* Reference to main server object
*
* @var \Sabre\DAV\Server
*/
private $server;
/**
* @var \OCP\Share\IManager
*/
private $shareManager;
/**
* @var \Sabre\DAV\Tree
*/
private $tree;
/**
* @var string
*/
private $userId;
/**
* @var \OCP\Files\Folder
*/
private $userFolder;
/**
* @var IShare[]
*/
private $cachedShareTypes;
/**
* @param \Sabre\DAV\Tree $tree tree
* @param IUserSession $userSession user session
* @param \OCP\Files\Folder $userFolder user home folder
* @param \OCP\Share\IManager $shareManager share manager
*/
public function __construct(
\Sabre\DAV\Tree $tree,
IUserSession $userSession,
\OCP\Files\Folder $userFolder,
\OCP\Share\IManager $shareManager
) {
$this->tree = $tree;
$this->shareManager = $shareManager;
$this->userFolder = $userFolder;
$this->userId = $userSession->getUser()->getUID();
$this->cachedShareTypes = [];
}
/**
* This initializes the plugin.
*
* This function is called by \Sabre\DAV\Server, after
* addPlugin is called.
*
* This method should set up the required event subscriptions.
*
* @param \Sabre\DAV\Server $server
*/
public function initialize(\Sabre\DAV\Server $server) {
$server->xml->namespacesMap[self::NS_OWNCLOUD] = 'oc';
$server->xml->elementMap[self::SHARETYPES_PROPERTYNAME] = 'OCA\\DAV\\Connector\\Sabre\\ShareTypeList';
$server->protectedProperties[] = self::SHARETYPES_PROPERTYNAME;
$this->server = $server;
$this->server->on('propFind', array($this, 'handleGetProperties'));
}
/**
* Return a list of share types for outgoing shares
*
* @param \OCP\Files\Node $node file node
*
* @return int[] array of share types
*/
private function getShareTypes(\OCP\Files\Node $node) {
$shareTypes = [];
$requestedShareTypes = [
\OCP\Share::SHARE_TYPE_USER,
\OCP\Share::SHARE_TYPE_GROUP,
\OCP\Share::SHARE_TYPE_LINK,
\OCP\Share::SHARE_TYPE_REMOTE
];
foreach ($requestedShareTypes as $requestedShareType) {
// one of each type is enough to find out about the types
$shares = $this->shareManager->getSharesBy(
$this->userId,
$requestedShareType,
$node,
false,
1
);
if (!empty($shares)) {
$shareTypes[] = $requestedShareType;
}
}
return $shareTypes;
}
/**
* Adds shares to propfind response
*
* @param PropFind $propFind propfind object
* @param \Sabre\DAV\INode $sabreNode sabre node
*/
public function handleGetProperties(
PropFind $propFind,
\Sabre\DAV\INode $sabreNode
) {
if (!($sabreNode instanceof \OCA\DAV\Connector\Sabre\Node)) {
return;
}
// need prefetch ?
if ($sabreNode instanceof \OCA\DAV\Connector\Sabre\Directory
&& $propFind->getDepth() !== 0
&& !is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME))
) {
$folderNode = $this->userFolder->get($propFind->getPath());
$children = $folderNode->getDirectoryListing();
$this->cachedShareTypes[$folderNode->getId()] = $this->getShareTypes($folderNode);
foreach ($children as $childNode) {
$this->cachedShareTypes[$childNode->getId()] = $this->getShareTypes($childNode);
}
}
$propFind->handle(self::SHARETYPES_PROPERTYNAME, function() use ($sabreNode) {
if (isset($this->cachedShareTypes[$sabreNode->getId()])) {
$shareTypes = $this->cachedShareTypes[$sabreNode->getId()];
} else {
$node = $this->userFolder->get($sabreNode->getPath());
$shareTypes = $this->getShareTypes($node);
}
return new ShareTypeList($shareTypes);
});
}
}
@@ -0,0 +1,87 @@
<?php
/**
* @author Vincent Petry <pvince81@owncloud.com>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\Connector\Sabre;
use Sabre\Xml\Element;
use Sabre\Xml\Reader;
use Sabre\Xml\Writer;
/**
* ShareTypeList property
*
* This property contains multiple "share-type" elements, each containing a share type.
*/
class ShareTypeList implements Element {
const NS_OWNCLOUD = 'http://owncloud.org/ns';
/**
* Share types
*
* @var int[]
*/
private $shareTypes;
/**
* @param int[] $shareTypes
*/
public function __construct($shareTypes) {
$this->shareTypes = $shareTypes;
}
/**
* Returns the share types
*
* @return int[]
*/
public function getShareTypes() {
return $this->shareTypes;
}
/**
* The deserialize method is called during xml parsing.
*
* @param Reader $reader
* @return mixed
*/
static function xmlDeserialize(Reader $reader) {
$shareTypes = [];
foreach ($reader->parseInnerTree() as $elem) {
if ($elem['name'] === '{' . self::NS_OWNCLOUD . '}share-type') {
$shareTypes[] = (int)$elem['value'];
}
}
return new self($shareTypes);
}
/**
* The xmlSerialize metod is called during xml writing.
*
* @param Writer $writer
* @return void
*/
function xmlSerialize(Writer $writer) {
foreach ($this->shareTypes as $shareType) {
$writer->writeElement('{' . self::NS_OWNCLOUD . '}share-type', $shareType);
}
}
}
+8
View File
@@ -190,6 +190,14 @@ class Backend {
'principal' => $share['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}principal'],
'protected' => true,
];
} else if ($this->resourceType === 'calendar') {
// Allow changing the properties of read only calendars,
// so users can change the visibility.
$acl[] = [
'privilege' => '{DAV:}write-properties',
'principal' => $share['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}principal'],
'protected' => true,
];
}
}
return $acl;
@@ -0,0 +1,116 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\Files;
use OC\AppFramework\Http\Request;
use OC_Template;
use OCP\IRequest;
use Sabre\DAV\Exception;
use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
class BrowserErrorPagePlugin extends ServerPlugin {
/** @var Server */
private $server;
/**
* This initializes the plugin.
*
* This function is called by Sabre\DAV\Server, after
* addPlugin is called.
*
* This method should set up the required event subscriptions.
*
* @param Server $server
* @return void
*/
function initialize(Server $server) {
$this->server = $server;
$server->on('exception', array($this, 'logException'), 1000);
}
/**
* @param IRequest $request
* @return bool
*/
public static function isBrowserRequest(IRequest $request) {
if ($request->getMethod() !== 'GET') {
return false;
}
return $request->isUserAgent([
Request::USER_AGENT_IE,
Request::USER_AGENT_MS_EDGE,
Request::USER_AGENT_CHROME,
Request::USER_AGENT_FIREFOX,
Request::USER_AGENT_SAFARI,
]);
}
/**
* @param \Exception $ex
*/
public function logException(\Exception $ex) {
if ($ex instanceof Exception) {
$httpCode = $ex->getHTTPCode();
$headers = $ex->getHTTPHeaders($this->server);
} else {
$httpCode = 500;
$headers = [];
}
$this->server->httpResponse->addHeaders($headers);
$this->server->httpResponse->setStatus($httpCode);
$body = $this->generateBody($ex);
$this->server->httpResponse->setBody($body);
$this->sendResponse();
}
/**
* @codeCoverageIgnore
* @param \Exception $ex
* @param int $httpCode
* @return bool|string
*/
public function generateBody(\Exception $exception) {
$request = \OC::$server->getRequest();
$content = new OC_Template('dav', 'exception', 'guest');
$content->assign('title', $this->server->httpResponse->getStatusText());
$content->assign('message', $exception->getMessage());
$content->assign('errorClass', get_class($exception));
$content->assign('errorMsg', $exception->getMessage());
$content->assign('errorCode', $exception->getCode());
$content->assign('file', $exception->getFile());
$content->assign('line', $exception->getLine());
$content->assign('trace', $exception->getTraceAsString());
$content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false));
$content->assign('remoteAddr', $request->getRemoteAddress());
$content->assign('requestID', $request->getId());
return $content->fetchPage();
}
/*
* @codeCoverageIgnore
*/
public function sendResponse() {
$this->server->sapi->sendResponse($this->server->httpResponse);
}
}

Some files were not shown because too many files have changed in this diff Show More