aboutsummaryrefslogtreecommitdiffhomepage
path: root/routes
diff options
context:
space:
mode:
authorwinter2025-03-26 23:45:22 +0000
committerwinter2025-03-26 23:45:22 +0000
commitc26a1dca22fcced7b9cd37ace7a20ae71491fd66 (patch)
tree0e2f997428b85315a43df68e0b83aea8b970a97f /routes
parenta05e8a564009ae7354f0b1ede5a69ed6d3c6e650 (diff)
add plugin admin page
Diffstat (limited to 'routes')
-rw-r--r--routes/admin.php35
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