FreeSTAR-Status-Engine/classes/token.php

76 lines
2.0 KiB
PHP
Raw Normal View History

2017-11-23 18:09:36 -05:00
<?php
2017-11-23 18:09:36 -05:00
/**
* Class for creating and deleting tokens
*/
2017-11-23 18:09:36 -05:00
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
*/
2018-01-13 10:51:17 -05:00
public static function add($id, $data, $expire)
2017-11-23 18:09:36 -05:00
{
global $mysqli;
$salt = uniqid(mt_rand(), true);
$token = hash('sha256', $id . $salt);
2017-11-23 18:09:36 -05:00
$stmt = $mysqli->prepare("INSERT INTO tokens VALUES(?, ?, ?, ?)");
$stmt->bind_param("siis", $token, $id, $expire, $data);
$stmt->execute();
$stmt->get_result();
2017-11-23 18:09:36 -05:00
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)
2017-11-23 18:09:36 -05:00
{
global $mysqli;
$time = time();
2017-11-29 09:32:40 -05:00
$stmt = $mysqli->prepare("SELECT count(*) as count FROM tokens WHERE token = ? AND user = ? AND expire>=? AND data LIKE ?");
2017-11-23 18:09:36 -05:00
$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
*/
2017-11-23 18:09:36 -05:00
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);
2017-11-23 18:09:36 -05:00
$stmt->execute();
2018-04-20 11:39:34 -04:00
$stmt->get_result();
2017-11-23 18:09:36 -05:00
}
}