From 1dee7b77290defdb0c2012a12d381939d2fcec8e Mon Sep 17 00:00:00 2001 From: echicken <echicken@bbs.electronicchicken.com> Date: Tue, 24 Jul 2018 18:40:25 -0400 Subject: [PATCH] Reuse the same User instance where applicable, changing number to load a new record. Dereference User instance when it's no longer needed. This may help with the old too-many-open-files thing. NB: web/pages/.examples/More/001-userlist.xjs must be copied to a production location, default would be web/pages/More/001-userlist.xjs, if you want a userlist page. --- web/lib/auth.js | 12 +++++++++--- web/pages/.examples/More/001-userlist.xjs | 1 + web/root/api/system.ssjs | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/web/lib/auth.js b/web/lib/auth.js index f17551d28b..2164aa5313 100644 --- a/web/lib/auth.js +++ b/web/lib/auth.js @@ -48,6 +48,7 @@ function setCookie(usr, sessionKey) { function validateSession(cookies) { + var usr = new User(0); for (var c in cookies) { if (cookies[c].search(/^\d+,\w+$/) < 0) continue; @@ -55,7 +56,7 @@ function validateSession(cookies) { var cookie = cookies[c].split(','); try { - var usr = new User(cookie[0]); + usr.number = cookie[0]; if (usr.number < 1) { throw 'Invalid user number ' + cookie[0] + ' in cookie.'; } @@ -70,17 +71,20 @@ function validateSession(cookies) { continue; } - authenticate(usr.alias, usr.security.password); + var _usr = authenticate(usr.alias, usr.security.password); + _usr = undefined; setCookie(usr, session.key); setSessionValue(usr.number, 'ip_address', client.ip_address); break; } + usr = undefined; } function destroySession(cookies) { + var usr = new User(0); for (var c in cookies) { if (cookies[c].search(/^\d+,\w+$/) < 0) continue; @@ -89,7 +93,7 @@ function destroySession(cookies) { try { - var usr = new User(cookie[0]); + usr.number = cookie[0]; if(usr.number < 1) { throw 'Invalid user number ' + cookie[0] + ' in cookie.'; } @@ -123,6 +127,7 @@ function destroySession(cookies) { } } + usr = undefined; } @@ -174,6 +179,7 @@ if (user.number === 0) { if (gn > 0) { var gu = new User(gn); login(gu.alias, gu.security.password); + gu = undefined; } else { // Otherwise just kill the script, for security's sake exit(); diff --git a/web/pages/.examples/More/001-userlist.xjs b/web/pages/.examples/More/001-userlist.xjs index fca38c012e..bf63f03c7a 100644 --- a/web/pages/.examples/More/001-userlist.xjs +++ b/web/pages/.examples/More/001-userlist.xjs @@ -152,6 +152,7 @@ } users.push(copyProperties(usr, {})); } + usr = undefined; users.sort(sortUsers); return users.slice(offset, offset + pageSize); } diff --git a/web/root/api/system.ssjs b/web/root/api/system.ssjs index 2ebcc4688f..34a888720e 100644 --- a/web/root/api/system.ssjs +++ b/web/root/api/system.ssjs @@ -19,7 +19,7 @@ if ((http_request.method === 'GET' || http_request.method === 'POST') && switch (http_request.query.call[0]) { case 'node-list': - var usr = new User(1); + var usr = new User(0); reply = system.node_list.map(function (node) { usr.number = node.useron; return ({ @@ -42,6 +42,7 @@ if ((http_request.method === 'GET' || http_request.method === 'POST') && user : usr.alias }); } + usr = undefined; break; case 'send-telegram': -- GitLab