blog_model = $this->load_model('blog'); $this->comments_controller = $this->load_controller('_comments'); } public function index(): void { parent::index(); $data = $this->blog_model->get_data(); $this->view('header', $data); $this->view('blog/main', $data); $this->view('footer', $data); } private function protect(string $folder, string $name): void { $basepath = ASSET_ROOT . '/' . $folder . '/'; $realBase = realpath($basepath); $userpath = $basepath . $name . '.md'; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { $this->error(404); } } public function post($name): void { $this->protect('blog', $name); parent::index(); $data = $this->blog_model->get_post($name); if ($data === FALSE) { $this->error(404); } $this->view('header', $data); $this->view('blog/post', $data); $ref = "blog/post/{$name}"; $this->comments_controller->comments($data['post']['meta']['name'], $ref); $this->view('footer', $data); } public function writeup($name): void { $this->protect('writeup', $name); parent::index(); $data = $this->blog_model->get_writeup($name); if ($data === FALSE) { $this->error(404); } $this->view('header', $data); $this->view('blog/writeup', $data); $ref = "blog/writeup/{$name}"; $this->comments_controller->comments($data['post']['meta']['name'], $ref); $this->view('footer', $data); } public function rss(): void { $data = $this->blog_model->get_data(); header('Content-Type: application/xml'); $this->view('blog/rss', $data); die(); } } ?>