@@ -108,7 +108,6 @@ class Application extends App { | |||
// AuthMechanism::SCHEME_PASSWORD mechanisms | |||
$container->query('OCA\Files_External\Lib\Auth\Password\Password'), | |||
$container->query('OCA\Files_External\Lib\Auth\Password\SessionCredentials'), | |||
$container->query('OCA\Files_External\Lib\Auth\Password\GlobalAuth'), | |||
// AuthMechanism::SCHEME_OAUTH1 mechanisms | |||
$container->query('OCA\Files_External\Lib\Auth\OAuth1\OAuth1'), |
@@ -44,12 +44,7 @@ namespace OCA\Files_External\AppInfo; | |||
'url' => '/ajax/public_key.php', | |||
'verb' => 'POST', | |||
'requirements' => array() | |||
), | |||
[ | |||
'name' => 'Ajax#saveGlobalCredentials', | |||
'url' => '/globalcredentials', | |||
'verb' => 'POST' | |||
] | |||
) | |||
) | |||
) | |||
); |
@@ -23,7 +23,6 @@ | |||
namespace OCA\Files_External\Controller; | |||
use OCA\Files_External\Lib\Auth\Password\GlobalAuth; | |||
use OCP\AppFramework\Controller; | |||
use OCP\IRequest; | |||
use OCP\AppFramework\Http\JSONResponse; | |||
@@ -32,13 +31,10 @@ use OCA\Files_External\Lib\Auth\PublicKey\RSA; | |||
class AjaxController extends Controller { | |||
/** @var RSA */ | |||
private $rsaMechanism; | |||
/** @var GlobalAuth */ | |||
private $globalAuth; | |||
public function __construct($appName, IRequest $request, RSA $rsaMechanism, GlobalAuth $globalAuth) { | |||
public function __construct($appName, IRequest $request, RSA $rsaMechanism) { | |||
parent::__construct($appName, $request); | |||
$this->rsaMechanism = $rsaMechanism; | |||
$this->globalAuth = $globalAuth; | |||
} | |||
private function generateSshKeys() { | |||
@@ -64,9 +60,4 @@ class AjaxController extends Controller { | |||
'status' => 'success' | |||
)); | |||
} | |||
public function saveGlobalCredentials($uid, $user, $password) { | |||
$this->globalAuth->saveAuth($uid, $user, $password); | |||
return true; | |||
} | |||
} |
@@ -1338,33 +1338,6 @@ $(document).ready(function() { | |||
} | |||
}); | |||
$('#global_credentials').on('submit', function() { | |||
var $form = $(this); | |||
var uid = $form.find('[name=uid]').val(); | |||
var user = $form.find('[name=username]').val(); | |||
var password = $form.find('[name=password]').val(); | |||
var $submit = $form.find('[type=submit]'); | |||
$submit.val(t('files_external', 'Saving...')); | |||
$.ajax({ | |||
type: 'POST', | |||
contentType: 'application/json', | |||
data: JSON.stringify({ | |||
uid: uid, | |||
user: user, | |||
password: password | |||
}), | |||
url: OC.generateUrl('apps/files_external/globalcredentials'), | |||
dataType: 'json', | |||
success: function() { | |||
$submit.val(t('files_external', 'Saved')); | |||
setTimeout(function(){ | |||
$submit.val(t('files_external', 'Save')); | |||
}, 2500); | |||
} | |||
}); | |||
return false; | |||
}); | |||
// global instance | |||
OCA.External.Settings.mountConfig = mountConfigListView; | |||
@@ -1,88 +0,0 @@ | |||
<?php | |||
/** | |||
* @author Robin Appelman <icewind@owncloud.com> | |||
* | |||
* @copyright Copyright (c) 2015, 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\Files_External\Lib\Auth\Password; | |||
use OCA\Files_External\Service\BackendService; | |||
use OCP\IL10N; | |||
use OCP\IUser; | |||
use OCA\Files_External\Lib\Auth\AuthMechanism; | |||
use OCA\Files_External\Lib\StorageConfig; | |||
use OCP\Security\ICredentialsManager; | |||
use OCP\Files\Storage; | |||
use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; | |||
/** | |||
* Global Username and Password | |||
*/ | |||
class GlobalAuth extends AuthMechanism { | |||
const CREDENTIALS_IDENTIFIER = 'password::global'; | |||
/** @var ICredentialsManager */ | |||
protected $credentialsManager; | |||
public function __construct(IL10N $l, ICredentialsManager $credentialsManager) { | |||
$this->credentialsManager = $credentialsManager; | |||
$this | |||
->setIdentifier('password::global') | |||
->setVisibility(BackendService::VISIBILITY_DEFAULT) | |||
->setScheme(self::SCHEME_PASSWORD) | |||
->setText($l->t('Global Credentails')); | |||
} | |||
public function getAuth($uid) { | |||
$auth = $this->credentialsManager->retrieve($uid, self::CREDENTIALS_IDENTIFIER); | |||
if (!is_array($auth)) { | |||
return [ | |||
'user' => '', | |||
'password' => '' | |||
]; | |||
} else { | |||
return $auth; | |||
} | |||
} | |||
public function saveAuth($uid, $user, $password) { | |||
$this->credentialsManager->store($uid, self::CREDENTIALS_IDENTIFIER, [ | |||
'user' => $user, | |||
'password' => $password | |||
]); | |||
} | |||
public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) { | |||
if ($storage->getType() === StorageConfig::MOUNT_TYPE_ADMIN) { | |||
$uid = ''; | |||
} elseif (is_null($user)) { | |||
throw new InsufficientDataForMeaningfulAnswerException('No credentials saved'); | |||
} else { | |||
$uid = $user->getUID(); | |||
} | |||
$credentials = $this->credentialsManager->retrieve($uid, self::CREDENTIALS_IDENTIFIER); | |||
if (is_array($credentials)) { | |||
$storage->setBackendOption('user', $credentials['user']); | |||
$storage->setBackendOption('password', $credentials['password']); | |||
} | |||
} | |||
} |
@@ -30,7 +30,6 @@ use \OCA\Files_External\Service\BackendService; | |||
$appContainer = \OC_Mount_Config::$app->getContainer(); | |||
$backendService = $appContainer->query('OCA\Files_External\Service\BackendService'); | |||
$userStoragesService = $appContainer->query('OCA\Files_external\Service\UserStoragesService'); | |||
$globalAuth = $appContainer->query('OCA\Files_External\Lib\Auth\Password\GlobalAuth'); | |||
$tmpl = new OCP\Template('files_external', 'settings'); | |||
$tmpl->assign('encryptionEnabled', \OC::$server->getEncryptionManager()->isEnabled()); | |||
@@ -39,7 +38,4 @@ $tmpl->assign('storages', $userStoragesService->getStorages()); | |||
$tmpl->assign('dependencies', OC_Mount_Config::dependencyMessage($backendService->getBackends())); | |||
$tmpl->assign('backends', $backendService->getAvailableBackends()); | |||
$tmpl->assign('authMechanisms', $backendService->getAuthMechanisms()); | |||
$uid = \OC::$server->getUserSession()->getUser()->getUID(); | |||
$tmpl->assign('globalCredentials', $globalAuth->getAuth($uid)); | |||
$tmpl->assign('globalCredentialsUid', $uid); | |||
return $tmpl->fetchPage(); |
@@ -32,7 +32,6 @@ use \OCA\Files_External\Service\BackendService; | |||
$appContainer = \OC_Mount_Config::$app->getContainer(); | |||
$backendService = $appContainer->query('OCA\Files_External\Service\BackendService'); | |||
$globalStoragesService = $appContainer->query('OCA\Files_external\Service\GlobalStoragesService'); | |||
$globalAuth = $appContainer->query('OCA\Files_External\Lib\Auth\Password\GlobalAuth'); | |||
\OC_Util::addVendorScript('select2/select2'); | |||
\OC_Util::addVendorStyle('select2/select2'); | |||
@@ -46,6 +45,4 @@ $tmpl->assign('authMechanisms', $backendService->getAuthMechanisms()); | |||
$tmpl->assign('dependencies', OC_Mount_Config::dependencyMessage($backendService->getBackends())); | |||
$tmpl->assign('allowUserMounting', $backendService->isUserMountingAllowed()); | |||
$tmpl->assign('allowUserMounting', $backendService->isUserMountingAllowed()); | |||
$tmpl->assign('globalCredentials', $globalAuth->getAuth('')); | |||
$tmpl->assign('globalCredentialsUid', ''); | |||
return $tmpl->fetchPage(); |
@@ -68,23 +68,8 @@ | |||
} | |||
} | |||
?> | |||
<form autocomplete="false" class="section" action="#" | |||
id="global_credentials"> | |||
<h2><?php p($l->t('External Storage')); ?></h2> | |||
<p><?php p($l->t('Global Credentials')); ?></p> | |||
<input type="text" name="username" | |||
autocomplete="false" | |||
value="<?php p($_['globalCredentials']['user']); ?>" | |||
placeholder="<?php p($l->t('Username')) ?>"/> | |||
<input type="password" name="password" | |||
autocomplete="false" | |||
value="<?php p($_['globalCredentials']['password']); ?>" | |||
placeholder="<?php p($l->t('Password')) ?>"/> | |||
<input type="hidden" name="uid" | |||
value="<?php p($_['globalCredentialsUid']); ?>"/> | |||
<input type="submit" value="<?php p($l->t('Save')) ?>"/> | |||
</form> | |||
<form id="files_external" class="section" data-encryption-enabled="<?php echo $_['encryptionEnabled']?'true': 'false'; ?>"> | |||
<h2><?php p($l->t('External Storage')); ?></h2> | |||
<?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) print_unescaped(''.$_['dependencies'].''); ?> | |||
<table id="externalStorage" class="grid" data-admin='<?php print_unescaped(json_encode($_['visibilityType'] === BackendService::VISIBILITY_ADMIN)); ?>'> | |||
<thead> |
@@ -1,117 +0,0 @@ | |||
<?php | |||
/** | |||
* @author Robin Appelman <icewind@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\Files_External\Tests\Auth\Password; | |||
use OCA\Files_External\Lib\Auth\Password\GlobalAuth; | |||
use OCA\Files_external\Lib\StorageConfig; | |||
use Test\TestCase; | |||
class GlobalAuthTest extends TestCase { | |||
/** | |||
* @var \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject | |||
*/ | |||
private $l10n; | |||
/** | |||
* @var \OCP\Security\ICredentialsManager|\PHPUnit_Framework_MockObject_MockObject | |||
*/ | |||
private $credentialsManager; | |||
/** | |||
* @var GlobalAuth | |||
*/ | |||
private $instance; | |||
protected function setUp() { | |||
parent::setUp(); | |||
$this->l10n = $this->getMock('\OCP\IL10N'); | |||
$this->credentialsManager = $this->getMock('\OCP\Security\ICredentialsManager'); | |||
$this->instance = new GlobalAuth($this->l10n, $this->credentialsManager); | |||
} | |||
private function getStorageConfig($type, $config = []) { | |||
/** @var \OCA\Files_External\Lib\StorageConfig|\PHPUnit_Framework_MockObject_MockObject $storageConfig */ | |||
$storageConfig = $this->getMock('\OCA\Files_External\Lib\StorageConfig'); | |||
$storageConfig->expects($this->any()) | |||
->method('getType') | |||
->will($this->returnValue($type)); | |||
$storageConfig->expects($this->any()) | |||
->method('getBackendOptions') | |||
->will($this->returnCallback(function () use (&$config) { | |||
return $config; | |||
})); | |||
$storageConfig->expects($this->any()) | |||
->method('getBackendOption') | |||
->will($this->returnCallback(function ($key) use (&$config) { | |||
return $config[$key]; | |||
})); | |||
$storageConfig->expects($this->any()) | |||
->method('setBackendOption') | |||
->will($this->returnCallback(function ($key, $value) use (&$config) { | |||
$config[$key] = $value; | |||
})); | |||
return $storageConfig; | |||
} | |||
public function testNoCredentials() { | |||
$this->credentialsManager->expects($this->once()) | |||
->method('retrieve') | |||
->will($this->returnValue(null)); | |||
$storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_ADMIN); | |||
$this->instance->manipulateStorageConfig($storage); | |||
$this->assertEquals([], $storage->getBackendOptions()); | |||
} | |||
public function testSavedCredentials() { | |||
$this->credentialsManager->expects($this->once()) | |||
->method('retrieve') | |||
->will($this->returnValue([ | |||
'user' => 'a', | |||
'password' => 'b' | |||
])); | |||
$storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_ADMIN); | |||
$this->instance->manipulateStorageConfig($storage); | |||
$this->assertEquals([ | |||
'user' => 'a', | |||
'password' => 'b' | |||
], $storage->getBackendOptions()); | |||
} | |||
/** | |||
* @expectedException \OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException | |||
*/ | |||
public function testNoCredentialsPersonal() { | |||
$this->credentialsManager->expects($this->never()) | |||
->method('retrieve'); | |||
$storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_PERSONAl); | |||
$this->instance->manipulateStorageConfig($storage); | |||
$this->assertEquals([], $storage->getBackendOptions()); | |||
} | |||
} |