Merge pull request #1 from kuusei/main

fix: ip address leak and improve type
This commit is contained in:
仓鼠 2024-07-27 13:04:10 +08:00 committed by GitHub
commit 49f548a8fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 73 additions and 5 deletions

View File

@ -1,4 +1,6 @@
import { NezhaAPI, ServerApi } from "@/app/types/nezha-api";
import { MakeOptional } from "@/app/types/utils";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
export async function GET(_: Request) { export async function GET(_: Request) {
@ -22,19 +24,29 @@ export async function GET(_: Request) {
revalidate:1 revalidate:1
} }
}); });
const data = await response.json(); const nezhaData = (await response.json()).result as NezhaAPI[];
data.live_servers = 0; const data: ServerApi = {
data.offline_servers = 0; live_servers: 0,
data.total_bandwidth = 0; offline_servers: 0,
total_bandwidth: 0,
result: []
}
data.result.forEach((element: { status: { Uptime: number; NetOutTransfer: any; }; }) => { data.result = nezhaData.map((element: MakeOptional<NezhaAPI, "ipv4" | "ipv6" | "valid_ip">) => {
if (element.status.Uptime !== 0) { if (element.status.Uptime !== 0) {
data.live_servers += 1; data.live_servers += 1;
} else { } else {
data.offline_servers += 1; data.offline_servers += 1;
} }
data.total_bandwidth += element.status.NetOutTransfer; data.total_bandwidth += element.status.NetOutTransfer;
delete element.ipv4;
delete element.ipv6;
delete element.valid_ip;
return element;
}); });
return NextResponse.json(data, { status: 200 }) return NextResponse.json(data, { status: 200 })
} catch (error) { } catch (error) {
return NextResponse.json({ error: error }, { status: 200 }) return NextResponse.json({ error: error }, { status: 200 })

55
app/types/nezha-api.ts Normal file
View File

@ -0,0 +1,55 @@
export type ServerApi = {
live_servers: number;
offline_servers: number;
total_bandwidth: number;
result: NezhaAPISafe[];
};
export type NezhaAPISafe = Omit<NezhaAPI, "ipv4" | "ipv6" | "valid_ip">;
export interface NezhaAPI {
id: number;
name: string;
tag: string;
last_active: number;
ipv4: string;
ipv6: string;
valid_ip: string;
host: NezhaAPIHost;
status: NezhaAPIStatus;
}
export interface NezhaAPIHost {
Platform: string;
PlatformVersion: string;
CPU: string[];
MemTotal: number;
DiskTotal: number;
SwapTotal: number;
Arch: string;
Virtualization: string;
BootTime: number;
CountryCode: string;
Version: string;
GPU: null;
}
export interface NezhaAPIStatus {
CPU: number;
MemUsed: number;
SwapUsed: number;
DiskUsed: number;
NetInTransfer: number;
NetOutTransfer: number;
NetInSpeed: number;
NetOutSpeed: number;
Uptime: number;
Load1: number;
Load5: number;
Load15: number;
TcpConnCount: number;
UdpConnCount: number;
ProcessCount: number;
Temperatures: number;
GPU: number;
}

1
app/types/utils.ts Normal file
View File

@ -0,0 +1 @@
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;