-
Notifications
You must be signed in to change notification settings - Fork 92
/
Copy pathtoken.php
74 lines (71 loc) · 1.99 KB
/
token.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
/**
* Class for creating and deleting tokens
*/
class Token
{
/**
* Generates a new token from user id and randomly generated salt.
* @param int $id user ID
* @param String $data associated with token that are important
* @param timestamp $expire expiration time
* @return String token
*/
public static function add($id, $data, $expire)
{
global $mysqli;
$salt = uniqid(mt_rand(), true);
$token = hash('sha256', $id.$salt);
$stmt = $mysqli->prepare("INSERT INTO tokens VALUES(?, ?, ?, ?)");
$stmt->bind_param("siis", $token, $id, $expire, $data);
$stmt->execute();
$stmt->get_result();
return $token;
}
/**
* Checks whether token exists in the database and has not expired.
* @param String $token
* @param int $id user ID
* @param String $data
* @return int count of results in database
*/
public static function validate($token, $id, $data)
{
global $mysqli;
$time = time();
$stmt = $mysqli->prepare("SELECT count(*) as count FROM tokens WHERE token = ? AND user = ? AND expire>=? AND data LIKE ?");
$stmt->bind_param("siis", $token, $id, $time, $data);
$stmt->execute();
$query = $stmt->get_result();
return $query->fetch_assoc()['count'];
}
/**
* Returns token data
* @param String $token
* @param int $id user ID
* @return String data
*/
public static function get_data($token, $id)
{
global $mysqli;
$stmt = $mysqli->prepare("SELECT data as count FROM tokens WHERE token = ? AND user = ?");
$stmt->bind_param("si", $token, $id);
$stmt->execute();
$query = $stmt->get_result();
return $query->fetch_assoc()['data'];
}
/**
* Deletes token.
* @param String $token
* @return void
*/
public static function delete($token)
{
global $mysqli;
$time = time();
$stmt = $mysqli->prepare("DELETE FROM tokens WHERE token = ? OR expire<?");
$stmt->bind_param("sd", $token,$time);
$stmt->execute();
$stmt->get_result();
}
}