Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit 7275b57

Browse files
author
Jamie Snape
committed
Refactor cookie creation
1 parent f87ec17 commit 7275b57

File tree

9 files changed

+156
-116
lines changed

9 files changed

+156
-116
lines changed

core/Bootstrap.php

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
2828
protected function _initDoctype()
2929
{
3030
$this->bootstrap('view');
31+
32+
/** @var Zend_View $view */
3133
$view = $this->getResource('view');
3234
$view->doctype('XHTML1_STRICT');
3335
}
@@ -111,6 +113,8 @@ protected function _initDatabase()
111113
protected function _initErrorHandle()
112114
{
113115
$this->bootstrap(array('Config', 'Logger'));
116+
117+
/** @var Zend_Log $logger */
114118
$logger = $this->getResource('Logger');
115119

116120
Zend_Registry::set('components', array());
@@ -128,7 +132,9 @@ protected function _initErrorHandle()
128132
*/
129133
protected function _initInternationalization()
130134
{
131-
$this->bootstrap(array('Config', 'Database'));
135+
$this->bootstrap(array('Config', 'Database', 'FrontController'));
136+
137+
/** @var false|Zend_Db_Adapter_Abstract $database */
132138
$database = $this->getResource('Database');
133139

134140
if ((int) Zend_Registry::get('configGlobal')->get('internationalization', 0) === 1) {
@@ -144,18 +150,17 @@ protected function _initInternationalization()
144150
$language = 'en';
145151
}
146152

153+
/** @var Zend_Controller_Front $frontController */
154+
$frontController = $this->getResource('FrontController');
155+
156+
/** @var Zend_Controller_Request_Http $request */
157+
$request = $frontController->getRequest();
158+
147159
$date = new DateTime();
148160
$interval = new DateInterval('P1M');
149-
setcookie(
150-
MIDAS_LANGUAGE_COOKIE_NAME,
151-
$language,
152-
$date->add($interval)->getTimestamp(),
153-
'/',
154-
!empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'],
155-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure',
156-
1) === 1,
157-
true
158-
);
161+
$expires = $date->add($interval);
162+
163+
UtilityComponent::setCookie($request, MIDAS_LANGUAGE_COOKIE_NAME, $language, $expires);
159164
}
160165

161166
if ($database !== false) {
@@ -249,6 +254,8 @@ protected function _initZFDebug()
249254
);
250255

