diff --git a/src/PHPCensor/Application.php b/src/PHPCensor/Application.php index f60fdbe9..92e2e1bb 100644 --- a/src/PHPCensor/Application.php +++ b/src/PHPCensor/Application.php @@ -32,11 +32,8 @@ class Application extends b8\Application $user = b8\Store\Factory::getStore('User')->getByPrimaryKey($_SESSION['php-censor-user-id']); if ($user) { - $_SESSION['php-censor-user'] = $user; return true; } - - unset($_SESSION['php-censor-user-id']); } return false; @@ -158,11 +155,9 @@ class Application extends b8\Application $defaultUserId = (integer)$config->get('php-censor.security.default_user_id', 1); if ($disableAuth && $defaultUserId) { - $user = b8\Store\Factory::getStore('User') - ->getByPrimaryKey($defaultUserId); + $user = b8\Store\Factory::getStore('User')->getByPrimaryKey($defaultUserId); if ($user) { - $_SESSION['php-censor-user'] = $user; return true; } } diff --git a/src/PHPCensor/Controller.php b/src/PHPCensor/Controller.php index 4ba7ea07..02276580 100644 --- a/src/PHPCensor/Controller.php +++ b/src/PHPCensor/Controller.php @@ -6,6 +6,9 @@ use b8\Config; use b8\Exception\HttpException\ForbiddenException; use b8\Http\Request; use b8\Http\Response; +use b8\Store\Factory; +use PHPCensor\Model\User; +use PHPCensor\Store\UserStore; class Controller extends \b8\Controller { @@ -49,6 +52,8 @@ class Controller extends \b8\Controller $class = explode('\\', get_class($this)); $this->className = substr(array_pop($class), 0, -10); $this->setControllerView(); + + unset($_SESSION['php-censor-user']); } /** @@ -122,6 +127,26 @@ class Controller extends \b8\Controller */ protected function currentUserIsAdmin() { - return $_SESSION['php-censor-user']->getIsAdmin(); + $user = $this->getUser(); + if (!$user) { + return false; + } + + return $this->getUser()->getIsAdmin(); + } + + /** + * @return User|null + */ + protected function getUser() + { + if (empty($_SESSION['php-censor-user-id'])) { + return null; + } + + /** @var UserStore $userStore */ + $userStore = Factory::getStore('User'); + + return $userStore->getById($_SESSION['php-censor-user-id']); } } diff --git a/src/PHPCensor/Controller/BuildController.php b/src/PHPCensor/Controller/BuildController.php index c3b25a5e..29382310 100644 --- a/src/PHPCensor/Controller/BuildController.php +++ b/src/PHPCensor/Controller/BuildController.php @@ -73,7 +73,7 @@ class BuildController extends Controller } /** @var User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); $perPage = $user->getFinalPerPage(); $data = $this->getBuildData($build, $plugin, $severity, $isNew, (($page - 1) * $perPage), $perPage); $pages = ($data['errors'] === 0) diff --git a/src/PHPCensor/Controller/GroupController.php b/src/PHPCensor/Controller/GroupController.php index 739ee9ce..12664d71 100644 --- a/src/PHPCensor/Controller/GroupController.php +++ b/src/PHPCensor/Controller/GroupController.php @@ -74,7 +74,7 @@ class GroupController extends Controller $group->setTitle($this->getParam('title')); if (is_null($groupId)) { /** @var User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); $group->setCreateDate(new \DateTime()); $group->setUserId($user->getId()); diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index a4f61d94..7bb5a75f 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -96,7 +96,7 @@ class ProjectController extends PHPCensor\Controller } /** @var PHPCensor\Model\User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); $perPage = $user->getFinalPerPage(); $builds = $this->getLatestBuildsHtml($projectId, $branch, $environment, (($page - 1) * $perPage), $perPage); $pages = ($builds[1] === 0) @@ -209,7 +209,7 @@ class ProjectController extends PHPCensor\Controller } /** @var PHPCensor\Model\User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); $build = $this->buildService->createBuild( $project, $environment, @@ -337,7 +337,7 @@ class ProjectController extends PHPCensor\Controller ]; /** @var PHPCensor\Model\User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); $project = $this->projectService->createProject($title, $type, $reference, $user->getId(), $options); $response = new RedirectResponse(); diff --git a/src/PHPCensor/Controller/SessionController.php b/src/PHPCensor/Controller/SessionController.php index fb60230d..122ad509 100644 --- a/src/PHPCensor/Controller/SessionController.php +++ b/src/PHPCensor/Controller/SessionController.php @@ -11,7 +11,7 @@ use PHPCensor\Store\UserStore; /** * Session Controller - Handles user login / logout. - * + * * @author Dan Cryer */ class SessionController extends Controller @@ -53,7 +53,7 @@ class SessionController extends Controller return $response; } } - + $isLoginFailure = false; if ($this->request->getMethod() == 'POST') { @@ -92,7 +92,7 @@ class SessionController extends Controller if ($rememberMe) { $rememberKey = md5(microtime(true)); - + $user->setRememberKey($rememberKey); $this->userStore->save($user); @@ -161,7 +161,6 @@ class SessionController extends Controller */ public function logout() { - unset($_SESSION['php-censor-user']); unset($_SESSION['php-censor-user-id']); session_destroy(); @@ -233,7 +232,8 @@ class SessionController extends Controller $hash = password_hash($this->getParam('password'), PASSWORD_DEFAULT); $user->setHash($hash); - $_SESSION['php-censor-user'] = $this->userStore->save($user); + $this->userStore->save($user); + $_SESSION['php-censor-user-id'] = $user->getId(); $response = new b8\Http\Response\RedirectResponse(); diff --git a/src/PHPCensor/Controller/UserController.php b/src/PHPCensor/Controller/UserController.php index f598d130..c4603aca 100644 --- a/src/PHPCensor/Controller/UserController.php +++ b/src/PHPCensor/Controller/UserController.php @@ -56,7 +56,7 @@ class UserController extends Controller public function profile() { /** @var User $user */ - $user = $_SESSION['php-censor-user']; + $user = $this->getUser(); if ($this->request->getMethod() == 'POST') { $name = $this->getParam('name', null); @@ -73,8 +73,7 @@ class UserController extends Controller $perPage = null; } - $_SESSION['php-censor-user'] = $this->userService->updateUser($user, $name, $email, $password, null, $language, $perPage); - $user = $_SESSION['php-censor-user']; + $user = $this->userService->updateUser($user, $name, $email, $password, null, $language, $perPage); $this->view->updated = 1; } diff --git a/src/PHPCensor/Helper/Lang.php b/src/PHPCensor/Helper/Lang.php index 106b6ca5..300ee1b4 100644 --- a/src/PHPCensor/Helper/Lang.php +++ b/src/PHPCensor/Helper/Lang.php @@ -3,7 +3,9 @@ namespace PHPCensor\Helper; use b8\Config; +use b8\Store\Factory; use PHPCensor\Model\User; +use PHPCensor\Store\UserStore; /** * Languages Helper Class - Handles loading strings files and the strings within them. @@ -11,7 +13,7 @@ use PHPCensor\Model\User; class Lang { const DEFAULT_LANGUAGE = 'en'; - + /** * @var string */ @@ -99,7 +101,7 @@ class Lang $languages = []; foreach (self::$languages as $language) { $strings = include(SRC_DIR . 'Languages' . DIRECTORY_SEPARATOR . 'lang.' . $language . '.php'); - $languages[$language] = !empty($strings['language_name']) + $languages[$language] = !empty($strings['language_name']) ? $strings['language_name'] . ' (' . $language . ')' : $language; } @@ -132,11 +134,11 @@ class Lang return; } - /** @var User $user */ - $user = !empty($_SESSION['php-censor-user']) ? $_SESSION['php-censor-user'] : null; - - if ((!is_object($user) || get_class($user) == '__PHP_Incomplete_Class') && gettype($user) == 'object') { - $user = unserialize(serialize($_SESSION['php-censor-user'])); + $user = null; + if (!empty($_SESSION['php-censor-user-id'])) { + /** @var UserStore $userStore */ + $userStore = Factory::getStore('User'); + $user = $userStore->getById($_SESSION['php-censor-user-id']); } if ($user) { @@ -173,7 +175,7 @@ class Lang if (is_null($strings) || !is_array($strings) || !count($strings)) { return null; } - + return $strings; } diff --git a/src/PHPCensor/Helper/User.php b/src/PHPCensor/Helper/User.php deleted file mode 100644 index 6ca3d25f..00000000 --- a/src/PHPCensor/Helper/User.php +++ /dev/null @@ -1,32 +0,0 @@ - - */ -class User -{ - /** - * Proxies method calls through to the current active user model. - * @param $method - * @param array $params - * @return mixed|null - */ - public function __call($method, $params = []) - { - if (empty($_SESSION['php-censor-user'])) { - return null; - } - - $user = $_SESSION['php-censor-user']; - - if (!is_object($user)) { - return null; - } - - return call_user_func_array([$user, $method], $params); - } -} diff --git a/src/PHPCensor/View.php b/src/PHPCensor/View.php index 8a648e42..fe2fc428 100644 --- a/src/PHPCensor/View.php +++ b/src/PHPCensor/View.php @@ -3,7 +3,9 @@ namespace PHPCensor; use b8\Config; +use b8\Store\Factory; use PHPCensor\Model\User; +use PHPCensor\Store\UserStore; class View { @@ -85,4 +87,19 @@ class View return $disableAuth; } + + /** + * @return User|null + */ + protected function getUser() + { + if (empty($_SESSION['php-censor-user-id'])) { + return null; + } + + /** @var UserStore $userStore */ + $userStore = Factory::getStore('User'); + + return $userStore->getById($_SESSION['php-censor-user-id']); + } } diff --git a/src/PHPCensor/View/Group/index.phtml b/src/PHPCensor/View/Group/index.phtml index 182b4251..7d20dde3 100644 --- a/src/PHPCensor/View/Group/index.phtml +++ b/src/PHPCensor/View/Group/index.phtml @@ -2,8 +2,6 @@ use PHPCensor\Helper\Lang; -$user = $_SESSION['php-censor-user']; - ?>
@@ -28,7 +26,7 @@ $user = $_SESSION['php-censor-user'];
- getIsAdmin() && (!count($group['projects']))): ?> + getUser()->getIsAdmin() && (!count($group['projects']))): ?> diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index 7b74a738..940aeeda 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -6,8 +6,6 @@ use PHPCensor\Helper\Lang; -$user = $_SESSION['php-censor-user']; - ?> @@ -94,7 +92,7 @@ $branches = $build->getExtra('branches');
- getIsAdmin()): ?> + getUser()->getIsAdmin()): ?> diff --git a/src/PHPCensor/View/Project/view.phtml b/src/PHPCensor/View/Project/view.phtml index 52ff981d..919aba25 100644 --- a/src/PHPCensor/View/Project/view.phtml +++ b/src/PHPCensor/View/Project/view.phtml @@ -6,8 +6,6 @@ use PHPCensor\Helper\Lang; -$user = $_SESSION['php-censor-user']; - ?>