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}