|
|
|
const pg = require('../pg')
|
|
|
|
const joinjs = require('join-js').default;
|
|
|
|
const debug = require('debug')('sos:db:session')
|
|
|
|
const mappings = require('../mappings')
|
|
|
|
|
|
|
|
const session = module.exports = {}
|
|
|
|
|
|
|
|
session.create = async (req, _user) => {
|
|
|
|
const user = _user ? _user : req.user
|
|
|
|
|
|
|
|
const session = await createSessionInternal(
|
|
|
|
user ? user.uuid : null,
|
|
|
|
req.ip,
|
|
|
|
req.get('User Agent') || "",
|
|
|
|
req.get('Referrer') || ""
|
|
|
|
)
|
|
|
|
|
|
|
|
req.session.uuid = session.uuid
|
|
|
|
req.sessionObj = session
|
|
|
|
|
|
|
|
return session
|
|
|
|
}
|
|
|
|
|
|
|
|
const createSessionInternal = async (user_uuid, ip_address, user_agent, referer) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.login_user_session($1, $2, $3, $4, $5)',
|
|
|
|
values: [
|
|
|
|
user_uuid,
|
|
|
|
'2 hours',
|
|
|
|
ip_address,
|
|
|
|
user_agent,
|
|
|
|
referer
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
session.validate = async (session_uuid) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.validate_session($1)',
|
|
|
|
values: [
|
|
|
|
session_uuid
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
session.update = async (session_uuid) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.update_session($1)',
|
|
|
|
values: [
|
|
|
|
session_uuid
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
session.end = async (session_uuid) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.end_session($1)',
|
|
|
|
values: [
|
|
|
|
session_uuid
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
session.attachCart = async (session_uuid, cart_uuid) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.attach_cart($1, $2)',
|
|
|
|
values: [
|
|
|
|
session_uuid,
|
|
|
|
cart_uuid
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
session.clearCart = async (session_uuid) => {
|
|
|
|
const query = {
|
|
|
|
text: 'select * from sos.clear_cart($1)',
|
|
|
|
values: [session_uuid]
|
|
|
|
}
|
|
|
|
|
|
|
|
debug(query);
|
|
|
|
|
|
|
|
const {rows} = await pg.query(query)
|
|
|
|
return joinjs.map(rows, mappings, 'sessionMap', 'session_')[0];
|
|
|
|
}
|