const AuthAPI = require("../AuthAPI");

const ReadMethods = { GET: true, HEAD: true };

/**
 * Sets req.user from the payload in the auth token in the request.
 */
function userToken(req, res, next) {
  if (req.user) {
    return next();
  }

  const token = (ReadMethods[req.method] ? req.query : req.body).token;

  if (!token) {
    req.user = null;
    return next();
  }

  AuthAPI.verifyToken(token).then(
    payload => {
      req.user = payload;
      next();
    },
    error => {
      if (error.name === "JsonWebTokenError") {
        res.status(403).send({
          error: `Bad auth token: ${error.message}`
        });
      } else {
        console.error(error);

        res.status(500).send({
          error: "Unable to verify auth"
        });
      }
    }
  );
}

module.exports = userToken;