adp
Version:
Toolkit for interfacing with ADP Marketplace API's
134 lines (97 loc) • 2.96 kB
JavaScript
var express = require('express');
var session = require('express-session');
var request = require('request');
var bodyparser = require('body-parser');
var ssl = require('./config/sslsettings');
var PORT = process.env.PORT || '8888';
var app = express();
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({ extended: true }));
//express session
app.use(session({secret: 'secret', resave: true, saveUninitialized : false}));
/**
* STEP 1. Authenticate End User.
*/
app.get('/auth/request',function authRequest(req,res,next){
//check for access token saved to session
if(req.session.access_token) {
//redirect to perform user info API call.
res.redirect('userInfo');
} else {
//redirect to perform authentication.
res.redirect(ssl.s_full_token_endpoint());
}
});
/**
* STEP 2. Obtain Bearer Token.
*/
app.get('/callback',function authCallback(req,res){
var code = req.query.code;
// This means the authentication was probably
// successful, however the auth call was invalid otherwise.
// examples: invalid client info, improperly constructed callback uri.
if(!code){
res.write('An authentication code was not received.')
return res.end();
}
// construct request options for Bearer token API call.
var bearerOptions = {
'url': ssl.s_bearer_token_endpoint,
'agentOptions': ssl.agent_options(),
'strictSSL' : false,
'form': {
'client_id':ssl.s_client_id,
'client_secret':ssl.s_client_secret,
'grant_type':ssl.s_grant_type,
'code':code,
'redirect_uri':ssl.s_callback_redirect_uri
}
};
request.post(bearerOptions, function bearerPost(err,response,body){
if(err){
res.write('An access token was not received.');
return res.end();
}
body = JSON.parse(body);
// save access token to session.
req.session.access_token = body.access_token;
// redirect to perform user info API call.
res.redirect('userInfo');
});
});
/**
* STEP 3. Make User Info API Call.
*/
app.get('/userInfo', function userInfoHandler(req,res){
// if access token is present then make user info call.
if(req.session.access_token) {
// construct headers/params for user info call.
var headers = {
Authorization: 'Bearer '+ req.session.access_token
};
var reqparams = {
url: ssl.s_user_endPoint,
headers: headers,
strictSSL: false
};
// request user info. Display page on callback
request.get(reqparams, function getUserInfo(err,response,body){
if(err){
res.write('Error making user info api call.');
return res.end();
}
body = JSON.parse(body);
// save user info payload to session.
req.session.userInfo = body;
res.write(JSON.stringify(req.session.userInfo));
res.end();
});
} else {
// No access token found. Route for authentication.
res.redirect('auth/request');
}
});
// listen on configured port.
app.listen(PORT, function listening() {
console.log('listening on port', PORT);
});