UNPKG

adp

Version:

Toolkit for interfacing with ADP Marketplace API's

134 lines (97 loc) 2.96 kB
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); });