%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ldap/models/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ldap/models/LdapSettings.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2019 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\ldap\models; use humhub\components\SettingsManager; use humhub\modules\ldap\authclient\LdapAuth; use Yii; use yii\base\Model; /** * LdapSettings * * @see LdapAuth for more information * @since 0.5 */ class LdapSettings extends Model { const PASSWORD_FIELD_DUMMY = '---HIDDEN---'; /** * @var boolean */ public $enabled; /** * @var boolean */ public $refreshUsers; /** * @var string */ public $username; /** * @var string */ public $password; /** * @var string */ public $passwordField; /** * @var string */ public $hostname; /** * @var int */ public $port; /** * @var string */ public $encryption; /** * @var string */ public $baseDn; /** * @var string */ public $loginFilter; /** * @var string */ public $userFilter; /** * @var string */ public $usernameAttribute; /** * @var string */ public $emailAttribute; /** * @var string */ public $ignoredDNs; /** * @var string */ public $idAttribute; /** * @var array */ public $encryptionTypes = [ '' => 'None', 'tls' => 'TLS (aka SSLV2)', 'ssl' => 'SSL', ]; /** * @inheritdoc */ public function init() { parent::init(); $this->loadSaved(); } /** * @inheritdoc */ public function rules() { return [ [['enabled', 'refreshUsers', 'usernameAttribute', 'emailAttribute', 'username', 'passwordField', 'hostname', 'port', 'idAttribute'], 'string', 'max' => 255], [['baseDn', 'loginFilter', 'userFilter', 'ignoredDNs'], 'string'], [['usernameAttribute', 'username', 'passwordField', 'hostname', 'port', 'baseDn', 'loginFilter', 'userFilter', 'idAttribute'], 'required'], ['encryption', 'in', 'range' => ['', 'ssl', 'tls']], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'enabled' => Yii::t('LdapModule.base', 'Enable LDAP Support'), 'refreshUsers' => Yii::t('LdapModule.base', 'Fetch/Update Users Automatically'), 'username' => Yii::t('LdapModule.base', 'Username'), 'passwordField' => Yii::t('LdapModule.base', 'Password'), 'encryption' => Yii::t('LdapModule.base', 'Encryption'), 'hostname' => Yii::t('LdapModule.base', 'Hostname'), 'port' => Yii::t('LdapModule.base', 'Port'), 'baseDn' => Yii::t('LdapModule.base', 'Base DN'), 'loginFilter' => Yii::t('LdapModule.base', 'Login Filter'), 'userFilter' => Yii::t('LdapModule.base', 'User Filter'), 'usernameAttribute' => Yii::t('LdapModule.base', 'Username Attribute'), 'emailAttribute' => Yii::t('LdapModule.base', 'E-Mail Address Attribute'), 'idAttribute' => Yii::t('LdapModule.base', 'ID Attribute'), 'ignoredDNs' => Yii::t('LdapModule.base', 'Ignored LDAP entries'), ]; } /** * @inheritdoc */ public function attributeHints() { return [ 'encryption' => Yii::t('LdapModule.base', 'A TLS/SSL is strongly favored in production environments to prevent passwords from be transmitted in clear text.'), 'username' => Yii::t('LdapModule.base', 'The default credentials username. Some servers require that this be in DN form. This must be given in DN form if the LDAP server requires a DN to bind and binding should be possible with simple usernames.'), 'passwordField' => Yii::t('LdapModule.base', 'The default credentials password (used only with username above).'), 'baseDn' => Yii::t('LdapModule.base', 'The default base DN used for searching for accounts.'), 'loginFilter' => Yii::t('LdapModule.base', 'Defines the filter to apply, when login is attempted. %s replaces the username in the login action. Example: "(sAMAccountName=%s)" or "(uid=%s)"'), 'usernameAttribute' => Yii::t('LdapModule.base', 'LDAP Attribute for Username. Example: "uid" or "sAMAccountName"'), 'emailAttribute' => Yii::t('LdapModule.base', 'LDAP Attribute for E-Mail Address. Default: "mail"'), 'idAttribute' => Yii::t('LdapModule.base', 'Not changeable LDAP attribute to unambiguously identify the user in the directory. If empty the user will be determined automatically by e-mail address or username. Examples: objectguid (ActiveDirectory) or uidNumber (OpenLDAP)'), 'userFilter' => Yii::t('LdapModule.base', 'Limit access to users meeting this criteria. Example: "(objectClass=posixAccount)" or "(&(objectClass=person)(memberOf=CN=Workers,CN=Users,DC=myDomain,DC=com))"'), 'ignoredDNs' => Yii::t('LdapModule.base', 'One DN per line which should not be imported automatically.'), ]; } /** * Loads the saved settings * * @return bool|void */ public function loadSaved() { /** @var SettingsManager $settings */ $settings = Yii::$app->getModule('ldap')->settings; // Load Defaults $this->enabled = $settings->get('enabled'); $this->username = $settings->get('username'); $this->password = $settings->get('password'); if (!empty($this->password)) { $this->passwordField = static::PASSWORD_FIELD_DUMMY; } $this->hostname = $settings->get('hostname'); $this->port = $settings->get('port'); $this->encryption = $settings->get('encryption'); $this->baseDn = $settings->get('baseDn'); $this->loginFilter = $settings->get('loginFilter'); $this->userFilter = $settings->get('userFilter'); $this->usernameAttribute = $settings->get('usernameAttribute'); $this->emailAttribute = $settings->get('emailAttribute'); $this->idAttribute = $settings->get('idAttribute'); $this->ignoredDNs = $settings->get('ignoredDNs'); $this->refreshUsers = $settings->get('refreshUsers'); } /** * Saves the form * * @return boolean */ public function save() { /** @var SettingsManager $settings */ $settings = Yii::$app->getModule('ldap')->settings; $settings->set('enabled', $this->enabled); $settings->set('hostname', $this->hostname); $settings->set('port', $this->port); $settings->set('encryption', $this->encryption); $settings->set('username', $this->username); if ($this->passwordField !== static::PASSWORD_FIELD_DUMMY) $settings->set('password', $this->passwordField); $settings->set('baseDn', $this->baseDn); $settings->set('loginFilter', $this->loginFilter); $settings->set('userFilter', $this->userFilter); $settings->set('usernameAttribute', $this->usernameAttribute); $settings->set('emailAttribute', $this->emailAttribute); $settings->set('ignoredDNs', $this->ignoredDNs); $settings->set('idAttribute', $this->idAttribute); $settings->set('refreshUsers', $this->refreshUsers); return true; } /** * Returns a configured LdapAuth class definition * * @return array the LDAP Auth definition */ public function getLdapAuthDefinition() { $this->ignoredDNs = str_replace("\r", '', $this->ignoredDNs); return [ 'class' => LdapAuth::class, 'hostname' => $this->hostname, 'port' => $this->port, 'bindUsername' => $this->username, 'bindPassword' => $this->password, 'useSsl' => ($this->encryption === 'ssl'), 'useStartTls' => ($this->encryption === 'tls'), 'baseDn' => $this->baseDn, 'loginFilter' => $this->loginFilter, 'userFilter' => $this->userFilter, 'autoRefreshUsers' => (boolean)$this->refreshUsers, 'emailAttribute' => $this->emailAttribute, 'usernameAttribute' => $this->usernameAttribute, 'idAttribute' => $this->idAttribute, 'ignoredDNs' => explode("\n", strtolower($this->ignoredDNs)) ]; } /** * Checks whether LDAP is enabled or not. * * @return bool */ public static function isEnabled() { /** @var SettingsManager $settings */ $settings = Yii::$app->getModule('ldap')->settings; return (bool)$settings->get('enabled'); } }