mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-28 00:00:11 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a9ae649ef | |||
| aa6dc67015 |
@@ -28,7 +28,7 @@ export const TargetHealthCheckSchema = z.object({
|
|||||||
hostname: z.string(),
|
hostname: z.string(),
|
||||||
port: z.int().min(1).max(65535),
|
port: z.int().min(1).max(65535),
|
||||||
enabled: z.boolean().optional().default(true),
|
enabled: z.boolean().optional().default(true),
|
||||||
path: z.string().optional(),
|
path: z.string().optional().default("/"),
|
||||||
scheme: z.string().optional(),
|
scheme: z.string().optional(),
|
||||||
mode: z.string().default("http"),
|
mode: z.string().default("http"),
|
||||||
interval: z.int().default(30),
|
interval: z.int().default(30),
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ import { NewtSiteInstallCommands } from "@app/components/newt-install-commands";
|
|||||||
import { usePaidStatus } from "@app/hooks/usePaidStatus";
|
import { usePaidStatus } from "@app/hooks/usePaidStatus";
|
||||||
import { tierMatrix } from "@server/lib/billing/tierMatrix";
|
import { tierMatrix } from "@server/lib/billing/tierMatrix";
|
||||||
import type { AxiosResponse } from "axios";
|
import type { AxiosResponse } from "axios";
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { productUpdatesQueries } from "@app/lib/queries";
|
||||||
|
|
||||||
export default function CredentialsPage() {
|
export default function CredentialsPage() {
|
||||||
const { env } = useEnvContext();
|
const { env } = useEnvContext();
|
||||||
@@ -67,6 +69,12 @@ export default function CredentialsPage() {
|
|||||||
|
|
||||||
const { isPaidUser } = usePaidStatus();
|
const { isPaidUser } = usePaidStatus();
|
||||||
|
|
||||||
|
const { data: latestVersions } = useQuery(
|
||||||
|
productUpdatesQueries.latestVersion(true)
|
||||||
|
);
|
||||||
|
const newtVersion =
|
||||||
|
latestVersions?.data?.newt?.latestVersion ?? "latest";
|
||||||
|
|
||||||
// Fetch site defaults for wireguard sites to show in obfuscated config
|
// Fetch site defaults for wireguard sites to show in obfuscated config
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchSiteDefaults = async () => {
|
const fetchSiteDefaults = async () => {
|
||||||
@@ -302,6 +310,7 @@ export default function CredentialsPage() {
|
|||||||
id={displayNewtId ?? "**********"}
|
id={displayNewtId ?? "**********"}
|
||||||
secret={displaySecret ?? "**************"}
|
secret={displaySecret ?? "**************"}
|
||||||
endpoint={env.app.dashboardUrl}
|
endpoint={env.app.dashboardUrl}
|
||||||
|
version={newtVersion}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ import { QRCodeCanvas } from "qrcode.react";
|
|||||||
import { useTranslations } from "next-intl";
|
import { useTranslations } from "next-intl";
|
||||||
import { build } from "@server/build";
|
import { build } from "@server/build";
|
||||||
import { NewtSiteInstallCommands } from "@app/components/newt-install-commands";
|
import { NewtSiteInstallCommands } from "@app/components/newt-install-commands";
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { productUpdatesQueries } from "@app/lib/queries";
|
||||||
|
|
||||||
type SiteType = "newt" | "wireguard" | "local";
|
type SiteType = "newt" | "wireguard" | "local";
|
||||||
|
|
||||||
@@ -189,9 +191,14 @@ export default function Page() {
|
|||||||
const [wgConfig, setWgConfig] = useState("");
|
const [wgConfig, setWgConfig] = useState("");
|
||||||
|
|
||||||
const [createLoading, setCreateLoading] = useState(false);
|
const [createLoading, setCreateLoading] = useState(false);
|
||||||
const [newtVersion, setNewtVersion] = useState("latest");
|
|
||||||
const [showAdvancedSettings, setShowAdvancedSettings] = useState(false);
|
const [showAdvancedSettings, setShowAdvancedSettings] = useState(false);
|
||||||
|
|
||||||
|
const { data: latestVersions } = useQuery(
|
||||||
|
productUpdatesQueries.latestVersion(true)
|
||||||
|
);
|
||||||
|
const newtVersion =
|
||||||
|
latestVersions?.data?.newt?.latestVersion ?? "latest";
|
||||||
|
|
||||||
const [siteDefaults, setSiteDefaults] =
|
const [siteDefaults, setSiteDefaults] =
|
||||||
useState<PickSiteDefaultsResponse | null>(null);
|
useState<PickSiteDefaultsResponse | null>(null);
|
||||||
|
|
||||||
@@ -302,45 +309,6 @@ export default function Page() {
|
|||||||
const load = async () => {
|
const load = async () => {
|
||||||
setLoadingPage(true);
|
setLoadingPage(true);
|
||||||
|
|
||||||
let currentNewtVersion = "latest";
|
|
||||||
|
|
||||||
try {
|
|
||||||
const controller = new AbortController();
|
|
||||||
const timeoutId = setTimeout(() => controller.abort(), 3000);
|
|
||||||
|
|
||||||
const response = await fetch(
|
|
||||||
`https://api.github.com/repos/fosrl/newt/releases/latest`,
|
|
||||||
{ signal: controller.signal }
|
|
||||||
);
|
|
||||||
|
|
||||||
clearTimeout(timeoutId);
|
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(
|
|
||||||
t("newtErrorFetchReleases", {
|
|
||||||
err: response.statusText
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const data = await response.json();
|
|
||||||
const latestVersion = data.tag_name;
|
|
||||||
currentNewtVersion = latestVersion;
|
|
||||||
setNewtVersion(latestVersion);
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof Error && error.name === "AbortError") {
|
|
||||||
console.error(t("newtErrorFetchTimeout"));
|
|
||||||
} else {
|
|
||||||
console.error(
|
|
||||||
t("newtErrorFetchLatest", {
|
|
||||||
err:
|
|
||||||
error instanceof Error
|
|
||||||
? error.message
|
|
||||||
: String(error)
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const generatedKeypair = generateKeypair();
|
const generatedKeypair = generateKeypair();
|
||||||
|
|
||||||
const privateKey = generatedKeypair.privateKey;
|
const privateKey = generatedKeypair.privateKey;
|
||||||
|
|||||||
Reference in New Issue
Block a user