xref: /plugin/bez/mdl/Authentication_tokenFactory.php (revision e8827d732aaeeee6f7b703c5654f86ca97056383)
1<?php
2
3namespace dokuwiki\plugin\bez\mdl;
4
5use dokuwiki\plugin\bez\meta\PermissionDeniedException;
6
7class Authentication_tokenFactory extends Factory {
8    protected function select_query() {
9        return "SELECT * FROM {$this->get_table_name()}";
10    }
11
12    public function get_token($page_id) {
13        if ($this->model->acl->get_level() < BEZ_AUTH_USER) {
14            throw new PermissionDeniedException();
15        }
16
17        $r = $this->model->sqlite->query("SELECT token FROM {$this->get_table_name()} WHERE page_id=?", $page_id);
18        $token = $this->model->sqlite->res2single($r);
19        if (!$token) {
20            return $this->create_token($page_id);
21        }
22        return $token;
23    }
24
25    public function create_token($page_id, $expire_date='') {
26
27        if ($this->model->acl->get_level() < BEZ_AUTH_USER) {
28            throw new PermissionDeniedException();
29        }
30
31        if ($expire_date == '') {
32            $expire_date = date('c', strtotime('+10 years'));
33        }
34
35        $token = bin2hex(openssl_random_pseudo_bytes(16));
36        $this->model->sqlite->storeEntry($this->get_table_name(),
37                                         array('page_id'         => $page_id,
38                                               'token'           => $token,
39                                               'generated_by'    => $this->model->user_nick,
40                                               'generation_date' => date('c'),
41                                               'expire_date'     => $expire_date));
42
43        return $token;
44    }
45}