UNPKG

isite

Version:

Create High Level Multi-Language Web Site [Fast and Easy]

216 lines (194 loc) 8.7 kB
module.exports = function init(____0) { const sessions = function () {}; sessions.list = []; sessions.path = ____0.path.resolve(____0.cwd + '/' + ____0.options.name + '_' + 'sessions.db'); sessions.$collection = ____0.connectCollection({ collection: ____0.options.session.collection, db: ____0.options.session.db }); sessions.loadAll = function (callback) { callback = callback || function (err, docs) { if (!err && docs) { sessions.list = docs; } }; if (____0.options.session.storage === 'mongodb') { sessions.$collection.findAll({}, (err, docs) => { callback(err, docs); }); } else { let ss = ____0.readFileSync(sessions.path); if (ss) { try { ss = JSON.parse(ss); callback(null, ss); console.log(' /// sessions Loaded From /// ' + sessions.path); } catch (err) { console.log(err.message); } } } return; }; sessions.handleSessions = function () { sessions.list = sessions.list.filter((s) => s && (s.user_id || new Date().getTime() - s.createdTime < 1000 * 60 * ____0.options.session.timeout)); sessions.list = sessions.list.filter((s) => s && (s.user_id || new Date().getTime() - s.$time < 1000 * 60 * ____0.options.session.memoryTimeout)); if (____0.options.session.enabled && ____0.options.session.storage === 'mongodb') { sessions.$collection.deleteAll({ createdTime: { $lt: new Date().getTime() - 1000 * 60 * ____0.options.session.timeout } }); } }; sessions.saveAll = function (callback) { callback = callback || function (err) { if (err) { console.log(err.message); } }; sessions.handleSessions(); if (____0.options.session.timeout === 0 || !____0.options.session.enabled) { callback({ message: 'Timout is Zero or not Enabled , Sessions Will Not Saved', }); return; } if (____0.options.session.storage === 'mongodb') { sessions.list.forEach((s, i) => { if (s.id) { sessions.$collection.update(s, (err, result) => {}); } else { sessions.$collection.insert(s, (err, doc) => { if (!err && doc) { sessions.list[i] = doc; } }); } }); } else { ____0.writeFile(sessions.path, JSON.stringify(sessions.list), () => { callback(null, sessions.list); console.log(' /// sessions Saved to ///' + sessions.path); }); } return; }; ____0.getSession = sessions.attach = function (req, callback) { let session = { accessToken: req.headers['Access-Token'] || req.headers['access-token'] || req.query['access-token'] || req.cookie('access_token') }; callback = callback || function () {}; if (session.accessToken) { let index = sessions.list.findIndex((s) => s && s.accessToken && s.accessToken == session.accessToken); if (index !== -1) { sessions.list[index].$time = new Date().getTime(); sessions.list[index].requestesCount++; sessions.list[index].language = sessions.list[index].language || ____0.options.language; sessions.list[index].lang = sessions.list[index].language.id; callback(sessions.list[index]); } else { if (____0.options.session.storage == 'mongodb') { sessions.$collection.find( { accessToken: session.accessToken }, (err, doc) => { if (!err && doc) { doc.$time = new Date().getTime(); doc.requestesCount++; if (!doc.language || !doc.language.id) { doc.language = ____0.options.language; } doc.lang = doc.language.id; sessions.list.push(doc); callback(sessions.list[sessions.list.findIndex((s) => s && s.accessToken == session.accessToken)]); } else { session.$new = !0; session.language = ____0.options.language; session.lang = session.language.id; session.theme = ____0.options.theme; session.data = []; session.requestesCount = 1; session.createdTime = new Date().getTime(); session.$time = new Date().getTime(); sessions.list.push(session); callback(sessions.list[sessions.list.findIndex((s) => s && s.accessToken == session.accessToken)]); } }, true, ); } else { session.$new = !0; session.language = ____0.options.language; session.lang = session.language.id; session.theme = ____0.options.theme; session.data = []; session.requestesCount = 1; session.createdTime = new Date().getTime(); session.$time = new Date().getTime(); sessions.list.push(session); callback(sessions.list[sessions.list.findIndex((s) => s && s.accessToken == session.accessToken)]); } } } else { session.$new = !0; session.language = ____0.options.language; session.lang = session.language.id; session.theme = ____0.options.theme; session.data = []; session.requestesCount = 1; session.createdTime = new Date().getTime(); session.$time = new Date().getTime(); session.accessToken = req.host + req.ip + new Date().getTime().toString() + '_' + Math.random(); session.accessToken = ____0.x0md50x(session.accessToken); sessions.list.push(session); callback(sessions.list[sessions.list.findIndex((s) => s && s.accessToken == session.accessToken)]); } }; ____0.saveSession = sessions.save = function (session) { let index = sessions.list.findIndex((s) => s && s.accessToken && s.accessToken == session.accessToken); if (index !== -1) { sessions.list[index] = session; } }; ____0.on('[any][saving data]', function () { sessions.saveAll(); }); ____0.onPOST({ name: '/x-language/change', public: true }, (req, res) => { req.session.language = req.data; req.session.lang = req.session.language.id || req.data.name; req.session.langDir = req.session.language?.dir; req.session.$save(); res.json({ done: true, language: req.session.language, }); }); ____0.onPOST('x-api/session', (req, res) => { res.json({ done: !0, session: req.session, }); }); ____0.onPOST('x-api/sessions', (req, res) => { res.json({ done: !0, list: sessions.list, }); }); ____0.onPOST('x-api/sessions/save', (req, res) => { sessions.saveAll(); res.json({ done: !0, }); }); ____0.onPOST('x-api/sessions/delete', (req, res) => { sessions.list = []; sessions.saveAll((err, docs) => { res.json({ err: err, docs: docs, done: !0, }); }); }); if (!____0.options.session.storage === 'mongodb') { sessions.loadAll(); } sessions.handleSessions(); return sessions; };