diff --git a/server/server.js b/server/server.js
index e0c12744..4f20f11c 100644
--- a/server/server.js
+++ b/server/server.js
@@ -127,6 +127,7 @@ const StatusPage = require("./model/status_page");
const { cloudflaredSocketHandler, autoStart: cloudflaredAutoStart, stop: cloudflaredStop } = require("./socket-handlers/cloudflared-socket-handler");
const { proxySocketHandler } = require("./socket-handlers/proxy-socket-handler");
const { dockerSocketHandler } = require("./socket-handlers/docker-socket-handler");
+const { pluginsHandler } = require("./socket-handlers/plugins-handler");
app.use(express.json());
@@ -1452,6 +1453,7 @@ let needSetup = false;
databaseSocketHandler(socket);
proxySocketHandler(socket);
dockerSocketHandler(socket);
+ pluginsHandler(socket);
log.debug("server", "added all socket handlers");
diff --git a/server/socket-handlers/plugins-handler.js b/server/socket-handlers/plugins-handler.js
new file mode 100644
index 00000000..52a5e4d0
--- /dev/null
+++ b/server/socket-handlers/plugins-handler.js
@@ -0,0 +1,25 @@
+const { checkLogin } = require("../util-server");
+const axios = require("axios");
+
+/**
+ * Handlers for plugins
+ * @param {Socket} socket Socket.io instance
+ */
+module.exports.pluginsHandler = (socket) => {
+
+ // Get Plugin List
+ socket.on("getPluginList", async (callback) => {
+ try {
+ checkLogin(socket);
+ const res = await axios.get("https://uptime.kuma.pet/c/plugins.json");
+ callback(res.data);
+ } catch (error) {
+ console.log(error);
+ callback({
+ ok: false,
+ msg: error.message,
+ });
+ }
+ });
+
+};
diff --git a/src/components/PluginItem.vue b/src/components/PluginItem.vue
new file mode 100644
index 00000000..bfd5bd2d
--- /dev/null
+++ b/src/components/PluginItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
{{ plugin.name }}
+
{{ plugin.description }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/settings/Plugins.vue b/src/components/settings/Plugins.vue
new file mode 100644
index 00000000..7446dd13
--- /dev/null
+++ b/src/components/settings/Plugins.vue
@@ -0,0 +1,56 @@
+
+
+
{{ pluginListMsg }}
+
+
+
+
+
+
+
diff --git a/src/languages/en.js b/src/languages/en.js
index 7d980f63..4880e9e0 100644
--- a/src/languages/en.js
+++ b/src/languages/en.js
@@ -582,4 +582,5 @@ export default {
goAlert: "GoAlert",
backupOutdatedWarning: "Deprecated: Since a lot of features added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.",
+ loadingError: "Cannot fetch the data, please try again later.",
};
diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue
index efd26ce3..a329aa82 100644
--- a/src/pages/Settings.vue
+++ b/src/pages/Settings.vue
@@ -101,6 +101,9 @@ export default {
backup: {
title: this.$t("Backup"),
},
+ plugins: {
+ title: this.$t("Plugins"),
+ },
about: {
title: this.$t("About"),
},
diff --git a/src/router.js b/src/router.js
index 7d29a188..88f4d4a1 100644
--- a/src/router.js
+++ b/src/router.js
@@ -26,6 +26,7 @@ import Proxies from "./components/settings/Proxies.vue";
import Backup from "./components/settings/Backup.vue";
import About from "./components/settings/About.vue";
import DockerHosts from "./components/settings/Docker.vue";
+import Plugins from "./components/settings/Plugins.vue";
const routes = [
{
@@ -112,6 +113,10 @@ const routes = [
path: "backup",
component: Backup,
},
+ {
+ path: "plugins",
+ component: Plugins,
+ },
{
path: "about",
component: About,