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:
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