diff options
| author | winter | 2025-03-26 23:45:22 +0000 |
|---|---|---|
| committer | winter | 2025-03-26 23:45:22 +0000 |
| commit | c26a1dca22fcced7b9cd37ace7a20ae71491fd66 (patch) | |
| tree | 0e2f997428b85315a43df68e0b83aea8b970a97f /routes/admin.php | |
| parent | a05e8a564009ae7354f0b1ede5a69ed6d3c6e650 (diff) | |
add plugin admin page
Diffstat (limited to 'routes/admin.php')
| -rw-r--r-- | routes/admin.php | 35 |
1 files changed, 35 insertions, 0 deletions
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 @@ <?php use Digitigrade\GlobalSettings; +use Digitigrade\HttpResponseStatus\NotFound; +use Digitigrade\HttpResponseStatus\TemporaryRedirect; use Digitigrade\Model\UserAccount; use Digitigrade\Router; +Router::getInstance()->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 |
