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}