forcibly close game ws connections when nonce is invalidated
This commit is contained in:
parent
a9d96d6725
commit
07b9bc9415
@ -8,7 +8,7 @@ import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } f
|
|||||||
import type { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "../../types/loginTypes.ts";
|
import type { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "../../types/loginTypes.ts";
|
||||||
import { logger } from "../../utils/logger.ts";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { version_compare } from "../../helpers/inventoryHelpers.ts";
|
import { version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
import { handleNonceInvalidation } from "../../services/wsService.ts";
|
||||||
|
|
||||||
export const loginController: RequestHandler = async (request, response) => {
|
export const loginController: RequestHandler = async (request, response) => {
|
||||||
const loginRequest = JSON.parse(String(request.body)) as ILoginRequest; // parse octet stream of json data to json object
|
const loginRequest = JSON.parse(String(request.body)) as ILoginRequest; // parse octet stream of json data to json object
|
||||||
@ -74,7 +74,7 @@ export const loginController: RequestHandler = async (request, response) => {
|
|||||||
account.LastLogin = new Date();
|
account.LastLogin = new Date();
|
||||||
await account.save();
|
await account.save();
|
||||||
|
|
||||||
sendWsBroadcastTo(account._id.toString(), { nonce_updated: true });
|
handleNonceInvalidation(account._id.toString());
|
||||||
|
|
||||||
response.json(createLoginResponse(myAddress, myUrlBase, account.toJSON(), buildLabel));
|
response.json(createLoginResponse(myAddress, myUrlBase, account.toJSON(), buildLabel));
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Account } from "../../models/loginModel.ts";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
import { handleNonceInvalidation } from "../../services/wsService.ts";
|
||||||
|
|
||||||
export const logoutController: RequestHandler = async (req, res) => {
|
export const logoutController: RequestHandler = async (req, res) => {
|
||||||
if (!req.query.accountId) {
|
if (!req.query.accountId) {
|
||||||
@ -21,7 +21,7 @@ export const logoutController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
if (stat.modifiedCount) {
|
if (stat.modifiedCount) {
|
||||||
sendWsBroadcastTo(req.query.accountId as string, { nonce_updated: true });
|
handleNonceInvalidation(req.query.accountId as string);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
|
|||||||
@ -247,3 +247,28 @@ export const sendWsBroadcastEx = (data: IWsMsgToClient, accountId?: string, excl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const handleNonceInvalidation = (accountId: string): void => {
|
||||||
|
if (wsServer) {
|
||||||
|
for (const client of wsServer.clients) {
|
||||||
|
if ((client as IWsCustomData).accountId == accountId) {
|
||||||
|
if ((client as IWsCustomData).isGame) {
|
||||||
|
client.close();
|
||||||
|
} else {
|
||||||
|
client.send(JSON.stringify({ nonce_updated: true } satisfies IWsMsgToClient));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wssServer) {
|
||||||
|
for (const client of wssServer.clients) {
|
||||||
|
if ((client as IWsCustomData).accountId == accountId) {
|
||||||
|
if ((client as IWsCustomData).isGame) {
|
||||||
|
client.close();
|
||||||
|
} else {
|
||||||
|
client.send(JSON.stringify({ nonce_updated: true } satisfies IWsMsgToClient));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user