partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 2fe0aecd37cf1b6e964b34c6901420d31374911c
parent e7cf9cf0c20a4d928a2fd5a59bd36992aa8cecf0
Author: Felicitus <felicitus@felicitus.org>
Date:   Mon, 18 Jul 2011 21:48:03 +0200

Added direct invocation of service calls by passing username&password parameters

Diffstat:
Msrc/de/RaumZeitLabor/PartKeepr/Service/ServiceManager.php | 47++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 40 insertions(+), 7 deletions(-)

diff --git a/src/de/RaumZeitLabor/PartKeepr/Service/ServiceManager.php b/src/de/RaumZeitLabor/PartKeepr/Service/ServiceManager.php @@ -6,6 +6,8 @@ declare(encoding = 'UTF-8'); use de\RaumZeitLabor\PartKeepr\Service\Exceptions\ServiceException, de\RaumZeitLabor\PartKeepr\PartKeepr, + de\RaumZeitLabor\PartKeepr\User\User, + de\RaumZeitLabor\PartKeepr\User\UserManager, de\RaumZeitLabor\PartKeepr\REST\Request; class ServiceManager { @@ -44,17 +46,12 @@ class ServiceManager { $allowCall = true; if (!is_subclass_of($service, "de\\RaumZeitLabor\\PartKeepr\\Service\\AnonService")) { - $session = null; $sessionid = false; - if ($service->hasHeader("session")) { - $sessionid = $service->getHeader("session"); - } + $sessionid = self::getSession($service); + - if (array_key_exists("session", $_REQUEST) && $session === null) { - $sessionid = $_REQUEST["session"]; - } if ($sessionid === null) { $session = SessionManager::getInstance()->startSession(); @@ -80,6 +77,42 @@ class ServiceManager { } + private static function getSession ($service) { + if ($service->hasHeader("username") && $service->hasHeader("password") && !$service->hasHeader("session")) { + return self::authenticateByUsername($service->getHeader("username"), $service->getHeader("password")); + } + + if (array_key_exists("username", $_REQUEST) && array_key_exists("password", $_REQUEST) && !array_key_exists("session", $_REQUEST)) { + return self::authenticateByUsername($_REQUEST["username"], $_REQUEST["password"]); + } + + if ($service->hasHeader("session")) { + return $service->getHeader("session"); + } + + if (array_key_exists("session", $_REQUEST) && $session === null) { + return $_REQUEST["session"]; + } + } + + private static function authenticateByUsername ($username, $password) { + /* Build a temporary user */ + $user = new User; + $user->setRawUsername($username); + $user->setHashedPassword($password); + + $authenticatedUser = UserManager::getInstance()->authenticate($user); + + if ($authenticatedUser !== false) { + /* Start Session */ + $session = SessionManager::getInstance()->startSession($authenticatedUser); + + return $session->getSessionID(); + } else { + throw new InvalidLoginDataException(); + } + } + } ?> \ No newline at end of file