251256
$debug = new ZFDebug_Controller_Plugin_Debug($options);
257+
258+
/** @var Zend_Controller_Front $frontController */
252259
$frontController = $this->getResource('FrontController');
253260
$frontController->registerPlugin($debug);
254261
}
@@ -258,6 +265,8 @@ protected function _initZFDebug()
258265
protected function _initFrontModules()
259266
{
260267
$this->bootstrap('FrontController');
268+
269+
/** @var Zend_Controller_Front $frontController */
261270
$frontController = $this->getResource('FrontController');
262271
$frontController->addModuleDirectory(BASE_PATH.'/modules');
263272

@@ -275,6 +284,8 @@ protected function _initSass()
275284
{
276285
$this->bootstrap(array('Config', 'Logger'));
277286
$config = Zend_Registry::get('configGlobal');
287+
288+
/** @var Zend_Log $logger */
278289
$logger = $this->getResource('Logger');
279290
if ($config->environment == 'development') {
280291
$directory = new RecursiveDirectoryIterator(BASE_PATH);
@@ -334,6 +345,7 @@ protected function _initRouter()
334345
{
335346
$this->bootstrap(array('Config', 'Database', 'FrontController'));
336347

348+
/** @var Zend_Controller_Front $frontController */
337349
$frontController = $this->getResource('FrontController');
338350
$frontController->addControllerDirectory(BASE_PATH.'/core/controllers');
339351

@@ -428,6 +440,8 @@ protected function _initRouter()
428440
protected function _initREST()
429441
{
430442
$this->bootstrap('FrontController');
443+
444+
/** @var Zend_Controller_Front $frontController */
431445
$frontController = $this->getResource('FrontController');
432446

433447
// register the RestHandler plugin

core/controllers/CommunityController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ public function createAction()
660660
{
661661
$this->requireAdminPrivileges();
662662
$form = $this->Form->Community->createCreateForm();
663-
if ($this->_request->isPost() && $form->isValid($this->getRequest()->getPost())
663+
if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())
664664
) {
665665
$name = $form->getValue('name');
666666
$description = $form->getValue('description');

core/controllers/FeedController.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,12 @@ public function indexAction()
5353
if (isset($cookieData) && is_numeric($cookieData)) {
5454
$this->view->lastFeedVisit = $cookieData;
5555
}
56+
5657
$date = new DateTime();
5758
$interval = new DateInterval('P1M');
58-
setcookie(
59-
$cookieName,
60-
$date->getTimestamp(),
61-
$date->add($interval)->getTimestamp(),
62-
'/',
63-
$request->getHttpHost(),
64-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
65-
true
66-
);
59+
$expires = $date->add($interval);
60+
61+
UtilityComponent::setCookie($request, $cookieName, $date->getTimestamp(), $expires);
6762
}
6863

6964
$this->addDynamicHelp(

core/controllers/ItemController.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,17 +188,12 @@ public function viewAction()
188188
}
189189
$recentItems = array_reverse($tmp);
190190
$recentItems[] = $itemDao->getKey();
191+
191192
$date = new DateTime();
192193
$interval = new DateInterval('P1M');
193-
setcookie(
194-
$cookieName,
195-
serialize($recentItems),
196-
$date->add($interval)->getTimestamp(),
197-
'/',
198-
$request->getHttpHost(),
199-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
200-
true
201-
);
194+
$expires = $date->add($interval);
195+
196+
UtilityComponent::setCookie($request, $cookieName, serialize($recentItems), $expires);
202197
}
203198

204199
$this->Item->incrementViewCount($itemDao);

core/controllers/UserController.php

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -158,18 +158,16 @@ public function logoutAction()
158158
$notifier->callback('CALLBACK_CORE_USER_LOGOUT');
159159
$this->userSession->Dao = null;
160160
Zend_Session::ForgetMe();
161+
162+
/** @var Zend_Controller_Request_Http $request */
161163
$request = $this->getRequest();
164+
162165
$date = new DateTime();
163166
$interval = new DateInterval('P1M');
164-
setcookie(
165-
MIDAS_USER_COOKIE_NAME,
166-
null,
167-
$date->sub($interval)->getTimestamp(),
168-
'/',
169-
$request->getHttpHost(),
170-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
171-
true
172-
);
167+
$expires = $date->sub($interval);
168+
169+
UtilityComponent::setCookie($request, MIDAS_USER_COOKIE_NAME, false, $expires);
170+
173171
$noRedirect = $this->getParam('noRedirect');
174172
if (isset($noRedirect)) {
175173
$this->disableView();
@@ -499,18 +497,17 @@ public function ajaxloginAction()
499497
if ($userDao->getSalt() == '') {
500498
$passwordHash = $this->User->convertLegacyPasswordHash($userDao, $form->getValue('password'));
501499
}
500+
501+
/** @var Zend_Controller_Request_Http $request */
502502
$request = $this->getRequest();
503503
$date = new DateTime();
504504
$interval = new DateInterval('P1M');
505-
setcookie(
506-
MIDAS_USER_COOKIE_NAME,
507-
$userDao->getKey().'-'.$passwordHash,
508-
$date->add($interval)->getTimestamp(),
509-
'/',
510-
$request->getHttpHost(),
511-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
512-
true
513-
);
505+
$expires = $date->add($interval);
506+
507+
$value = $userDao->getKey().'-'.$passwordHash;
508+
509+
UtilityComponent::setCookie($request, MIDAS_USER_COOKIE_NAME, $value, $expires);
510+
514511
Zend_Session::start();
515512
$user = new Zend_Session_Namespace('Auth_User');
516513
$user->setExpirationSeconds(60 * (int) Zend_Registry::get('configGlobal')->get('session_lifetime', 20));
@@ -526,17 +523,20 @@ public function ajaxloginAction()
526523
/** Login action */
527524
public function loginAction()
528525
{
526+
/** @var Zend_Controller_Request_Http $request */
529527
$request = $this->getRequest();
530528
$this->Form->User->uri = $request->getRequestUri();
529+
530+
/** @var Zend_Form $form */
531531
$form = $this->Form->User->createLoginForm();
532532
$this->view->form = $this->getFormAsArray($form);
533533
$this->disableLayout();
534534
if ($this->_request->isPost()) {
535535
$this->disableView();
536536
$previousUri = $this->getParam('previousuri');
537537
if ($form->isValid($request->getPost())) {
538+
$notifications = array();
538539
try {
539-
$notifications = array(); // initialize first in case of exception
540540
$notifications = Zend_Registry::get('notifier')->callback(
541541
'CALLBACK_CORE_AUTHENTICATION',
542542
array('email' => $form->getValue('email'), 'password' => $form->getValue('password'))
@@ -545,6 +545,7 @@ public function loginAction()
545545
$this->getLogger()->crit($exc->getMessage());
546546
}
547547
$authModule = false;
548+
$userDao = false;
548549
foreach ($notifications as $user) {
549550
if ($user) {
550551
$userDao = $user;
@@ -585,6 +586,9 @@ public function loginAction()
585586
} elseif (!$authModule) {
586587
$passwordHash = md5($instanceSalt.$form->getValue('password'));
587588
$coreAuth = $this->User->legacyAuthenticate($userDao, $instanceSalt, $form->getValue('password'));
589+
} else {
590+
$passwordHash = false;
591+
$coreAuth = false;
588592
}
589593

590594
if ($authModule || $coreAuth) {
@@ -603,30 +607,19 @@ public function loginAction()
603607
) {
604608
$passwordHash = $this->User->convertLegacyPasswordHash($userDao, $form->getValue('password'));
605609
}
606-
$remember = $form->getValue('remerberMe');
610+
611+
$remember = (int) $form->getValue('remerberMe');
607612
if (!$this->isTestingEnv()) {
608613
$date = new DateTime();
609614
$interval = new DateInterval('P1M');
610-
if (!$authModule && isset($remember) && $remember == 1) {
611-
setcookie(
612-
MIDAS_USER_COOKIE_NAME,
613-
$userDao->getKey().'-'.$passwordHash,
614-
$date->add($interval)->getTimestamp(),
615-
'/',
616-
$request->getHttpHost(),
617-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
618-
true
619-
);
615+
616+
if (!$authModule && $remember === 1) {
617+
$expires = $date->add($interval);
618+
$value = $userDao->getKey().'-'.$passwordHash;
619+
UtilityComponent::setCookie($request, MIDAS_USER_COOKIE_NAME, $value, $expires);
620620
} else {
621-
setcookie(
622-
MIDAS_USER_COOKIE_NAME,
623-
null,
624-
$date->sub($interval)->getTimestamp(),
625-
'/',
626-
$request->getHttpHost(),
627-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
628-
true
629-
);
621+
$expires = $date->sub($interval);
622+
UtilityComponent::setCookie($request, MIDAS_USER_COOKIE_NAME, false, $expires);
630623
Zend_Session::start();
631624
$user = new Zend_Session_Namespace('Auth_User');
632625
$user->setExpirationSeconds(60 * (int) Zend_Registry::get('configGlobal')->get('session_lifetime', 20));
@@ -1330,18 +1323,15 @@ public function deleteAction()
13301323
session_start();
13311324
$this->userSession->Dao = null;
13321325
Zend_Session::ForgetMe();
1326+
1327+
/** @var Zend_Controller_Request_Http $request */
13331328
$request = $this->getRequest();
1329+
13341330
$date = new DateTime();
13351331
$interval = new DateInterval('P1M');
1336-
setcookie(
1337-
MIDAS_USER_COOKIE_NAME,
1338-
null,
1339-
$date->sub($interval)->getTimestamp(),
1340-
'/',
1341-
$request->getHttpHost(),
1342-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
1343-
true
1344-
);
1332+
$expires = $date->sub($interval);
1333+
1334+
UtilityComponent::setCookie($request, MIDAS_USER_COOKIE_NAME, false, $expires);
13451335
}
13461336
}
13471337
$this->_helper->viewRenderer->setNoRender();

core/controllers/components/UtilityComponent.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public function getAllModules()
100100
*/
101101
public static function extractPathParams()
102102
{
103+
/** @var Zend_Controller_Request_Http $request */
103104
$request = Zend_Controller_Front::getInstance()->getRequest();
104105
$allTokens = preg_split('@/@', $request->getPathInfo(), null, PREG_SPLIT_NO_EMPTY);
105106

@@ -939,4 +940,18 @@ public static function realpath($path)
939940

940941
return $realpath;
941942
}
943+
944+
/**
945+
* Send a cookie with the rest of the HTTP headers.
946+
*
947+
* @param Zend_Controller_Request_Http $request HTTP request
948+
* @param string $name name of the cookie
949+
* @param false|string $value value of the cookie
950+
* @param DateTime $expires time the cookie expires
951+
*/
952+
public static function setCookie($request, $name, $value, $expires)
953+
{
954+
$secure = (int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1;
955+
setcookie($name, $value, $expires->getTimestamp(), '/', $request->getHttpHost(), $secure, true);
956+
}
942957
}

modules/googleauth/Notification.php

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class Googleauth_Notification extends MIDAS_Notification
3131
/** @var array */
3232
public $_models = array('Setting', 'User', 'Userapi');
3333

34+
/** @var array */
35+
public $_moduleComponents = array('Cookie');
36+
3437
/** @var array */
3538
public $_moduleModels = array('User');
3639

@@ -133,15 +136,9 @@ public function checkUserCookie($args)
133136

134137
$date = new DateTime();
135138
$interval = new DateInterval('P1M');
136-
setcookie(
137-
GOOGLE_AUTH_ACCESS_TOKEN_COOKIE_NAME,
138-
$client->getAccessToken(),
139-
$date->add($interval)->getTimestamp(),
140-
'/',
141-
$request->getHttpHost(),
142-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
143-
true
144-
);
139+
$expires = $date->add($interval);
140+
141+
$this->ModuleComponent->Cookie->setAccessTokenCookie($request, $client, $expires);
145142
}
146143
}
147144

@@ -160,16 +157,11 @@ public function handleUserLogout($args)
160157
{
161158
/** @var Zend_Controller_Request_Http $request */
162159
$request = Zend_Controller_Front::getInstance()->getRequest();
160+
163161
$date = new DateTime();
164162
$interval = new DateInterval('P1M');
165-
setcookie(
166-
GOOGLE_AUTH_ACCESS_TOKEN_COOKIE_NAME,
167-
null,
168-
$date->sub($interval)->getTimestamp(),
169-
'/',
170-
$request->getHttpHost(),
171-
(int) Zend_Registry::get('configGlobal')->get('cookie_secure', 1) === 1,
172-
true
173-
);
163+
$expires = $date->sub($interval);
164+
165+
$this->ModuleComponent->Cookie->setAccessTokenCookie($request, false, $expires);
174166
}
175167
}

0 commit comments

Comments
 (0)