SMB_OC has been merged with SMB, via the identifier aliases mechanism. Legacy migration is done to the Session Credentials password mechanismremotes/origin/db-empty-migrate
parent
19bc5a452a
commit
cb1ef82702
@ -0,0 +1,67 @@ |
||||
<?php |
||||
/** |
||||
* @author Robin McCorkell <rmccorkell@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\Backend; |
||||
|
||||
use \OCP\IL10N; |
||||
use \OCA\Files_External\Lib\Backend\Backend; |
||||
use \OCA\Files_External\Lib\DefinitionParameter; |
||||
use \OCA\Files_External\Lib\Auth\AuthMechanism; |
||||
use \OCA\Files_External\Service\BackendService; |
||||
use \OCA\Files_External\Lib\Auth\Password\SessionCredentials; |
||||
use \OCA\Files_External\Lib\StorageConfig; |
||||
|
||||
/** |
||||
* Deprecated SMB_OC class - use SMB with the password::sessioncredentials auth mechanism |
||||
*/ |
||||
class SMB_OC extends Backend { |
||||
|
||||
public function __construct(IL10N $l, SessionCredentials $legacyAuth) { |
||||
$this |
||||
->setIdentifier('\OC\Files\Storage\SMB_OC') |
||||
->setStorageClass('\OC\Files\Storage\SMB') |
||||
->setText($l->t('SMB / CIFS using OC login [DEPRECATED]')) |
||||
->addParameters([ |
||||
(new DefinitionParameter('host', $l->t('Host'))), |
||||
(new DefinitionParameter('username_as_share', $l->t('Username as share'))) |
||||
->setType(DefinitionParameter::VALUE_BOOLEAN), |
||||
(new DefinitionParameter('share', $l->t('Share'))) |
||||
->setFlag(DefinitionParameter::FLAG_OPTIONAL), |
||||
(new DefinitionParameter('root', $l->t('Remote subfolder'))) |
||||
->setFlag(DefinitionParameter::FLAG_OPTIONAL), |
||||
]) |
||||
->setDependencyCheck('\OC\Files\Storage\SMB::checkDependencies') |
||||
->setPriority(BackendService::PRIORITY_DEFAULT - 10) |
||||
->addAuthScheme(AuthMechanism::SCHEME_PASSWORD) |
||||
->setLegacyAuthMechanism($legacyAuth) |
||||
; |
||||
} |
||||
|
||||
public function manipulateStorageConfig(StorageConfig &$storage) { |
||||
$username_as_share = ($storage->getBackendOption('username_as_share') === 'true'); |
||||
|
||||
if ($this->username_as_share) { |
||||
$share = '/' . $storage->getBackendOption('user'); |
||||
$storage->setBackendOption('share', $share); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,126 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* @author Lukas Reschke <lukas@owncloud.com> |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* @author Robin Appelman <icewind@owncloud.com> |
||||
* @author Robin McCorkell <rmccorkell@karoshi.org.uk> |
||||
* |
||||
* @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 OC\Files\Storage; |
||||
|
||||
|
||||
use Icewind\SMB\Exception\AccessDeniedException; |
||||
use Icewind\SMB\Exception\Exception; |
||||
use Icewind\SMB\Server; |
||||
|
||||
class SMB_OC extends SMB { |
||||
private $username_as_share; |
||||
|
||||
/** |
||||
* @param array $params |
||||
* @throws \Exception |
||||
*/ |
||||
public function __construct($params) { |
||||
if (isset($params['host'])) { |
||||
$host = $params['host']; |
||||
$this->username_as_share = ($params['username_as_share'] === true); |
||||
|
||||
// dummy credentials, unused, to satisfy constructor |
||||
$user = 'foo'; |
||||
$password = 'bar'; |
||||
if (\OC::$server->getSession()->exists('smb-credentials')) { |
||||
$params_auth = json_decode(\OC::$server->getCrypto()->decrypt(\OC::$server->getSession()->get('smb-credentials')), true); |
||||
$user = \OC::$server->getSession()->get('loginname'); |
||||
$password = $params_auth['password']; |
||||
} else { |
||||
// assume we are testing from the admin section |
||||
} |
||||
|
||||
$root = isset($params['root']) ? $params['root'] : '/'; |
||||
$share = ''; |
||||
|
||||
if ($this->username_as_share) { |
||||
$share = '/' . $user; |
||||
} elseif (isset($params['share'])) { |
||||
$share = $params['share']; |
||||
} else { |
||||
throw new \Exception(); |
||||
} |
||||
parent::__construct(array( |
||||
"user" => $user, |
||||
"password" => $password, |
||||
"host" => $host, |
||||
"share" => $share, |
||||
"root" => $root |
||||
)); |
||||
} else { |
||||
throw new \Exception(); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Intercepts the user credentials on login and stores them |
||||
* encrypted inside the session if SMB_OC storage is enabled. |
||||
* @param array $params |
||||
*/ |
||||
public static function login($params) { |
||||
$mountpoints = \OC_Mount_Config::getAbsoluteMountPoints($params['uid']); |
||||
$mountpointClasses = array(); |
||||
foreach($mountpoints as $mountpoint) { |
||||
$mountpointClasses[$mountpoint['class']] = true; |
||||
} |
||||
if(isset($mountpointClasses['\OC\Files\Storage\SMB_OC'])) { |
||||
\OC::$server->getSession()->set('smb-credentials', \OC::$server->getCrypto()->encrypt(json_encode($params))); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param string $path |
||||
* @return boolean |
||||
*/ |
||||
public function isSharable($path) { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* @param bool $isPersonal |
||||
* @return bool |
||||
*/ |
||||
public function test($isPersonal = true) { |
||||
if ($isPersonal) { |
||||
if ($this->stat('')) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} else { |
||||
$server = new Server($this->server->getHost(), '', ''); |
||||
|
||||
try { |
||||
$server->listShares(); |
||||
return true; |
||||
} catch (AccessDeniedException $e) { |
||||
// expected due to anonymous login |
||||
return true; |
||||
} catch (Exception $e) { |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue