]> dev.renevier.net Git - syj.git/blob - application/controllers/helpers/SyjUserManager.php
use $request->getCookie instead of $_COOKIE
[syj.git] / application / controllers / helpers / SyjUserManager.php
1 <?php
2 /*  This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
3     and is published under the AGPL license. */
4
5 class Syj_Controller_Action_Helper_SyjUserManager extends Zend_Controller_Action_Helper_Abstract
6 {
7     // -1 for undeterminated, null for non logged, Syj_Model_User for a logged user
8     protected static $_current = -1;
9
10     static public function validate($username, $hash, $rememberme = false) {
11         if (!$username) {
12             return false;
13         }
14         // TODO: try to make only one sql request
15         $adapter = Zend_Db_Table_Abstract::getDefaultAdapter();
16         $authAdapter = new Zend_Auth_Adapter_DbTable($adapter, 'users', 'pseudo', 'password');
17         $authAdapter->setIdentity($username)->setCredential($hash);
18         $auth = Zend_Auth::getInstance();
19         $result = $auth->authenticate($authAdapter);
20         if (!$result->isValid()) {
21             self::$_current = null;
22             return false;
23         }
24         $userid = $authAdapter->getResultRowObject('id')->id;
25         $userMapper = new Syj_Model_UserMapper();
26         $user = new Syj_Model_User();
27         if (!$userMapper->find($userid, $user)) {
28             throw new Zend_Exception();
29         }
30
31         $request = Zend_Controller_Front::getInstance()->getRequest();
32         if (!$request->getCookie('syj_user') or !$request->getCookie('syj_hashpass')) {
33             if ($rememberme) {
34                 // cookie will be valid for 2 weeks
35                 $time = time () + 14 * 60 * 24 * 60;
36             } else {
37                 $time = 0;
38             }
39             setcookie("syj_user", $username, $time, "", "", false, true);
40             setcookie("syj_hashpass", $hash, $time, "", "", false, true);
41         }
42         self::$_current = $user;
43         return true;
44     }
45
46     static public function logout() {
47         self::$_current = null;
48         $request = Zend_Controller_Front::getInstance()->getRequest();
49         if ($request->getCookie('syj_user')) {
50             setcookie ('syj_user', "", time() - 3600, "" , "",false, true);
51         }
52         if ($request->getCookie('syj_hashpass')) {
53             setcookie ('syj_hashpass', "", time() - 3600, "" , "",false, true);
54         }
55     }
56
57     static public function current() {
58         if (self::$_current === -1) {
59             $request = Zend_Controller_Front::getInstance()->getRequest();
60             if (!self::validate($request->getCookie('syj_user'), $request->getCookie('syj_hashpass'))) {
61                     self::logout();
62             }
63         }
64         return self::$_current;
65     }
66
67     public function needsLogin() {
68         if (self::current()) {
69             return;
70         }
71
72         $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
73         $view = $viewRenderer->view;
74         $request = $this->getRequest();
75
76         $encodeduri = $view->UriPath(true);
77         $loginurl = $view->addParamToUrl($view->baseUrl() . '/' . 'login', 'redirect', $encodeduri);
78         $translator = Zend_Registry::get('Zend_Translate');
79         $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));
80     }
81
82 }