forked from OpenWF/SpaceNinjaServer
		
	Now when logging in and out of the game, the webui is notified so it can refresh the nonce, removing the need for constant login requests to revalidate it. Closes #2223 Reviewed-on: OpenWF/SpaceNinjaServer#2226 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
		
			
				
	
	
		
			34 lines
		
	
	
		
			946 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			946 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { RequestHandler } from "express";
 | 
						|
import { Account } from "@/src/models/loginModel";
 | 
						|
import { sendWsBroadcastTo } from "@/src/services/webService";
 | 
						|
 | 
						|
export const logoutController: RequestHandler = async (req, res) => {
 | 
						|
    if (!req.query.accountId) {
 | 
						|
        throw new Error("Request is missing accountId parameter");
 | 
						|
    }
 | 
						|
    const nonce: number = parseInt(req.query.nonce as string);
 | 
						|
    if (!nonce) {
 | 
						|
        throw new Error("Request is missing nonce parameter");
 | 
						|
    }
 | 
						|
 | 
						|
    const stat = await Account.updateOne(
 | 
						|
        {
 | 
						|
            _id: req.query.accountId,
 | 
						|
            Nonce: nonce
 | 
						|
        },
 | 
						|
        {
 | 
						|
            Nonce: 0
 | 
						|
        }
 | 
						|
    );
 | 
						|
    if (stat.modifiedCount) {
 | 
						|
        // Tell WebUI its nonce has been invalidated
 | 
						|
        sendWsBroadcastTo(req.query.accountId as string, { logged_out: true });
 | 
						|
    }
 | 
						|
 | 
						|
    res.writeHead(200, {
 | 
						|
        "Content-Type": "text/html",
 | 
						|
        "Content-Length": 1
 | 
						|
    });
 | 
						|
    res.end("1");
 | 
						|
};
 |