zkochan/passport-sitegate

View on GitHub
lib/strategy.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

var util = require('util');
var OAuth2Strategy = require('passport-oauth2');
var InternalOAuthError = require('passport-oauth2').InternalOAuthError;
var Profile = require('./profile');

function Strategy(options, verify) {
  options = options || {};
  options.authorizationURL = options.authorizationURL || options.providerOrigin + '/oauth2/authorize';
  options.tokenURL = options.tokenURL || options.providerOrigin + '/oauth2/token';
  options.scopeSeparator = options.scopeSeparator || ',';
  
  OAuth2Strategy.call(this, options, verify);
  this.name = 'sitegate';
  this._profileURL = options.profileURL || options.providerOrigin + '/api/userinfo';
  
  this._oauth2.useAuthorizationHeaderforGET(true);
}

util.inherits(Strategy, OAuth2Strategy);

Strategy.prototype.userProfile = function (accessToken, done) {
  this._oauth2.get(this._profileURL, accessToken, function (err, body, res) {
    if (err) {
      return done(new InternalOAuthError('failed to fetch user profile', err));
    }
    
    var json;
    
    try {
      json = JSON.parse(body);
    } catch (ex) {
      return done(new Error('Failed to parse user profile'));
    }
    
    var profile = Profile.parse(json);
    profile.provider = 'sitegate';
    profile._raw = body;
    profile._json = json;
    
    done(null, profile);
  });
};

module.exports = Strategy;