Initial commit
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
const crypto = require("crypto");
|
||||
|
||||
const redis = require("../Miscellaneous/redis");
|
||||
|
||||
const Game = require("../Game/Game");
|
||||
|
||||
const HTTP_BAD_REQUEST = "403";
|
||||
|
||||
function badRequest(res) {
|
||||
res.cork(() => res.isAborted ? null : res
|
||||
.writeStatus(HTTP_BAD_REQUEST)
|
||||
.end());
|
||||
};
|
||||
|
||||
module.exports = async function (res, req, context) {
|
||||
const cookieHeader = req.getHeader("cookie");
|
||||
const cookie = cookieHeader.split("ps=")[1];
|
||||
|
||||
res.onAborted(() => {
|
||||
res.isAborted = true;
|
||||
console.info("ABORTED!!!");
|
||||
});
|
||||
|
||||
if (!cookie) {
|
||||
console.info("upgrade 1")
|
||||
return badRequest(res);
|
||||
};
|
||||
|
||||
const secWebSocketKey = req.getHeader("sec-websocket-key");
|
||||
const secWebSocketProtocol = req.getHeader("sec-websocket-protocol");
|
||||
const secWebSocketExtensions = req.getHeader("sec-websocket-extensions");
|
||||
|
||||
const userAgent = req.getHeader("user-agent");
|
||||
const ip = req.getHeader("x-forwarded-for");
|
||||
|
||||
const formattedCookie = cookie.split(".")[0].slice(4);
|
||||
const cookieInDB = await redis.get(`sess:${formattedCookie}`);
|
||||
if (!cookieInDB) {
|
||||
console.info("upgrade 2")
|
||||
|
||||
return badRequest(res);
|
||||
};
|
||||
|
||||
const parsedCookie = JSON.parse(cookieInDB);
|
||||
if (!parsedCookie.accountID) {
|
||||
console.info("upgrade 3")
|
||||
|
||||
return badRequest(res);
|
||||
};
|
||||
|
||||
const hash = crypto.createHash("md5")
|
||||
.update(userAgent)
|
||||
.update(ip)
|
||||
.digest("hex");
|
||||
|
||||
// if (hash !== parsedCookie.fingerprint) return badRequest(res);
|
||||
const { accountID, username, isAdmin } = parsedCookie;
|
||||
console.info("Before upgrading connection for", username);
|
||||
res.cork(() => res.upgrade({ accountID, username, cookie, isAdmin },
|
||||
secWebSocketKey,
|
||||
secWebSocketProtocol,
|
||||
secWebSocketExtensions,
|
||||
context));
|
||||
};
|
||||
Reference in New Issue
Block a user