sessions.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const PouchDB = require('pouchdb')
  2. // const uuidv4 = require('uuid/v4')
  3. // const moment = require('moment')
  4. // const superagent = require('superagent')
  5. /* Add Mango queries to PouchDB. */
  6. // PouchDB.plugin(require('pouchdb-find'))
  7. /* Initialize database. */
  8. const db = new PouchDB('http://api:password@localhost:5984/apecs_sessions')
  9. /**
  10. * Projects
  11. */
  12. const projects = async function (req, res) {
  13. /* Set headers. */
  14. // const headers = req.headers
  15. // console.log('HEADERS', headers)
  16. /* Set body. */
  17. const body = req.body
  18. // console.log('BODY', body)
  19. /* Validate body. */
  20. if (!body) {
  21. /* Set status code. */
  22. res.status(400)
  23. return res.json({
  24. error: 'A request BODY is required with this request.'
  25. })
  26. }
  27. /* Initialize query. */
  28. let query = null
  29. /* Initialize result. */
  30. let result = null
  31. /* Validate session id. */
  32. // a9c8d400-88fa-404f-975a-2d23dfe0616b
  33. if (body.sessionId) {
  34. result = await db.get(body.sessionId)
  35. .catch(err => console.error('SESSION ID ERROR:', err))
  36. }
  37. /* Validate authentication hash. */
  38. // 0a4145ed9f2f63c0118f2ea2778e446c183abbdbe666e745df318c095049757c
  39. if (!body.sessionId && body.authHash) {
  40. /* Set (mango) query. */
  41. query = {
  42. selector: {
  43. 'authHash': body.authHash
  44. },
  45. sort: [{'createdAt':'desc'}]
  46. }
  47. /* Request data. */
  48. result = await db.find(query)
  49. .catch(err => console.error('AUTH HASH ERROR:', err))
  50. /* Validate documents. */
  51. if (result && !result.docs) {
  52. result = null
  53. } else {
  54. /* Select most recent document. */
  55. result = result.docs[0]
  56. }
  57. }
  58. /* Validate query. */
  59. if (!result) {
  60. if (!body.sessionId && !body.authHash) {
  61. /* Set status code. */
  62. res.status(400)
  63. return res.json({
  64. error: '`sessionId` OR `authHash` is required for this request.',
  65. })
  66. }
  67. /* Set status code. */
  68. res.status(404)
  69. return res.json({
  70. error: 'No session was found',
  71. sessionId: body.sessionId,
  72. authHash: body.authHash,
  73. })
  74. }
  75. /* Return session data. */
  76. res.json({
  77. // headers,
  78. ...result,
  79. })
  80. }
  81. module.exports = projects