From 6ea9067116ab9dbec338678bfaa1e73df3ed5716 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Tue, 16 Feb 2021 13:38:07 -0800 Subject: [PATCH] authx - Support Joomla users+sessions --- ext/authx/Civi/Authx/Joomla.php | 87 +++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 ext/authx/Civi/Authx/Joomla.php diff --git a/ext/authx/Civi/Authx/Joomla.php b/ext/authx/Civi/Authx/Joomla.php new file mode 100644 index 0000000000..b36376b19c --- /dev/null +++ b/ext/authx/Civi/Authx/Joomla.php @@ -0,0 +1,87 @@ +getDbo(); + $query = $db->getQuery(TRUE); + $query->select('id, name, username, email, password'); + $query->from($JUserTable->getTableName()); + $query->where('(LOWER(username) = LOWER(' . $db->quote($username) . ')) AND (block = 0)'); + $db->setQuery($query, 0, 0); + $users = $db->loadObjectList(); + + if (!empty($users)) { + $user = array_shift($users); + if (is_callable(['JUserHelper', 'verifyPassword'])) { + $verified = \JUserHelper::verifyPassword($password, $user->password, $user->id); + return $verified ? $user->id : NULL; + } + else { + throw new \CRM_Core_Exception("This version of Joomla does not support verifyPassword()."); + } + } + + return NULL; + } + + /** + * @inheritDoc + */ + public function loginSession($userId) { + $user = new \JUser($userId); + $session = \JFactory::getSession(); + $session->set('user', $user); + } + + /** + * @inheritDoc + */ + public function logoutSession() { + \JFactory::getSession()->destroy(); + } + + /** + * @inheritDoc + */ + public function loginStateless($userId) { + \JFactory::getSession()->setHandler(new \CRM_Utils_FakeJoomlaSession('CIVISCRIPT')); + $user = new \JUser($userId); + $session = \JFactory::getSession(); + $session->set('user', $user); + } + + /** + * @inheritDoc + */ + public function getCurrentUserId() { + $user = \JFactory::getUser(); + return ($user->guest) ? NULL : $user->id; + } + +} -- 2.25.1