markdown格式wiki文档

Index.php 10KB

    <?php namespace app\controller; // use \Firebase\JWT\JWT; use app\Request; use app\View; use app\Session; use app\model\User; use app\utils\RRException; use app\utils\ParsedownExtension; class Index extends View { public function auth() { if (!Session::get('userid')) { echo "您未登录请登录"; header("Location: /login", TRUE, 301); exit(); } } public function index() { $this->auth(); $request = Request::getInstance(); $doc = $request->params['doc']; $doc = ltrim($doc, '/'); if (substr($doc, -1) === '/') { $doc = $doc . "index.md"; } $doc = empty($doc) ? 'index.md' : $doc; if (pathinfo($doc, PATHINFO_EXTENSION) != 'md') { $doc = $doc . ".md"; } $filename = DATA_PATH . $doc; $text = ""; $toc = ""; $content = ""; if ($is_file_exists = file_exists($filename)) { $parsedownExtension = new ParsedownExtension(); $parsedownExtension->setTocEnabled(true); $text = file_get_contents($filename); $res = $parsedownExtension->text($text); $toc = $res['toc']; $content = $res['content']; } $this->assign('doc', $doc); $this->assign('is_file_exists', $is_file_exists); $this->assign('text', $text); $this->assign('toc', $toc); $this->assign('content', $content); $this->fetch(); } public function editor() { $doc = $GLOBALS['doc']; var_dump($doc); exit; $this->fetch(); } public function save() { $this->auth(); // 获取payload json数据,转换成数组形式 $postData = file_get_contents('php://input'); $requests = !empty($postData) ? json_decode($postData, true) : []; $doc = $requests['doc']; $content = $requests['content']; $pathinfo = pathinfo($doc); $dir_name = DATA_PATH . $pathinfo['dirname']; if (!is_dir($dir_name) && !mkdir($dir_name, 0744, true)) { die(json_encode(['code' => 2, 'msg' => '目录创建失败'])); } $filename = DATA_PATH . $doc; $res = file_put_contents($filename, $content); if ($res === false) { echo json_encode(['code' => 2, 'msg' => '保存失败']); } else { echo json_encode(['code' => 0, 'msg' => '保存成功, 字数:' . $res]); } die(); } // private function validate () // { // $jwt = isset($_SERVER['HTTP_TOKEN']) ? $_SERVER['HTTP_TOKEN'] : ''; // if (empty($jwt)) { // throw new RRException("You do not have permission to access.", 401); // } // try { // JWT::$leeway = 60; // $decoded = JWT::decode($jwt, KEY, ['HS256']); // $arr = (array)$decoded; // if ($arr['exp'] < time()) { // throw new RRException("认证信息已过期, 请重新登录.", 401); // } // } catch(\Exception $e) { // throw new RRException($e->getMessage(), 401); // } // return true; // } public function login() { if (Session::get('userid')) { echo "您已登录请登录"; header("Location: /index", TRUE, 301); exit(); } $request = Request::getInstance(); if ($request->isPost()) { $username = strip_tags(htmlentities($request->params['username'])); $password = strip_tags(htmlentities($request->params['password'])); if (!$username || !$password) { throw new RRException("用户名或密码不能为空!", 1); } $user = new User(); $info = $user->getInfoByUsername($username); if (!$info) { throw new RRException("用户名或密码错误!", 1); } if (md5($password) !== $info['password']) { throw new RRException("用户名或密码错误!", 1); } // // 用户名和密码正确,则签发tokon // $nowtime = time(); // $jwtInfo = [ // 'iss' => 'huwhois@163.com', //签发者 // 'iat' => $nowtime, //签发时间 // 'nbf' => $nowtime + 10, //在什么时间之后该jwt才可用 // 'exp' => $nowtime + 64800, //过期时间-18h // 'data' => [ // 'userid' => $user['id'], // 'username' => $username // ] // ]; // $token = JWT::encode($jwtInfo, KEY); // echo json_encode(['code'=>0, 'msg'=>'success', 'token'=>$token]); // 存 session Session::set('userid', $info['id']); Session::set('username', $info['username']); echo json_encode(['code' => 0, 'msg' => 'success']); die(); } else { $this->fetch(); } } public function logout() { Session::destroy(); echo "登出成功....."; header("Location: /login", TRUE, 301); exit(); } public function password() { $request = Request::getInstance(); if ($request->isPost()) { $userid = Session::get('userid'); if (!$userid) { throw new RRException('用户未登录, 请登录'); } $user = new User(); // 修改密码 $oldpassword = isset($request->params['oldpassword']) ? (string) $request->params['oldpassword'] : ''; $password = isset($request->params['newpassword']) ? (string) $request->params['newpassword'] : ''; $repassword = isset($request->params['repassword']) ? (string) $request->params['repassword'] : ''; if (!$password) { throw new RRException("密码不能为空", 1); } if ($password != $repassword) { throw new RRException("两次密码不一致", 1); } $userinfo = $user->getInfoById($userid); if (md5($oldpassword) != $userinfo['password']) { throw new RRException("原密码不正确", 1); } try { $user->updateById([ 'id' => $userid, 'password' => md5($password) ]); } catch (\Exception $e) { throw new RRException($e->getMessage(), 1); } Session::destroy(); echo json_encode(['code' => 0, 'msg' => "保存成功"]); die(); } } public function userlist() { $list = (new User())->dataList(); $this->assign('list', $list); $this->fetch(); } public function userdelete() { $request = Request::getInstance(); if ($request->isPost()) { $id = isset($request->params['userid']) ? (int) $request->params['userid'] : 0; if (!$id) { throw new RRException('userid 不能为空', 1); } $res = (new User())->deleteById($id); if ($res) { throw new RRException('操作成功', 0); } else { throw new RRException('操作失败', 1); } } } public function userinfo() { $request = Request::getInstance(); $userid = isset($request->params['userid']) ? (int) $request->params['userid'] : 0; if ($userid !== 0) { $data = (new User())->getInfoById($userid); unset($data['password']); echo json_encode(['code' => 0, 'info' => $data]); } else { throw new RRException("userid 不能为空", 1); } die(); } public function usersave() { $request = Request::getInstance(); if ($request->isPost()) { $id = isset($request->params['userid']) ? (int) $request->params['userid'] : 0; $user = new User(); if ($id === 0) { // 新增 $username = isset($request->params['username']) ? (string) $request->params['username'] : ''; if (!$username) { throw new RRException("用户名不能为空", 1); } $password = isset($request->params['password']) ? (string) $request->params['password'] : ''; $repassword = isset($request->params['repassword']) ? (string) $request->params['repassword'] : ''; if (!$password) { throw new RRException("密码不能为空", 1); } if ($password != $repassword) { throw new RRException("两次密码不一致", 1); } try { $user->save([ 'username' => $username, 'password' => md5($password), 'create_time' => time() ]); } catch (\Exception $e) { throw new RRException($e->getMessage(), 1); } echo json_encode(['code' => 0, 'msg' => "保存成功"]); die(); } else { // 修改密码 $password = isset($request->params['password']) ? (string) $request->params['password'] : ''; $repassword = isset($request->params['repassword']) ? (string) $request->params['repassword'] : ''; if (!$password) { throw new RRException("密码不能为空", 1); } if ($password != $repassword) { throw new RRException("两次密码不一致", 1); } // $userinfo = $user->getInfoById($id); // $newpassword = md5($password); // if ($newpassword != $userinfo['password']) { // throw new RRException("原密码不正确", 1); // } try { $user->updateById([ 'id' => $id, 'password' => md5($password) ]); } catch (\Exception $e) { throw new RRException($e->getMessage(), 1); } echo json_encode(['code' => 0, 'msg' => "保存成功, 请重新登录."]); die(); } } } }