added Ngrok widget

This commit is contained in:
Dinesh Reddy J 2023-04-10 15:03:13 +05:30
parent 1132ac90fb
commit 65bc747438
5 changed files with 70 additions and 3 deletions

View File

@ -39,9 +39,9 @@ export default async function credentialedProxyHandler(req, res, map) {
headers.Authorization = `Bearer ${widget.key}`; headers.Authorization = `Bearer ${widget.key}`;
} else if (widget.type === "proxmox") { } else if (widget.type === "proxmox") {
headers.Authorization = `PVEAPIToken=${widget.username}=${widget.password}`; headers.Authorization = `PVEAPIToken=${widget.username}=${widget.password}`;
} else if (widget.type === "proxmoxbackupserver") { } else if (widget.type === "ngrok") {
delete headers["Content-Type"]; headers.Authorization = `Bearer ${widget.key}`;
headers.Authorization = `PBSAPIToken=${widget.username}:${widget.password}`; headers["Ngrok-Version"] = 2;
} else if (widget.type === "autobrr") { } else if (widget.type === "autobrr") {
headers["X-API-Token"] = `${widget.key}`; headers["X-API-Token"] = `${widget.key}`;
} else if (widget.type === "tubearchivist") { } else if (widget.type === "tubearchivist") {

View File

@ -42,6 +42,7 @@ const components = {
navidrome: dynamic(() => import("./navidrome/component")), navidrome: dynamic(() => import("./navidrome/component")),
nextcloud: dynamic(() => import("./nextcloud/component")), nextcloud: dynamic(() => import("./nextcloud/component")),
nextdns: dynamic(() => import("./nextdns/component")), nextdns: dynamic(() => import("./nextdns/component")),
ngrok: dynamic(() => import("./ngrok/component")),
npm: dynamic(() => import("./npm/component")), npm: dynamic(() => import("./npm/component")),
nzbget: dynamic(() => import("./nzbget/component")), nzbget: dynamic(() => import("./nzbget/component")),
octoprint: dynamic(() => import("./octoprint/component")), octoprint: dynamic(() => import("./octoprint/component")),

50
src/widgets/ngrok/component.jsx Executable file
View File

@ -0,0 +1,50 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
function displayUrl(url , index){
return (
<a href={url} target="_blank" rel="noopener noreferrer" key={index} className="flex flex-col pb-1 mx-1">
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">{url}</span>
</div>
</a>
);
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const {
data: ngrokData,
error: ngrokError
} = useWidgetAPI(widget, "tunnels",{
refreshInterval: 30000,
});
if (ngrokError) {
return <Container error={ngrokError} />;
}
if (ngrokData){
if(ngrokData.tunnels.length === 0){
return (
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">{t("No Active Tunnels")}</span>
</div>
);
}
let runningTunnels = ngrokData.tunnels.length;
if(runningTunnels > 5) runningTunnels = 5;
return (
<div>
{ngrokData.tunnels.slice(0, runningTunnels).map((tunnel, index) => displayUrl(tunnel.public_url, index))}
</div>
);
}
}

14
src/widgets/ngrok/widget.js Executable file
View File

@ -0,0 +1,14 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "https://api.ngrok.com/{{endpoint}}",
proxyHandler: credentialedProxyHandler,
mapping: {
"tunnels": {
endpoint: "tunnels"
},
},
};
export default widget;

View File

@ -36,6 +36,7 @@ import mylar from "./mylar/widget";
import navidrome from "./navidrome/widget"; import navidrome from "./navidrome/widget";
import nextcloud from "./nextcloud/widget"; import nextcloud from "./nextcloud/widget";
import nextdns from "./nextdns/widget"; import nextdns from "./nextdns/widget";
import ngrok from "./ngrok/widget"
import npm from "./npm/widget"; import npm from "./npm/widget";
import nzbget from "./nzbget/widget"; import nzbget from "./nzbget/widget";
import octoprint from "./octoprint/widget"; import octoprint from "./octoprint/widget";
@ -115,6 +116,7 @@ const widgets = {
navidrome, navidrome,
nextcloud, nextcloud,
nextdns, nextdns,
ngrok,
npm, npm,
nzbget, nzbget,
octoprint, octoprint,