From f78db1f7c2f1a566c6e8709604e53aeb287de59d Mon Sep 17 00:00:00 2001 From: Oleg Shulga Date: Thu, 23 Mar 2023 15:07:06 +0300 Subject: [PATCH] new server not crashed if send bad token --- JavaScript/client.js | 6 +++++- JavaScript/server.js | 10 +++++++++- JavaScript/session.js | 5 ++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/JavaScript/client.js b/JavaScript/client.js index 8644fa8..6630242 100644 --- a/JavaScript/client.js +++ b/JavaScript/client.js @@ -27,7 +27,11 @@ class Client { static async getInstance(req, res) { const client = new Client(req, res); - await Session.restore(client); + try { + await Session.restore(client); + } catch { + throw new Error("Couldn't restore session"); + } return client; } diff --git a/JavaScript/server.js b/JavaScript/server.js index daa7125..bc8f4cc 100644 --- a/JavaScript/server.js +++ b/JavaScript/server.js @@ -5,6 +5,8 @@ const http = require('node:http'); const Client = require('./client.js'); const Session = require('./session.js'); +const INVALID_TOKEN_CODE = 498; + const routing = { '/': async () => '

welcome to homepage


', '/start': async (client) => { @@ -46,7 +48,13 @@ const types = { }; http.createServer(async (req, res) => { - const client = await Client.getInstance(req, res); + try { + const client = await Client.getInstance(req, res); + } catch { + res.statusCode = INVALID_TOKEN_CODE; + res.end(); + return; + } const { method, url, headers } = req; console.log(`${method} ${url} ${headers.cookie}`); const handler = routing[url]; diff --git a/JavaScript/session.js b/JavaScript/session.js index ea66627..d845d28 100644 --- a/JavaScript/session.js +++ b/JavaScript/session.js @@ -43,7 +43,10 @@ class Session extends Map { if (sessionToken) { return new Promise((resolve, reject) => { storage.get(sessionToken, (err, session) => { - if (err) reject(new Error('No session')); + if (err) { + reject(new Error('No session')); + return; + } Object.setPrototypeOf(session, Session.prototype); client.token = sessionToken; client.session = session;