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