diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-12 18:48:00 +0200 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-14 16:39:48 +0200 |
commit | 5bbba490c4444f7977e7ad0ce4266acbd67eee86 (patch) | |
tree | d9b9ebe78d82ba03c6be37e93be437b55efdfc5a /apps/files_sharing | |
parent | 2f23054b0126ec3497a7b632ff2399f6f3843a0f (diff) | |
download | nextcloud-server-5bbba490c4444f7977e7ad0ce4266acbd67eee86.tar.gz nextcloud-server-5bbba490c4444f7977e7ad0ce4266acbd67eee86.zip |
move some stuff over to the federatedfilesharing app
Diffstat (limited to 'apps/files_sharing')
-rw-r--r-- | apps/files_sharing/ajax/external.php | 74 | ||||
-rw-r--r-- | apps/files_sharing/appinfo/app.php | 3 | ||||
-rw-r--r-- | apps/files_sharing/appinfo/routes.php | 2 | ||||
-rw-r--r-- | apps/files_sharing/js/external.js | 164 | ||||
-rw-r--r-- | apps/files_sharing/js/public.js | 4 | ||||
-rw-r--r-- | apps/files_sharing/tests/js/externalSpec.js | 245 |
6 files changed, 1 insertions, 491 deletions
diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php deleted file mode 100644 index 20c3706c12d..00000000000 --- a/apps/files_sharing/ajax/external.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php -/** - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <nickvergessen@owncloud.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <icewind@owncloud.com> - * @author Roeland Jago Douma <rullzer@owncloud.com> - * @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/> - * - */ - -OCP\JSON::callCheck(); -OCP\JSON::checkLoggedIn(); -OCP\JSON::checkAppEnabled('files_sharing'); - -$l = \OC::$server->getL10N('files_sharing'); - -$federatedSharingApp = new \OCA\FederatedFileSharing\AppInfo\Application('federatedfilesharing'); -$federatedShareProvider = $federatedSharingApp->getFederatedShareProvider(); - -// check if server admin allows to mount public links from other servers -if ($federatedShareProvider->isIncomingServer2serverShareEnabled() === false) { - \OCP\JSON::error(array('data' => array('message' => $l->t('Server to server sharing is not enabled on this server')))); - exit(); -} - -$token = $_POST['token']; -$remote = $_POST['remote']; -$password = isset($_POST['password']) ? $_POST['password'] : ''; - -$urlGenerator = \OC::$server->getURLGenerator(); - -$shareWith = \OCP\User::getUser() . '@' . $urlGenerator->getAbsoluteURL('/'); - -$httpClient = \OC::$server->getHTTPClientService()->newClient(); - -try { - $response = $httpClient->post($remote . '/index.php/apps/federatedfilesharing/saveToNextcloud', - [ - 'body' => - [ - 'token' => $token, - 'shareWith' => rtrim($shareWith, '/'), - 'password' => $password - ] - ] - ); -} catch (\Exception $e) { - if (empty($password)) { - $message = $l->t("Couldn't establish a federated share."); - } else { - $message = $l->t("Couldn't establish a federated share, maybe the password was wrong."); - } - \OCP\JSON::error(array('data' => array('message' => $message))); - exit(); -} - -\OCP\JSON::success(array('data' => array('message' => $l->t('Federated Share request was successful, you will receive a invitation. Check your notifications.')))); diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index c6ae6903eec..219fa298d51 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -46,9 +46,6 @@ $eventDispatcher->addListener( function() { \OCP\Util::addScript('files_sharing', 'share'); \OCP\Util::addScript('files_sharing', 'sharetabview'); - if (\OC::$server->getConfig()->getAppValue('files_sharing', 'incoming_server2server_share_enabled', 'yes') === 'yes') { - \OCP\Util::addScript('files_sharing', 'external'); - } \OCP\Util::addStyle('files_sharing', 'sharetabview'); } ); diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php index 0e72934d094..26d32c3a990 100644 --- a/apps/files_sharing/appinfo/routes.php +++ b/apps/files_sharing/appinfo/routes.php @@ -53,8 +53,6 @@ $this->create('files_sharing_ajax_publicpreview', 'ajax/publicpreview.php') ->actionInclude('files_sharing/ajax/publicpreview.php'); $this->create('sharing_external_shareinfo', '/shareinfo') ->actionInclude('files_sharing/ajax/shareinfo.php'); -$this->create('sharing_external_add', '/external') - ->actionInclude('files_sharing/ajax/external.php'); // OCS API diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js deleted file mode 100644 index a04a5721f37..00000000000 --- a/apps/files_sharing/js/external.js +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ -(function () { - /** - * Shows "add external share" dialog. - * - * @param {String} remote remote server URL - * @param {String} owner owner name - * @param {String} name name of the shared folder - * @param {String} token authentication token - * @param {bool} passwordProtected true if the share is password protected - */ - OCA.Sharing.showAddExternalDialog = function (share, passwordProtected, callback) { - var remote = share.remote; - var owner = share.ownerDisplayName || share.owner; - var name = share.name; - var remoteClean = (remote.substr(0, 8) === 'https://') ? remote.substr(8) : remote.substr(7); - - if (!passwordProtected) { - OC.dialogs.confirm( - t( - 'files_sharing', - 'Do you want to add the remote share {name} from {owner}@{remote}?', - {name: name, owner: owner, remote: remoteClean} - ), - t('files_sharing','Remote share'), - function (result) { - callback(result, share); - }, - true - ).then(this._adjustDialog); - } else { - OC.dialogs.prompt( - t( - 'files_sharing', - 'Do you want to add the remote share {name} from {owner}@{remote}?', - {name: name, owner: owner, remote: remoteClean} - ), - t('files_sharing','Remote share'), - function (result, password) { - share.password = password; - callback(result, share); - }, - true, - t('files_sharing','Remote share password'), - true - ).then(this._adjustDialog); - } - }; - - OCA.Sharing._adjustDialog = function() { - var $dialog = $('.oc-dialog:visible'); - var $buttons = $dialog.find('button'); - // hack the buttons - $dialog.find('.ui-icon').remove(); - $buttons.eq(0).text(t('core', 'Cancel')); - $buttons.eq(1).text(t('files_sharing', 'Add remote share')); - }; - - OCA.Sharing.ExternalShareDialogPlugin = { - - filesApp: null, - - attach: function(filesApp) { - var self = this; - this.filesApp = filesApp; - this.processIncomingShareFromUrl(); - - if (!$('#header').find('div.notifications').length) { - // No notification app, display the modal - this.processSharesToConfirm(); - } - - $('body').on('OCA.Notification.Action', function(e) { - if (e.notification.app === 'files_sharing' && e.notification.object_type === 'remote_share' && e.action.type === 'POST') { - // User accepted a remote share reload - self.filesApp.fileList.reload(); - } - }); - }, - - /** - * Process incoming remote share that might have been passed - * through the URL - */ - processIncomingShareFromUrl: function() { - var fileList = this.filesApp.fileList; - var params = OC.Util.History.parseUrlQuery(); - //manually add server-to-server share - if (params.remote && params.token && params.owner && params.name) { - - var callbackAddShare = function(result, share) { - var password = share.password || ''; - if (result) { - $.post(OC.generateUrl('apps/files_sharing/external'), { - remote: share.remote, - token: share.token, - owner: share.owner, - ownerDisplayName: share.ownerDisplayName || share.owner, - name: share.name, - password: password}, function(result) { - OC.Notification.showTemporary(result.data.message); - }); - } - }; - - // clear hash, it is unlikely that it contain any extra parameters - location.hash = ''; - params.passwordProtected = parseInt(params.protected, 10) === 1; - OCA.Sharing.showAddExternalDialog( - params, - params.passwordProtected, - callbackAddShare - ); - } - }, - - /** - * Retrieve a list of remote shares that need to be approved - */ - processSharesToConfirm: function() { - var fileList = this.filesApp.fileList; - // check for new server-to-server shares which need to be approved - $.get(OC.generateUrl('/apps/files_sharing/api/externalShares'), - {}, - function(shares) { - var index; - for (index = 0; index < shares.length; ++index) { - OCA.Sharing.showAddExternalDialog( - shares[index], - false, - function(result, share) { - if (result) { - // Accept - $.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id}) - .then(function() { - fileList.reload(); - }); - } else { - // Delete - $.ajax({ - url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id), - type: 'DELETE' - }); - } - } - ); - } - - }); - - } - }; -})(); - -OC.Plugins.register('OCA.Files.App', OCA.Sharing.ExternalShareDialogPlugin); - diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 6bc31879d0f..a7d0c15a01a 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -356,7 +356,7 @@ OCA.Sharing.PublicApp = { toggleLoading(); - if (remote.indexOf('@') == -1) { + if (remote.indexOf('@') === -1) { this._legacySaveToNextcloud(remote, token, owner, ownerDisplayName, name, isProtected); toggleLoading(); return; @@ -380,8 +380,6 @@ OCA.Sharing.PublicApp = { } ).fail( function (jqXHR) { - console.log("ERROR!"); - console.log(jqXHR); OC.dialogs.alert(JSON.parse(jqXHR.responseText).message, t('files_sharing', 'Failed to add the public link to your Nextcloud')); toggleLoading(); diff --git a/apps/files_sharing/tests/js/externalSpec.js b/apps/files_sharing/tests/js/externalSpec.js deleted file mode 100644 index 362df49252b..00000000000 --- a/apps/files_sharing/tests/js/externalSpec.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ - -describe('OCA.Sharing external tests', function() { - var plugin; - var urlQueryStub; - var promptDialogStub; - var confirmDialogStub; - - function dummyShowDialog() { - var deferred = $.Deferred(); - deferred.resolve(); - return deferred.promise(); - } - - beforeEach(function() { - plugin = OCA.Sharing.ExternalShareDialogPlugin; - urlQueryStub = sinon.stub(OC.Util.History, 'parseUrlQuery'); - - confirmDialogStub = sinon.stub(OC.dialogs, 'confirm', dummyShowDialog); - promptDialogStub = sinon.stub(OC.dialogs, 'prompt', dummyShowDialog); - - plugin.filesApp = { - fileList: { - reload: sinon.stub() - } - }; - }); - afterEach(function() { - urlQueryStub.restore(); - confirmDialogStub.restore(); - promptDialogStub.restore(); - plugin = null; - }); - describe('confirmation dialog from URL', function() { - var testShare; - - /** - * Checks that the server call's query matches what is - * expected. - * - * @param {Object} expectedQuery expected query params - */ - function checkRequest(expectedQuery) { - var request = fakeServer.requests[0]; - var query = OC.parseQueryString(request.requestBody); - expect(request.method).toEqual('POST'); - expect(query).toEqual(expectedQuery); - - request.respond( - 200, - {'Content-Type': 'application/json'}, - JSON.stringify({status: 'success'}) - ); - expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true); - } - - beforeEach(function() { - testShare = { - remote: 'http://example.com/owncloud', - token: 'abcdefg', - owner: 'theowner', - ownerDisplayName: 'The Generous Owner', - name: 'the share name' - }; - }); - it('does nothing when no share was passed in URL', function() { - urlQueryStub.returns({}); - plugin.processIncomingShareFromUrl(); - expect(promptDialogStub.notCalled).toEqual(true); - expect(confirmDialogStub.notCalled).toEqual(true); - expect(fakeServer.requests.length).toEqual(0); - }); - it('sends share info to server on confirm', function() { - urlQueryStub.returns(testShare); - plugin.processIncomingShareFromUrl(); - expect(promptDialogStub.notCalled).toEqual(true); - expect(confirmDialogStub.calledOnce).toEqual(true); - confirmDialogStub.getCall(0).args[2](true); - expect(fakeServer.requests.length).toEqual(1); - checkRequest({ - remote: 'http://example.com/owncloud', - token: 'abcdefg', - owner: 'theowner', - ownerDisplayName: 'The Generous Owner', - name: 'the share name', - password: '' - }); - }); - it('sends share info with password to server on confirm', function() { - testShare = _.extend(testShare, {protected: 1}); - urlQueryStub.returns(testShare); - plugin.processIncomingShareFromUrl(); - expect(promptDialogStub.calledOnce).toEqual(true); - expect(confirmDialogStub.notCalled).toEqual(true); - promptDialogStub.getCall(0).args[2](true, 'thepassword'); - expect(fakeServer.requests.length).toEqual(1); - checkRequest({ - remote: 'http://example.com/owncloud', - token: 'abcdefg', - owner: 'theowner', - ownerDisplayName: 'The Generous Owner', - name: 'the share name', - password: 'thepassword' - }); - }); - it('does not send share info on cancel', function() { - urlQueryStub.returns(testShare); - plugin.processIncomingShareFromUrl(); - expect(promptDialogStub.notCalled).toEqual(true); - expect(confirmDialogStub.calledOnce).toEqual(true); - confirmDialogStub.getCall(0).args[2](false); - expect(fakeServer.requests.length).toEqual(0); - }); - }); - describe('show dialog for each share to confirm', function() { - var testShare; - - /** - * Call processSharesToConfirm() and make the fake server - * return the passed response. - * - * @param {Array} response list of shares to process - */ - function processShares(response) { - plugin.processSharesToConfirm(); - - expect(fakeServer.requests.length).toEqual(1); - - var req = fakeServer.requests[0]; - expect(req.method).toEqual('GET'); - expect(req.url).toEqual(OC.webroot + '/index.php/apps/files_sharing/api/externalShares'); - - req.respond( - 200, - {'Content-Type': 'application/json'}, - JSON.stringify(response) - ); - } - - beforeEach(function() { - testShare = { - id: 123, - remote: 'http://example.com/owncloud', - token: 'abcdefg', - owner: 'theowner', - ownerDisplayName: 'The Generous Owner', - name: 'the share name' - }; - }); - - it('does not show any dialog if no shares to confirm', function() { - processShares([]); - expect(confirmDialogStub.notCalled).toEqual(true); - expect(promptDialogStub.notCalled).toEqual(true); - }); - it('sends accept info to server on confirm', function() { - processShares([testShare]); - - expect(promptDialogStub.notCalled).toEqual(true); - expect(confirmDialogStub.calledOnce).toEqual(true); - - confirmDialogStub.getCall(0).args[2](true); - - expect(fakeServer.requests.length).toEqual(2); - - var request = fakeServer.requests[1]; - var query = OC.parseQueryString(request.requestBody); - expect(request.method).toEqual('POST'); - expect(query).toEqual({id: '123'}); - expect(request.url).toEqual( - OC.webroot + '/index.php/apps/files_sharing/api/externalShares' - ); - - expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true); - request.respond( - 200, - {'Content-Type': 'application/json'}, - JSON.stringify({status: 'success'}) - ); - expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true); - }); - it('sends delete info to server on cancel', function() { - processShares([testShare]); - - expect(promptDialogStub.notCalled).toEqual(true); - expect(confirmDialogStub.calledOnce).toEqual(true); - - confirmDialogStub.getCall(0).args[2](false); - - expect(fakeServer.requests.length).toEqual(2); - - var request = fakeServer.requests[1]; - expect(request.method).toEqual('DELETE'); - expect(request.url).toEqual( - OC.webroot + '/index.php/apps/files_sharing/api/externalShares/123' - ); - - expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true); - request.respond( - 200, - {'Content-Type': 'application/json'}, - JSON.stringify({status: 'success'}) - ); - expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true); - }); - xit('shows another dialog when multiple shares need to be accepted', function() { - // TODO: enable this test when fixing multiple dialogs issue / confirm loop - var testShare2 = _.extend({}, testShare); - testShare2.id = 256; - processShares([testShare, testShare2]); - - // confirm first one - expect(confirmDialogStub.calledOnce).toEqual(true); - confirmDialogStub.getCall(0).args[2](true); - - // next dialog not shown yet - expect(confirmDialogStub.calledOnce); - - // respond to the first accept request - fakeServer.requests[1].respond( - 200, - {'Content-Type': 'application/json'}, - JSON.stringify({status: 'success'}) - ); - - // don't reload yet, there are other shares to confirm - expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true); - - // cancel second share - expect(confirmDialogStub.calledTwice).toEqual(true); - confirmDialogStub.getCall(1).args[2](true); - - // reload only called at the very end - expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true); - }); - }); -}); |