const cookieParser = require('cookie-parser')();
const authentication = require('../middleware/authentication');

// Session data does not automatically attach to websocket req objects.
// This middleware code looks for a user in the session and, if it exists,
// attaches it to the graph req.
const deserializeUser = (req) => {
  return new Promise((resolve, reject) => {

    // Parse the cookies (if they exist?).
    cookieParser(req, null, (err) => {
      if (err) {
        return reject(err);
      }

      // This uses the authentication connect middleware to establish the
      // current user.
      authentication(req, null, (err) => {
        if (err) {
          return reject(err);
        }

        // Resolve with the request (user removed possibly).
        return resolve(req);
      });
    });
  });
};

module.exports = {
  deserializeUser
};
