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