| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- const CONFIG = require('./config.js');
- const SESSION_TIME = 2 * 1 * 60 * 60 * 1000; // 2h
- const SESSION_COOKIE = "_sessionId";
- const crypto = require('crypto');
- const ldapjs = require('ldapjs');
- const ldap = ldapjs.createClient({
- url: [ CONFIG.ldapUrl, CONFIG.ldapUrl ],
- reconnect: true
- });
- const MD5 = require('./md5sum.js').string;
- let loggedCache = {};
- let ldapReady = new Promise((ok, ko) => {
- ldap.on("error", (err) => { console.error("LDAP Error: " +err) });
- ldap.bind(CONFIG.ldapBindDN, CONFIG.ldapBindPwd, (err) => {
- if (err) {
- console.error(err);
- ko(err);
- throw err;
- }
- console.log("LDAP is ready");
- ok();
- });
- });
- function getSessionId(cookieObject) {
- return cookieObject?.[SESSION_COOKIE];
- }
- function getSessionObj(cookieObject) {
- let cookie = getSessionId(cookieObject);
- if (!cookie)
- return null;
- let sessionEntry = loggedCache[cookie];
- const now = (new Date()).getTime();
- if (!sessionEntry || sessionEntry.expire < now)
- return null;
- sessionEntry.expire = now + SESSION_TIME;
- return sessionEntry;
- }
- function getAccessList(cookieObject) {
- let session = getSessionObj(cookieObject);
- if (!session)
- return null;
- return session.accessList;
- }
- function getRequestIp(req) {
- return req.headers['x-forwarded-for'] || req.socket.remoteAddress;
- }
- function sign(msg) {
- return crypto.sign('sha256', Buffer.from(msg), decodeKey(CONFIG.privKey)).toString('base64');
- }
- function Access() {
- }
- Access.prototype.id = function() { return ""; }
- function LinkAccess(linkId) {
- Access.call(this);
- this.linkId = linkId;
- }
- LinkAccess.prototype = Object.create(Access.prototype);
- LinkAccess.prototype.id = function() { return "LINK_"+this.linkId; }
- module.exports = {
- getAccessList: getAccessList,
- getRequestIp: getRequestIp,
- createSession: req => {
- const now = Date.now();
- let sessionInfos = {
- loginDateTime: now,
- expire: now + SESSION_TIME,
- accessList: {},
- random: Math.random(),
- userAgent: req.headers['user-agent'],
- ipAddress: getRequestIp(req)
- };
- let sessionKey = MD5(JSON.stringify(sessionInfos));
- sessionInfos.sessionId = sessionKey;
- loggedCache[sessionKey] = sessionInfos;
- req.cookies[SESSION_COOKIE] = sessionKey;
- return { key: sessionKey, accessList: sessionInfos.accessList };
- },
- addLinkToSession: (req, linkId) => {
- let session = getSessionObj(req.cookies);
- if (!session)
- return;
- let accessList = new LinkAccess(linkId);
- session.accessList[accessList.id()] = accessList;
- return session.accessList;
- },
- removeFromSession: (req, accessId) => {
- let session = getSessionObj(req.cookies);
- if (!session)
- return;
- delete session.accessList[accessId];
- return session.accessList;
- },
- SESSION_COOKIE: SESSION_COOKIE
- };
|