123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- class ElggPAM {
-
- protected $policy;
-
- protected $messages;
-
- public function __construct($policy) {
- $this->policy = $policy;
- $this->messages = array('sufficient' => array(), 'required' => array());
- }
-
- public function authenticate($credentials = array()) {
- global $_PAM_HANDLERS;
- if (!isset($_PAM_HANDLERS[$this->policy]) ||
- !is_array($_PAM_HANDLERS[$this->policy])) {
- return false;
- }
- $authenticated = false;
- foreach ($_PAM_HANDLERS[$this->policy] as $v) {
- $handler = $v->handler;
- if (!is_callable($handler)) {
- continue;
- }
-
- $importance = $v->importance;
- try {
-
-
- $result = call_user_func($handler, $credentials);
- if ($result) {
- $authenticated = true;
- } elseif ($result === false) {
- if ($importance == 'required') {
- $this->messages['required'][] = "$handler:failed";
- return false;
- } else {
- $this->messages['sufficient'][] = "$handler:failed";
- }
- }
- } catch (Exception $e) {
- if ($importance == 'required') {
- $this->messages['required'][] = $e->getMessage();
- return false;
- } else {
- $this->messages['sufficient'][] = $e->getMessage();
- }
- }
- }
- return $authenticated;
- }
-
- public function getFailureMessage() {
- $message = _elgg_services()->translator->translate('auth:nopams');
- if (!empty($this->messages['required'])) {
- $message = $this->messages['required'][0];
- } elseif (!empty($this->messages['sufficient'])) {
- $message = $this->messages['sufficient'][0];
- }
- return _elgg_services()->hooks->trigger('fail', 'auth', $this->messages, $message);
- }
- }
|