1: <?php
2: 3: 4: 5: 6: 7:
8:
9: namespace GLFramework\Controller;
10:
11:
12: use GLFramework\Controller;
13: use GLFramework\Events;
14: use GLFramework\Middleware;
15: use GLFramework\Model\User;
16: use GLFramework\Request;
17: use GLFramework\Response;
18:
19: class AuthController extends Controller implements Middleware
20: {
21:
22: private static $session_key = "auth_user";
23: 24: 25:
26: var $user;
27: private $requireLogin = true;
28:
29: public function __construct($base, $module)
30: {
31: parent::__construct($base, $module);
32: if(isset($_SESSION[self::$session_key]))
33: {
34: $username = $_SESSION[self::$session_key][0];
35: $password = $_SESSION[self::$session_key][1];
36: $user = self::instanceUser(null);
37: $user = $user->getByUserPassword($username, $password);
38: if($user)
39: {
40: $this->user = self::instanceUser($user);
41: }
42: else{
43: unset($_SESSION[self::$session_key]);
44: }
45: }
46: $this->addMiddleware($this);
47: }
48:
49:
50: public function login()
51: {
52:
53:
54: if(isset($_GET['logout']))
55: {
56: $this->addMessage("Se ha desconectado correctamente");
57: unset($_SESSION[self::$session_key]);
58: }
59: if($this->requireLogin)
60: {
61: if(!isset($_SESSION[self::$session_key]))
62: {
63: if(strpos($_SERVER['REQUEST_URI'], "/login") === FALSE)
64: {
65: if(!isset($_GET['logout']))
66: $this->addMessage("Por favor acceda con su cuenta antes de continuar", "warning");
67: $this->quit($this->config['app']['basepath'] . "/login");
68: return false;
69: }
70: }
71: }
72: return true;
73: }
74:
75: public function processLogin($username = null, $password = null, $encrypt = true)
76: {
77: if($username === null)
78: $username = $_POST['username'];
79: if($password === null)
80: $password = $_POST['password'];
81: if(isset($username) && isset($password))
82: {
83: $this->csrf();
84: $user = self::instanceUser(null);
85: $db = $this->getDb();
86: $username = $db->escape_string($username);
87: if($encrypt)
88: $password = $user->encrypt($password);
89: $user = $user->getByUserPassword($username, $password);
90: if($user)
91: {
92: $this->user = new User($user);
93: $_SESSION[self::$session_key] = array($username, $password);
94: Events::fire('onLoginSuccess', array('user' => $this->user));
95: $this->redirection("/home");
96: return true;
97: }
98: else{
99: $this->addMessage("Usuario o contraseƱa incorrecta", "danger");
100: }
101: }
102: return false;
103: }
104:
105: 106: 107:
108: public function isRequireLogin()
109: {
110: return $this->requireLogin;
111: }
112:
113: 114: 115:
116: public function setRequireLogin($requireLogin)
117: {
118: $this->requireLogin = $requireLogin;
119: }
120:
121: 122: 123: 124:
125: public static function instanceUser($data = null)
126: {
127: if(class_exists("User"))
128: return new \User($data);
129: return new User($data);
130: }
131:
132: public function next(Request $request, Response $response, $next)
133: {
134: if($this->login())
135: {
136: $next($request, $response);
137: }
138:
139: }
140:
141: public function run()
142: {
143:
144:
145: return true;
146: }
147:
148: public static function auth($user_id)
149: {
150: $user = self::instanceUser($user_id);
151: $_SESSION[self::$session_key] = array($user->user_name, $user->password);
152: }
153: }