appirio-tech/lc1-discussion-service

View on GitHub
lib/tc-auth/tcUser.js

Summary

Maintainability
A
1 hr
Test Coverage
var config = require('config');
var routeHelper = require('../../lib/routeHelper');
var request = require('request');

/*
 {
 "id": 40015014,
 "handle": "indy_qa3",
 "full_name": "Neil Hastings",
 "avatar_url": "//www.gravatar.com/avatar/b56ee7ec472676dfda65dd62bde2ff3e"
 "perms": {
 "challengeApp": true
 }
 }
 */
exports.tcUser = function(req, res, next) {
  if (req.user) {
    var options = {
      url: config.get('app.tcUser') + '/user',
      headers: {
        'Authorization': req.get('Authorization'),
        'x-id': req.get('x-id'),
        'x-full-name': req.get('x-full-name'),
        'x-handle': req.get('x-handle'),
        'x-avatar-url': req.get('x-avatar-url')
      }
    };

    request(options, function (error, response, body) {
      if (!error && response.statusCode === 200) {
        body = JSON.parse(body);

        req.tcUser = {
          id: body.id,
          name: body.fullName,
          handle: body.handle,
          picture: body.avatarUrl,
          perms: body.perms
        };
        next();
      }
      else {
        //TODO: handle error response from tc api
        routeHelper.addErrorMessage(req, 503, 'TC API Unavailable');
        next();
      }
    });
  } else {
    next();
  }
};

var tcUser;

/**
 * Return the user currently singed in.
 * @param req the request
 */
exports.getSigninUser = function(req) {
  if (tcUser) {
    return tcUser;
  } else if (req) {
    tcUser = req.tcUser ? req.tcUser : {};
  }
  return tcUser;
};

exports.mockUser = function(req, res, next) {

  req.tcUser = {
    id: parseInt(req.headers['x-id']) || 40015014,
    name: req.headers['x-full-name'] || 'Neil Hastings',
    handle: req.headers['x-handle'] || 'indy_qa3',
    picture: req.headers['x-avatar-url'] || '//www.gravatar.com/avatar/b56ee7ec472676dfda65dd62bde2ff3e',
    perms: {
      challengeApp: true
    }
  };

  next();
};