Add Matrix/Synapse widget

This commit is contained in:
pizzaboxer 2023-10-06 15:42:44 +01:00
parent 1066d17f70
commit a4066d63cc
No known key found for this signature in database
GPG Key ID: 59D4A1DBAD0F2BA8
6 changed files with 66 additions and 0 deletions

View File

@ -757,5 +757,10 @@
"inCinemas": "In cinemas",
"physicalRelease": "Physical release",
"digitalRelease": "Digital release"
},
"synapse": {
"users": "Users",
"rooms": "Rooms",
"peers": "Peers"
}
}

View File

@ -36,6 +36,7 @@ export default async function credentialedProxyHandler(req, res, map) {
"tailscale",
"truenas",
"pterodactyl",
"synapse",
].includes(widget.type))
{
headers.Authorization = `Bearer ${widget.key}`;

View File

@ -88,6 +88,7 @@ const components = {
scrutiny: dynamic(() => import("./scrutiny/component")),
sonarr: dynamic(() => import("./sonarr/component")),
speedtest: dynamic(() => import("./speedtest/component")),
synapse: dynamic(() => import("./synapse/component")),
strelaysrv: dynamic(() => import("./strelaysrv/component")),
tailscale: dynamic(() => import("./tailscale/component")),
tautulli: dynamic(() => import("./tautulli/component")),

View File

@ -0,0 +1,37 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: usersData, error: usersError } = useWidgetAPI(widget, "users");
const { data: roomsData, error: roomsError } = useWidgetAPI(widget, "rooms");
const { data: peersData, error: peersError } = useWidgetAPI(widget, "peers");
if (usersError || roomsError || peersError) {
return <Container service={service} error={usersError ?? roomsError ?? peersError} />;
}
if (!usersData || !roomsData || !peersData) {
return (
<Container service={service}>
<Block label="synapse.users" />
<Block label="synapse.rooms" />
<Block label="synapse.peers" />
</Container>
);
}
return (
<Container service={service}>
<Block label="synapse.users" value={t("common.number", { value: usersData.total })} />
<Block label="synapse.rooms" value={t("common.number", { value: roomsData.total_rooms })} />
<Block label="synapse.peers" value={t("common.number", { value: peersData.total })} />
</Container>
);
}

View File

@ -0,0 +1,20 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/_synapse/admin/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
users: {
endpoint: "v2/users",
},
rooms: {
endpoint: "v1/rooms",
},
peers: {
endpoint: "v1/federation/destinations",
},
},
};
export default widget;

View File

@ -81,6 +81,7 @@ import sabnzbd from "./sabnzbd/widget";
import scrutiny from "./scrutiny/widget";
import sonarr from "./sonarr/widget";
import speedtest from "./speedtest/widget";
import synapse from "./synapse/widget";
import strelaysrv from "./strelaysrv/widget";
import tailscale from "./tailscale/widget";
import tautulli from "./tautulli/widget";
@ -183,6 +184,7 @@ const widgets = {
scrutiny,
sonarr,
speedtest,
synapse,
strelaysrv,
tailscale,
tautulli,