summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-08 19:11:31 +0300
committerAndrew Dolgov <[email protected]>2021-02-08 19:11:31 +0300
commit51d2deeea911e84ea2e56b78544445de22f881b9 (patch)
treeb4d769ada8fa871667771d0d9ec2c4a607f053bd /classes
parentfc2e0bf67bb279b960fb50060b6a7b59f0e5afb2 (diff)
fix hierarchy of authentication modules, make everything extend Auth_Base and implement hook_auth_user() for pluginhost
Diffstat (limited to 'classes')
-rw-r--r--classes/auth/base.php19
-rw-r--r--classes/iauthmodule.php1
-rw-r--r--classes/userhelper.php18
3 files changed, 15 insertions, 23 deletions
diff --git a/classes/auth/base.php b/classes/auth/base.php
index 4cbc23589..1b9015fe3 100644
--- a/classes/auth/base.php
+++ b/classes/auth/base.php
@@ -1,6 +1,6 @@
<?php
-class Auth_Base {
- private $pdo;
+abstract class Auth_Base extends Plugin implements IAuthModule {
+ protected $pdo;
const AUTH_SERVICE_API = '_api';
@@ -8,18 +8,9 @@ class Auth_Base {
$this->pdo = Db::pdo();
}
- /**
- * @SuppressWarnings(unused)
- */
- function check_password($owner_uid, $password, $service = '') {
- return false;
- }
-
- /**
- * @SuppressWarnings(unused)
- */
- function authenticate($login, $password, $service = '') {
- return false;
+ // compatibility wrapper, because of how pluginhost works (hook name == method name)
+ function hook_auth_user(...$args) {
+ return $this->authenticate(...$args);
}
// Auto-creates specified user if allowed by system configuration
diff --git a/classes/iauthmodule.php b/classes/iauthmodule.php
index 2d0c98709..e714cc6ca 100644
--- a/classes/iauthmodule.php
+++ b/classes/iauthmodule.php
@@ -1,4 +1,5 @@
<?php
interface IAuthModule {
function authenticate($login, $password); // + optional third parameter: $service
+ function hook_auth_user(...$args); // compatibility wrapper due to how hooks work
}
diff --git a/classes/userhelper.php b/classes/userhelper.php
index b0a9dc598..4519f2803 100644
--- a/classes/userhelper.php
+++ b/classes/userhelper.php
@@ -7,15 +7,15 @@ class UserHelper {
$user_id = false;
$auth_module = false;
- foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_AUTH_USER) as $plugin) {
-
- $user_id = (int) $plugin->authenticate($login, $password, $service);
-
- if ($user_id) {
- $auth_module = strtolower(get_class($plugin));
- break;
- }
- }
+ PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_AUTH_USER,
+ function ($result, $plugin) use (&$user_id, &$auth_module) {
+ if ($result) {
+ $user_id = (int)$result;
+ $auth_module = strtolower(get_class($plugin));
+ return true;
+ }
+ },
+ $login, $password, $service);
if ($user_id && !$check_only) {