]> dev.renevier.net Git - syj.git/blob - application/controllers/helpers/SyjUserManager.php
d1f8a600c5a52ac5c7c992914a5b48756c671fee
[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         // TODO: try to make only one sql request
12         $adapter = Zend_Db_Table_Abstract::getDefaultAdapter();
13         $authAdapter = new Zend_Auth_Adapter_DbTable($adapter, 'users', 'pseudo', 'password');
14         $authAdapter->setIdentity($username)->setCredential($hash);
15         $auth = Zend_Auth::getInstance();
16         $result = $auth->authenticate($authAdapter);
17         if (!$result->isValid()) {
18             self::$_current = null;
19             return false;
20         }
21         $userid = $authAdapter->getResultRowObject('id')->id;
22         $userMapper = new Syj_Model_UserMapper();
23         $user = new Syj_Model_User();
24         if (!$userMapper->find($userid, $user)) {
25             throw new Zend_Exception();
26         }
27
28         if (!isset ($_COOKIE['syj_user']) or (!isset ($_COOKIE['syj_hashpass']))) {
29             if ($rememberme) {
30                 // cookie will be valid for 2 weeks
31                 $time = time () + 14 * 60 * 24 * 60;
32             } else {
33                 $time = 0;
34             }
35             setcookie("syj_user", $username, $time, "", "", false, true);
36             setcookie("syj_hashpass", $hash, $time, "", "", false, true);
37         }
38         self::$_current = $user;
39         return true;
40     }
41
42     static public function logout() {
43         self::$_current = null;
44         if (isset ($_COOKIE['syj_user'])) {
45             setcookie ('syj_user', "", time() - 3600, "" , "",false, true);
46         }
47         if (isset ($_COOKIE['syj_hashpass'])) {
48             setcookie ('syj_hashpass', "", time() - 3600, "" , "",false, true);
49         }
50     }
51
52     static public function current() {
53         if (self::$_current === -1) {
54             if ((!isset ($_COOKIE['syj_user'])) || (!isset ($_COOKIE['syj_hashpass']))
55                  || (!self::validate($_COOKIE['syj_user'], $_COOKIE['syj_hashpass']))) {
56                     self::logout();
57             }
58         }
59         return self::$_current;
60     }
61
62     public function needsLogin() {
63         if (self::current()) {
64             return;
65         }
66
67         $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
68         $view = $viewRenderer->view;
69         $request = $this->getRequest();
70
71         $encodeduri = $view->UriPath(true);
72         $loginurl = $view->addParamToUrl($view->baseUrl() . '/' . 'login', 'redirect', $encodeduri);
73         $translator = Zend_Registry::get('Zend_Translate');
74         $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));
75     }
76
77 }