55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
|
import fsPromises from 'fs/promises'
|
||
|
import path from 'path'
|
||
|
import type { NextApiRequest, NextApiResponse } from 'next'
|
||
|
|
||
|
export default async function userHandler(req: NextApiRequest, res: NextApiResponse) {
|
||
|
const {
|
||
|
body: { ip, status, key },
|
||
|
method,
|
||
|
} = req
|
||
|
|
||
|
const filePath = path.join(process.cwd(), '/data/zomboid.json')
|
||
|
const jsonBuffer = await fsPromises.readFile(filePath)
|
||
|
const jsonData = JSON.parse(jsonBuffer.toString())
|
||
|
|
||
|
switch (method) {
|
||
|
case 'GET':
|
||
|
res.status(200).json(jsonData)
|
||
|
break
|
||
|
case 'PUT':
|
||
|
if (key == "#inFamous3") {
|
||
|
if (ip != jsonData.currentIP) {
|
||
|
jsonData.historicIP.unshift(jsonData.currentIP)
|
||
|
if (Object.keys(jsonData.historicIP).length > 10) {
|
||
|
jsonData.historicIP.pop()
|
||
|
}
|
||
|
jsonData.currentIP = ip
|
||
|
}
|
||
|
jsonData.status = status
|
||
|
|
||
|
modifyServerStatus(ip, status)
|
||
|
|
||
|
|
||
|
await fsPromises.writeFile(filePath, JSON.stringify(jsonData, null, 2))
|
||
|
|
||
|
res.status(200).json(jsonData)
|
||
|
}
|
||
|
else {
|
||
|
res.status(401).json("wrong key")
|
||
|
}
|
||
|
break
|
||
|
default:
|
||
|
res.setHeader('Allow', ['GET', 'PUT'])
|
||
|
res.status(405).end(`Method ${method} Not Allowed`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function modifyServerStatus(ip: String, status: String) {
|
||
|
const filePath = path.join(process.cwd(), '/confs/pages.json')
|
||
|
const jsonBuffer = await fsPromises.readFile(filePath)
|
||
|
const data = JSON.parse(jsonBuffer.toString())
|
||
|
data.servers.zomboid.ip = ip
|
||
|
data.servers.zomboid.status = status
|
||
|
await fsPromises.writeFile(filePath, JSON.stringify(data, null, 2))
|
||
|
return data
|
||
|
}
|