[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer) | `<3.45.1` -> `<3.46.1` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary> ### [`v3.46.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3460) [Compare Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.45.0...v3.46.0) - chore: fix internal typehints in Tokens ([#​7656](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7656)) - chore: reduce PHPStan baseline ([#​7643](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7643)) - docs: Show class with unit tests and BC promise info ([#​7667](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7667)) - feat: change default ruleset to `@PER-CS` (only behind PHP_CS_FIXER_FUTURE_MODE=1) ([#​7650](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7650)) - feat: Support new/instanceof/use trait in `fully_qualified_strict_types` ([#​7653](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7653)) - fix: FQCN parse phpdoc using full grammar regex ([#​7649](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7649)) - fix: Handle FQCN properly with `leading_backslash_in_global_namespace` option enabled ([#​7654](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7654)) - fix: PhpdocToParamTypeFixerTest - support for arrow functions ([#​7647](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7647)) - fix: PHP_CS_FIXER_FUTURE_MODE - proper boolean validation ([#​7651](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7651)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/libretime/libretime). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: jo <ljonas@riseup.net>
131 lines
3.6 KiB
PHP
131 lines
3.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Auth adaptor for FreeIPA.
|
|
*/
|
|
class LibreTime_Auth_Adaptor_FreeIpa implements Zend_Auth_Adapter_Interface
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $username;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $password;
|
|
|
|
/**
|
|
* @var Application_Model_User
|
|
*/
|
|
private $user;
|
|
|
|
/**
|
|
* username from form.
|
|
*
|
|
* @param mixed $username
|
|
*
|
|
* @return self
|
|
*/
|
|
public function setIdentity($username)
|
|
{
|
|
$this->username = $username;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* password from form.
|
|
*
|
|
* This is ignored by FreeIPA but needs to get passed for completeness
|
|
*
|
|
* @param mixed $password
|
|
*
|
|
* @return self
|
|
*/
|
|
public function setCredential($password)
|
|
{
|
|
$this->password = $password;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Check if apache logged the user and get data from ldap.
|
|
*
|
|
* @return Zend_Auth_Result
|
|
*/
|
|
public function authenticate()
|
|
{
|
|
if (array_key_exists('EXTERNAL_AUTH_ERROR', $_SERVER)) {
|
|
return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null, [$_SERVER['EXTERNAL_AUTH_ERROR']]);
|
|
}
|
|
if (!array_key_exists('REMOTE_USER', $_SERVER)) {
|
|
return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null);
|
|
}
|
|
// success, the user is good since the service populated the REMOTE_USER
|
|
$remoteUser = $_SERVER['REMOTE_USER'];
|
|
|
|
$subj = CcSubjsQuery::create()->findOneByDbLogin($remoteUser);
|
|
$subjId = null;
|
|
if ($subj) {
|
|
$subjId = $subj->getDBId();
|
|
}
|
|
|
|
if ($subjId) {
|
|
$user = new Application_Model_User($subjId);
|
|
} else {
|
|
// upsert the user on login for first time users
|
|
$user = new Application_Model_User('');
|
|
}
|
|
|
|
// Always zap any local info with new info from ipa
|
|
$user->setLogin($remoteUser);
|
|
|
|
// Use a random password for IPA users, reset on each login... I may change this to get set to the IPA pass but hate that it is being stored as md5 behind the scenes
|
|
// gets rescrambled on each succeful login for security purposes
|
|
$ipaDummyPass = bin2hex(openssl_random_pseudo_bytes(10));
|
|
$user->setPassword($ipaDummyPass);
|
|
|
|
// grab user info from LDAP
|
|
$userParts = explode('@', $remoteUser);
|
|
$userInfo = LibreTime_Model_FreeIpa::GetUserInfo($userParts[0]);
|
|
|
|
$user->setType($userInfo['type']);
|
|
$user->setFirstName($userInfo['first_name']);
|
|
$user->setLastName($userInfo['last_name']);
|
|
$user->setEmail($userInfo['email']);
|
|
$user->setCellPhone($userInfo['cell_phone']);
|
|
$user->setSkype($userInfo['skype']);
|
|
$user->setJabber($userInfo['jabber']);
|
|
$user->save();
|
|
$this->user = $user;
|
|
|
|
try {
|
|
return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $user);
|
|
} catch (Exception $e) {
|
|
// exception occured
|
|
return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* return dummy object for internal auth handling.
|
|
*
|
|
* we need to build a dummpy object since the auth layer knows nothing about the db
|
|
*
|
|
* @return stdClass
|
|
*/
|
|
public function getResultRowObject()
|
|
{
|
|
$o = new stdClass();
|
|
$o->id = $this->user->getId();
|
|
$o->username = $this->user->getLogin();
|
|
$o->password = $this->user->getPassword();
|
|
$o->real_name = implode(' ', [$this->user->getFirstName(), $this->user->getLastName()]);
|
|
$o->type = $this->user->getType();
|
|
$o->login = $this->user->getLogin();
|
|
|
|
return $o;
|
|
}
|
|
}
|