1: <?php
2:
3: namespace PHPixie\Security\Tokens\Storage;
4:
5: abstract class Database implements \PHPixie\Security\Tokens\Storage
6: {
7: protected $tokens;
8: protected $connection;
9:
10: public function __construct($tokens, $connection)
11: {
12: $this->tokens = $tokens;
13: $this->connection = $connection;
14: }
15:
16: public function insert($token)
17: {
18: $query = $this->connection->insertQuery();
19: $this->setSource($query);
20:
21: $query
22: ->data(array(
23: 'series' => $token->series(),
24: 'userId' => $token->userId(),
25: 'challenge' => $token->challenge(),
26: 'expires' => $token->expires()
27: ))
28: ->execute();
29: }
30:
31: public function get($series)
32: {
33: $query = $this->connection->deleteQuery();
34: $this->setSource($query);
35:
36: $query
37: ->where('expires', '<', time())
38: ->execute();
39:
40: $query = $this->connection->selectQuery();
41: $this->setSource($query);
42:
43: $data = $query
44: ->where('series', $series)
45: ->execute()
46: ->current();
47:
48: if($data === null) {
49: return null;
50: }
51:
52: return $this->tokens->token(
53: $data->series,
54: $data->userId,
55: $data->challenge,
56: $data->expires
57: );
58: }
59:
60: public function update($token)
61: {
62: $query = $this->connection->updateQuery();
63: $this->setSource($query);
64:
65: $query
66: ->set(array(
67: 'challenge' => $token->challenge(),
68: 'expires' => $token->expires()
69: ))
70: ->where('series', $token->series())
71: ->execute();
72: }
73:
74: public function remove($series)
75: {
76: $query = $this->connection->deleteQuery();
77: $this->setSource($query);
78:
79: $query
80: ->where('series', $series)
81: ->execute();
82: }
83:
84: protected abstract function setSource($query);
85: }