From c26a1dca22fcced7b9cd37ace7a20ae71491fd66 Mon Sep 17 00:00:00 2001 From: winter Date: Wed, 26 Mar 2025 23:45:22 +0000 Subject: add plugin admin page --- routes/admin.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'routes') diff --git a/routes/admin.php b/routes/admin.php index c89f3d5..82981c9 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -1,9 +1,16 @@ mount('/admin', function (array $args) { + UserAccount::requireByCurrentSession()->requireAdmin(); + render_template('admin/overview_page'); +}); + Router::getInstance()->mount('/admin/settings/:prefix', function (array $args) { UserAccount::requireByCurrentSession()->requireAdmin(); render_template('global_settings_page', ['prefix' => $args['prefix']]); @@ -23,4 +30,32 @@ Router::getInstance()->mount('/fragment/admin/settings/:prefix', function (array $saved = true; } render_template('settings_editor', ['prefix' => $args['prefix'], 'saved' => $saved]); +}); + +Router::getInstance()->mount('/admin/plugins', function (array $args) { + UserAccount::requireByCurrentSession()->requireAdmin(); + render_template('admin/plugins_page'); +}); + +Router::getInstance()->mount('/fragment/admin/plugins/:filename', function (array $args) { + UserAccount::requireByCurrentSession()->requireAdmin(); + if ($_SERVER['REQUEST_METHOD'] != 'DELETE') { + throw new \RuntimeException('request method not implemented'); + } + // assuming we're deleting + $filename = urldecode($args['filename']); + if (str_contains($filename, '..') || !is_file(__DIR__ . "/../plugins/$filename")) { + throw new NotFound('no such plugin'); + } + unlink(__DIR__ . "/../plugins/$filename"); +}); + +Router::getInstance()->mount('/fragment/admin/plugins/download', function (array $args) { + UserAccount::requireByCurrentSession()->requireAdmin(); + $success = false; + if (isset($_POST['url'])) { + copy($_POST['url'], 'plugins/' . basename($_POST['url'], '.phar') . '.phar'); + $success = true; + } + render_template('admin/plugin_download_form', ['success' => $success]); }); \ No newline at end of file -- cgit v1.3