sessions.post.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* Import modules. */
  2. import moment from 'moment'
  3. import PouchDB from 'pouchdb'
  4. import { v4 as uuidv4 } from 'uuid'
  5. /* Initialize databases. */
  6. const sessionsDb = new PouchDB(`http://${process.env.COUCHDB_USER}:${process.env.COUCHDB_PASSWORD}@127.0.0.1:5984/sessions`)
  7. /**
  8. * Create Session
  9. *
  10. * @returns session
  11. */
  12. const createSession = async (_event) => {
  13. /* Set headers. */
  14. const headers = _event.node.req.headers
  15. // console.log('HEADERS', headers)
  16. /* Build log details. */
  17. const logDetails = {
  18. i18n: headers['accept-language'],
  19. client: headers['user-agent'],
  20. referer: headers['referer'],
  21. host: headers['host'],
  22. ip: headers['x-real-ip'],
  23. ip_fwd: headers['x-forwarded-for'],
  24. url: _event.node.req.url,
  25. }
  26. // console.info('LOG (api):', logDetails)
  27. /* Create (new) session. */
  28. const session = {
  29. _id: uuidv4(),
  30. ...logDetails,
  31. isActive: true,
  32. createdAt: moment().unix(),
  33. }
  34. /* Save session to database. */
  35. const success = await sessionsDb
  36. .put(session)
  37. .catch(err => console.error(err))
  38. console.log('SUCCESS', success)
  39. /* Return session. */
  40. return session
  41. }
  42. export default defineEventHandler(async (event) => {
  43. /* Set (request) body. */
  44. const body = await readBody(event)
  45. // console.log('SESSIONS.POST (body):', body)
  46. /* Initialize locals. */
  47. let session
  48. /* Set session id. */
  49. const sessionid = body?.sessionid
  50. // console.log('SESSION ID', sessionid)
  51. /* Request session (if available). */
  52. session = await sessionsDb
  53. .get(sessionid)
  54. .catch(err => console.error(err))
  55. console.log('SESSION (api):', session)
  56. /* Validate session. */
  57. if (!session || !session?.isActive) {
  58. session = await createSession(event)
  59. } else {
  60. /* Update timestamp. */
  61. session = {
  62. ...session,
  63. updatedAt: moment().unix(),
  64. }
  65. /* Save (updated) session. */
  66. const success = await sessionsDb
  67. .put(session)
  68. .catch(err => console.error(err))
  69. // console.log('UPDATE SESSION (api):', success)
  70. }
  71. /* Return session. */
  72. return session
  73. })