LinkCloudDev/server/webserver.js

57 lines
1.7 KiB
JavaScript
Raw Normal View History

2024-08-02 22:55:55 +00:00
import express from 'express'
import AdmZip from 'adm-zip'
import { runPrepQuery, numRows } from './Utility/db.js'
const app = express()
const port = 3000
import { json2xml } from "xml-js";
import { BlobReader, BlobWriter, TextReader, TextWriter, ZipReader, ZipWriter } from "@zip.js/zip.js";
const saveFile = {
settings: {
global: {
AuthKey: "NONE",
AutoConnect: true,
AutoReconnect: true,
HostAddress: "linkcloud.drunken.games",
HostPort: 5050,
ProcessShouts: true,
TCPTimeout: 2,
},
},
};
const options = {
compact: true,
ignoreComment: true,
spaces: 4,
};
app.get('/addons/windower/retail/:id', async (req, res) => {
saveFile.settings.global.AuthKey = await getTokenFromId(req.params.id);
const xmlString = `<?xml version="1.1" ?>\n${json2xml(saveFile, options)}`;
const existingZip = new AdmZip('./resources/addon/LinkCloud.zip');
existingZip.addFile("LinkCloud/data/settings.xml", Buffer.from(xmlString, "utf8"), "Auto Generated");
const data = existingZip.toBuffer()
res.set('Content-Type', 'application/zip');
res.set('Content-Disposition', 'attachment; filename=LinkCloud_Latest.zip');
res.set('Content-Length', data.length);
res.send(data);
})
export const listen = () => {
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
}
const getTokenFromId = (id) => {
return new Promise((resolve, reject) => {
runPrepQuery("SELECT * FROM users WHERE userId = ? LIMIT 0,1", [id], (r,f,e) => {
if(!e) {
if(numRows(r)) {
resolve(r[0].authToken)
} else {
resolve(false)
}
} else {
resolve(false)
}
})
})
}