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}