2015-08-13 00:13:27 +03:00
< ? php
/**
2016-07-21 17:49:16 +03:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
2019-12-03 21:57:53 +03:00
* @ author Daniel Kesselberg < mail @ danielkesselberg . de >
* @ author Morris Jobke < hey @ morrisjobke . de >
* @ author Robin Appelman < robin @ icewind . nl >
2016-01-12 17:02:16 +03:00
* @ author Robin McCorkell < robin @ mccorkell . me . uk >
2019-12-03 21:57:53 +03:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2015-08-13 00:13:27 +03:00
*
* @ 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 ,
2019-12-03 21:57:53 +03:00
* along with this program . If not , see < http :// www . gnu . org / licenses />
2015-08-13 00:13:27 +03:00
*
*/
namespace OCA\Files_External\Lib\Backend ;
2018-05-28 17:17:19 +03:00
use Icewind\SMB\BasicAuth ;
use Icewind\SMB\KerberosAuth ;
2019-11-22 22:52:10 +03:00
use OCA\Files_External\Lib\Auth\AuthMechanism ;
use OCA\Files_External\Lib\Auth\Password\Password ;
use OCA\Files_External\Lib\DefinitionParameter ;
use OCA\Files_External\Lib\LegacyDependencyCheckPolyfill ;
use OCA\Files_External\Lib\StorageConfig ;
2015-08-13 00:13:27 +03:00
2019-11-22 22:52:10 +03:00
use OCP\IL10N ;
2015-08-24 18:32:44 +03:00
use OCP\IUser ;
2015-08-13 00:13:27 +03:00
class SMB extends Backend {
2015-09-01 12:25:33 +03:00
use LegacyDependencyCheckPolyfill ;
2015-08-13 00:13:27 +03:00
public function __construct ( IL10N $l , Password $legacyAuth ) {
$this
-> setIdentifier ( 'smb' )
2018-05-28 17:17:19 +03:00
-> addIdentifierAlias ( '\OC\Files\Storage\SMB' ) // legacy compat
2016-04-14 01:18:07 +03:00
-> setStorageClass ( '\OCA\Files_External\Lib\Storage\SMB' )
2015-08-13 00:13:27 +03:00
-> setText ( $l -> t ( 'SMB / CIFS' ))
-> addParameters ([
2018-01-27 01:46:40 +03:00
new DefinitionParameter ( 'host' , $l -> t ( 'Host' )),
new DefinitionParameter ( 'share' , $l -> t ( 'Share' )),
2015-08-13 00:13:27 +03:00
( new DefinitionParameter ( 'root' , $l -> t ( 'Remote subfolder' )))
-> setFlag ( DefinitionParameter :: FLAG_OPTIONAL ),
2015-08-21 12:30:42 +03:00
( new DefinitionParameter ( 'domain' , $l -> t ( 'Domain' )))
-> setFlag ( DefinitionParameter :: FLAG_OPTIONAL ),
2019-05-23 22:23:56 +03:00
( new DefinitionParameter ( 'show_hidden' , $l -> t ( 'Show hidden files' )))
-> setType ( DefinitionParameter :: VALUE_BOOLEAN )
-> setFlag ( DefinitionParameter :: FLAG_OPTIONAL ),
2020-02-10 18:36:03 +03:00
( new DefinitionParameter ( 'check_acl' , $l -> t ( 'Verify ACL access when listing files' )))
-> setType ( DefinitionParameter :: VALUE_BOOLEAN )
2020-04-10 14:20:20 +03:00
-> setFlag ( DefinitionParameter :: FLAG_OPTIONAL )
-> setTooltip ( $l -> t ( " Check the ACL's of each file or folder inside a directory to filter out items where the user has no read permissions, comes with a performance penalty " )),
2019-09-25 14:30:40 +03:00
( new DefinitionParameter ( 'timeout' , $l -> t ( 'Timeout' )))
2019-09-25 15:59:44 +03:00
-> setType ( DefinitionParameter :: VALUE_HIDDEN )
2019-11-09 17:18:52 +03:00
-> setFlag ( DefinitionParameter :: FLAG_OPTIONAL ),
2015-08-13 00:13:27 +03:00
])
-> addAuthScheme ( AuthMechanism :: SCHEME_PASSWORD )
2018-05-28 17:17:19 +03:00
-> addAuthScheme ( AuthMechanism :: SCHEME_SMB )
-> setLegacyAuthMechanism ( $legacyAuth );
2015-08-13 00:13:27 +03:00
}
2015-08-21 12:30:42 +03:00
/**
* @ param StorageConfig $storage
2015-08-24 18:32:44 +03:00
* @ param IUser $user
2015-08-21 12:30:42 +03:00
*/
2015-08-24 18:32:44 +03:00
public function manipulateStorageConfig ( StorageConfig & $storage , IUser $user = null ) {
2018-05-28 17:17:19 +03:00
$auth = $storage -> getAuthMechanism ();
if ( $auth -> getScheme () === AuthMechanism :: SCHEME_PASSWORD ) {
$smbAuth = new BasicAuth (
$storage -> getBackendOption ( 'user' ),
$storage -> getBackendOption ( 'domain' ),
$storage -> getBackendOption ( 'password' )
);
} else {
switch ( $auth -> getIdentifier ()) {
case 'smb::kerberos' :
$smbAuth = new KerberosAuth ();
break ;
default :
throw new \InvalidArgumentException ( 'unknown authentication backend' );
}
2015-08-21 12:30:42 +03:00
}
2018-05-28 17:17:19 +03:00
$storage -> setBackendOption ( 'auth' , $smbAuth );
2015-08-21 12:30:42 +03:00
}
2015-08-13 00:13:27 +03:00
}