Platform  3.1
PHP API documentation
 All Data Structures Namespaces Files Functions Variables Pages
Class.UserToken.php
Go to the documentation of this file.
1 <?php
2 /*
3  * @author Anakeen
4  * @license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Anakeen - licence CC
5  * @package FDL
6 */
7 /**
8  * UserToken class
9  *
10  * This class provides methods to store and manage authentication
11  * tokens with expiration time
12  *
13  * @author Anakeen 2009
14  * @version $Id: Class.UserToken.php,v 1.6 2009/01/16 13:33:00 jerome Exp $
15  * @license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Anakeen - licence CC
16  * @package FDL
17  * @subpackage
18  */
19 /**
20  */
21 
22 include_once ('Class.DbObj.php');
23 
24 class UserToken extends DbObj
25 {
26  var $Class = '$Id: Class.UserToken.php,v 1.6 2009/01/16 13:33:00 jerome Exp $';
27 
28  var $fields = array(
29  'token',
30  'userid',
31  'expire',
32  'expendable',
33  'context'
34  );
35 
36  var $id_fields = array(
37  'token'
38  );
39 
40  var $dbtable = 'usertoken';
41 
42  var $sqlcreate = "
43  CREATE TABLE usertoken (
44  token VARCHAR(256) NOT NULL PRIMARY KEY,
45  userid INT NOT NULL,
46  expire TIMESTAMP NOT NULL,
47  expendable BOOLEAN DEFAULT FALSE,
48  context text
49  );
50  CREATE INDEX usertoken_idx ON usertoken(token);
51  ";
52 
53  var $hAlg = 'sha1';
54  var $rndSize = 4;
55  var $expiration = 86400; // 24 hours
56  function setHAlg($hAlg)
57  {
58  $this->hAlg = $hAlg;
59  return $this->hAlg;
60  }
61 
62  function setRndSize($rndSize)
63  {
64  $this->rndSize = $rndSize;
65  return $this->rndSize;
66  }
67 
68  function setExpiration($expiration = "")
69  {
70  if ($expiration == "") {
72  }
73 
74  if (preg_match('/^-?infinity$/', $expiration)) {
75  $this->expire = $expiration;
76  } else {
77  if (!is_numeric($expiration)) {
78  return false;
79  }
80 
81  $this->expire = strftime("%Y-%m-%d %H:%M:%S", time() + $expiration);
82  }
83 
84  return $this->expire;
85  }
86 
87  function genToken()
88  {
89  $rnd = rand();
90  for ($i = 0; $i < $this->rndSize; $i++) {
91  $rnd.= rand();
92  }
93 
94  switch (strtolower($this->hAlg)) {
95  case 'sha1':
96  return sha1($rnd);
97  break;
98 
99  case 'md5':
100  return md5($rnd);
101  break;
102 
103  case 'raw':
104  return $rnd;
105  break;
106  }
107 
108  error_log(__CLASS__ . "::" . __FUNCTION__ . " " . "Unknown hAlg " . $this->hAlg . ". Will return raw random value.");
109  return $rnd;
110  }
111 
112  function getToken()
113  {
114  if ($this->token == "") {
115  error_log(__CLASS__ . "::" . __FUNCTION__ . " " . "token is not defined.");
116  }
117  return $this->token;
118  }
119 
120  function deleteExpired()
121  {
122  $err = $this->exec_query("DELETE FROM " . pg_escape_string($this->dbtable) . " WHERE expire < now()");
123  return $err;
124  }
125 
126  function preUpdate()
127  {
128  if ($this->token == "") {
129  return "Error: token not set";
130  }
131  if ($this->userid == "") {
132  return "Error: userid not set";
133  }
134  if ($this->expire == "") {
135  return "Error: expire not set";
136  }
137  }
138 }
139 ?>
← centre documentaire © anakeen - published under CC License - Dynacase