From 0920c0d245255d2cfd5424456d571902e311c8ec Mon Sep 17 00:00:00 2001 From: Twin1 <64933300+Twin1dev@users.noreply.github.com> Date: Thu, 17 Jul 2025 14:08:44 -0500 Subject: [PATCH] net.AllowEncryption ONLY ON 24 AND ABOVE --- CloudStorage/DefaultEngine.ini | 4 - structure/cloudstorage.js | 317 ++++++++++++++++++++------------- 2 files changed, 192 insertions(+), 129 deletions(-) diff --git a/CloudStorage/DefaultEngine.ini b/CloudStorage/DefaultEngine.ini index 376efdb..af1f3ac 100644 --- a/CloudStorage/DefaultEngine.ini +++ b/CloudStorage/DefaultEngine.ini @@ -10,10 +10,6 @@ bUseSSL=false ServerAddr="ws://127.0.0.1" ServerPort=80 -# Fixes kicks on higher versions -[ConsoleVariables] -net.AllowEncryption=0 - # Forces fortnite to use the v1 party system to support lawinserver xmpp [OnlineSubsystemMcp] bUsePartySystemV2=false diff --git a/structure/cloudstorage.js b/structure/cloudstorage.js index c8766f5..294a407 100644 --- a/structure/cloudstorage.js +++ b/structure/cloudstorage.js @@ -6,158 +6,225 @@ const path = require("path"); const functions = require("./functions.js"); express.use((req, res, next) => { - // Get raw body in encoding latin1 for ClientSettings - if (req.originalUrl.toLowerCase().startsWith("/fortnite/api/cloudstorage/user/") && req.method == "PUT") { - req.rawBody = ""; - req.setEncoding("latin1"); + // Get raw body in encoding latin1 for ClientSettings + if ( + req.originalUrl + .toLowerCase() + .startsWith("/fortnite/api/cloudstorage/user/") && + req.method == "PUT" + ) { + req.rawBody = ""; + req.setEncoding("latin1"); - req.on("data", (chunk) => req.rawBody += chunk); - req.on("end", () => next()); - } - else return next(); -}) + req.on("data", (chunk) => (req.rawBody += chunk)); + req.on("end", () => next()); + } else return next(); +}); express.get("/fortnite/api/cloudstorage/system", async (req, res) => { - const memory = functions.GetVersionInfo(req); + const memory = functions.GetVersionInfo(req); - if (memory.build >= 9.40 && memory.build <= 10.40) { - return res.status(404).end(); + if (memory.build >= 9.4 && memory.build <= 10.4) { + return res.status(404).end(); + } + + const dir = path.join(__dirname, "..", "CloudStorage"); + var CloudFiles = []; + + fs.readdirSync(dir).forEach((name) => { + if (name.toLowerCase().endsWith(".ini")) { + const ParsedFile = fs.readFileSync(path.join(dir, name), "utf-8"); + const ParsedStats = fs.statSync(path.join(dir, name)); + + CloudFiles.push({ + uniqueFilename: name, + filename: name, + hash: crypto.createHash("sha1").update(ParsedFile).digest("hex"), + hash256: crypto.createHash("sha256").update(ParsedFile).digest("hex"), + length: ParsedFile.length, + contentType: "application/octet-stream", + uploaded: ParsedStats.mtime, + storageType: "S3", + storageIds: {}, + doNotCache: true, + }); } + }); - const dir = path.join(__dirname, "..", "CloudStorage") - var CloudFiles = []; - - fs.readdirSync(dir).forEach(name => { - if (name.toLowerCase().endsWith(".ini")) { - const ParsedFile = fs.readFileSync(path.join(dir, name), 'utf-8'); - const ParsedStats = fs.statSync(path.join(dir, name)); - - CloudFiles.push({ - "uniqueFilename": name, - "filename": name, - "hash": crypto.createHash('sha1').update(ParsedFile).digest('hex'), - "hash256": crypto.createHash('sha256').update(ParsedFile).digest('hex'), - "length": ParsedFile.length, - "contentType": "application/octet-stream", - "uploaded": ParsedStats.mtime, - "storageType": "S3", - "storageIds": {}, - "doNotCache": true - }) - } - }); - - res.json(CloudFiles) -}) + res.json(CloudFiles); +}); express.get("/fortnite/api/cloudstorage/system/:file", async (req, res) => { - const file = path.join(__dirname, "..", "CloudStorage", req.params.file); + const memory = functions.GetVersionInfo(req); - if (fs.existsSync(file)) { - const ParsedFile = fs.readFileSync(file); + const file = path.join(__dirname, "..", "CloudStorage", req.params.file); - return res.status(200).send(ParsedFile).end(); - } else { - res.status(200); - res.end(); + if (fs.existsSync(file)) { + let ParsedFile = fs.readFileSync(file); + + // Fixes kicks ingame on higher versions + if (req.params.file === "DefaultEngine.ini" && memory.season >= 24) { + ParsedFile += "\n[ConsoleVariables]\nnet.AllowEncryption=0\n"; } -}) + + return res.status(200).send(ParsedFile).end(); + } else { + res.status(200); + res.end(); + } +}); express.get("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { - try { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); - } - } catch (err) {} - - res.set("Content-Type", "application/octet-stream") - - if (req.params.file.toLowerCase() != "clientsettings.sav") { - return res.status(404).json({ - "error": "file not found" - }); + try { + if ( + !fs.existsSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ) + ) { + fs.mkdirSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ); } + } catch (err) {} - const memory = functions.GetVersionInfo(req); + res.set("Content-Type", "application/octet-stream"); - var currentBuildID = memory.CL; + if (req.params.file.toLowerCase() != "clientsettings.sav") { + return res.status(404).json({ + error: "file not found", + }); + } - let file; - if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); - else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + const memory = functions.GetVersionInfo(req); - if (fs.existsSync(file)) { - const ParsedFile = fs.readFileSync(file); + var currentBuildID = memory.CL; - return res.status(200).send(ParsedFile).end(); - } else { - res.status(200); - res.end(); - } -}) + let file; + if (process.env.LOCALAPPDATA) + file = path.join( + process.env.LOCALAPPDATA, + "LawinServer", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); + else + file = path.join( + __dirname, + "..", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); + + if (fs.existsSync(file)) { + const ParsedFile = fs.readFileSync(file); + + return res.status(200).send(ParsedFile).end(); + } else { + res.status(200); + res.end(); + } +}); express.get("/fortnite/api/cloudstorage/user/:accountId", async (req, res) => { - try { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); - } - } catch (err) {} - - res.set("Content-Type", "application/json") - - const memory = functions.GetVersionInfo(req); - - var currentBuildID = memory.CL; - - let file; - if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); - else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); - - if (fs.existsSync(file)) { - const ParsedFile = fs.readFileSync(file, 'latin1'); - const ParsedStats = fs.statSync(file); - - return res.json([{ - "uniqueFilename": "ClientSettings.Sav", - "filename": "ClientSettings.Sav", - "hash": crypto.createHash('sha1').update(ParsedFile).digest('hex'), - "hash256": crypto.createHash('sha256').update(ParsedFile).digest('hex'), - "length": Buffer.byteLength(ParsedFile), - "contentType": "application/octet-stream", - "uploaded": ParsedStats.mtime, - "storageType": "S3", - "storageIds": {}, - "accountId": req.params.accountId, - "doNotCache": true - }]); - } else { - return res.json([]); + try { + if ( + !fs.existsSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ) + ) { + fs.mkdirSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ); } -}) + } catch (err) {} + + res.set("Content-Type", "application/json"); + + const memory = functions.GetVersionInfo(req); + + var currentBuildID = memory.CL; + + let file; + if (process.env.LOCALAPPDATA) + file = path.join( + process.env.LOCALAPPDATA, + "LawinServer", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); + else + file = path.join( + __dirname, + "..", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); + + if (fs.existsSync(file)) { + const ParsedFile = fs.readFileSync(file, "latin1"); + const ParsedStats = fs.statSync(file); + + return res.json([ + { + uniqueFilename: "ClientSettings.Sav", + filename: "ClientSettings.Sav", + hash: crypto.createHash("sha1").update(ParsedFile).digest("hex"), + hash256: crypto.createHash("sha256").update(ParsedFile).digest("hex"), + length: Buffer.byteLength(ParsedFile), + contentType: "application/octet-stream", + uploaded: ParsedStats.mtime, + storageType: "S3", + storageIds: {}, + accountId: req.params.accountId, + doNotCache: true, + }, + ]); + } else { + return res.json([]); + } +}); express.put("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { - try { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); - } - } catch (err) {} - - if (req.params.file.toLowerCase() != "clientsettings.sav") { - return res.status(404).json({ - "error": "file not found" - }); + try { + if ( + !fs.existsSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ) + ) { + fs.mkdirSync( + path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings") + ); } + } catch (err) {} - const memory = functions.GetVersionInfo(req); + if (req.params.file.toLowerCase() != "clientsettings.sav") { + return res.status(404).json({ + error: "file not found", + }); + } - var currentBuildID = memory.CL; + const memory = functions.GetVersionInfo(req); - let file; - if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); - else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + var currentBuildID = memory.CL; - fs.writeFileSync(file, req.rawBody, 'latin1'); - res.status(204).end(); -}) + let file; + if (process.env.LOCALAPPDATA) + file = path.join( + process.env.LOCALAPPDATA, + "LawinServer", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); + else + file = path.join( + __dirname, + "..", + "ClientSettings", + `ClientSettings-${currentBuildID}.Sav` + ); -module.exports = express; \ No newline at end of file + fs.writeFileSync(file, req.rawBody, "latin1"); + res.status(204).end(); +}); + +module.exports = express;