adp
Version:
Toolkit for interfacing with ADP Marketplace API's
525 lines (464 loc) • 14.8 kB
JavaScript
var ssl = require('./config/sslsettings');
var request = require('request');
var moment = require('moment');
var _ = require("lodash");
_.mixin(require("lodash-deep"));
var apiRequest = {};
function errorObject(code, err) {
return {
code: code,
errors: err
}
}
apiRequest.passwordUpdate = function(options, headers, cb) {
options.aoid = headers.associateoid;
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user-account.credential.change',
headers: headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateUpdatePassword(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, body);
} else {
cb(errorObject(response.statusCode, pluckErrorMessages({body:body})))
}
});
}
apiRequest.passwordReset = function(options, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user-account-credential-reset.request',
headers: this.headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
form: options
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
body = JSON.parse(body);
if(err){
cb(errorObject(response.statusCode, err), body)
} else {
cb(false, body.events[0].data);
}
});
}
apiRequest.questionsGet = function(cb) {
var reqparams = {
url: ssl.apiEndpoint+'/core/v1/security-questionnaires',
headers: this.headers,
agentOptions: ssl.agent_options(),
strictSSL: false
};
// request user info. Display page on callback
request.get(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, JSON.parse(response.body)[0]);
} else {
cb(errorObject(null, err), body)
}
});
}
apiRequest.questionsSet = function(options, headers, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user-security-answers.change',
headers: headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateQuizUpdate(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode !== 200){
cb(errorObject(response.statusCode, pluckErrorMessages({body:body})))
} else {
cb(false, body);
}
});
}
apiRequest.readByUsername = function(options, headers, cb) {
var reqparams = {
url: ssl.apiEndpoint+"/events/core/v1/user.read?$filter=userAccounts/userAccountID eq '"+options+"'",
headers: headers,
agentOptions: ssl.agent_options(),
strictSSL: false
};
// request user info. Display page on callback
request.get(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
var returnObject = JSON.parse(response.body);
cb(false, {
quiz: returnObject.meta.input.questionnaire.questions,
answers: returnObject.events[0].data.output.users[0].userAccounts[0].userSecurityQuestionniare
});
} else {
var errorMsg = {body:JSON.parse(response.body)};
cb(errorObject(response.statusCode, pluckErrorMessages(errorMsg)))
}
});
}
apiRequest.read = function(options, headers, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user.read/'+options,
headers: headers,
agentOptions: ssl.agent_options(),
strictSSL: false
};
// request user info. Display page on callback
request.get(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
var response = JSON.parse(response.body);
var returnObject = {};
returnObject.username = response.events[0].data.output.users[0].userAccounts[0].userAccountID;
returnObject.contact = response.events[0].data.output.users[0].person;
returnObject.quiz = response.meta.input.questionnaire.questions;
returnObject.myQuiz = response.events[0].data.output.users[0].userAccounts[0].userSecurityQuestionniare.questionnaireAnswers;
cb(false, returnObject);
} else {
// cb(errorObject(response.statusCode, pluckErrorMessages(JSON.parse(response))))
cb(false, response)
}
});
}
apiRequest.register = function(options, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user.register',
headers: this.headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateRegister(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, response.body.events);
} else {
cb(errorObject(response.statusCode, pluckErrorMessages(response)))
}
});
}
apiRequest.forgotUsername = function(options, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user-account.retrieve',
headers: this.headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateForgotUsername(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, response.body.events);
} else {
cb(errorObject(response.statusCode, pluckErrorMessages(response)))
}
});
}
apiRequest.forgotPassword = function(options, cb) {
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/user-account-credential-reset.request',
headers: this.headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateForgotPassword(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, response.body.events);
} else {
cb(errorObject(response.statusCode, pluckErrorMessages(response)))
}
});
}
apiRequest.saveNotificationMethod = function(options, headers, cb) {
options.aoid = headers.associateoid;
var reqparams = {
url: ssl.apiEndpoint+'/events/core/v1/security-notification-preference.change',
headers: headers,
agentOptions: ssl.agent_options(),
strictSSL: false,
json: generateSaveNotification(options)
};
// request user info. Display page on callback
request.post(reqparams, function getUserInfo(err,response,body){
if(response.statusCode === 200){
cb(false, response.body.events);
} else {
cb(errorObject(response.statusCode, pluckErrorMessages(response)))
}
});
}
function pluckErrorMessages(response) {
var errors = [];
// response.body.confirmMessage.resourceMessages[0].processMessages[0].userMessage.messageTxt
_.each(response.body.confirmMessage.resourceMessages, function(item) {
errors = errors.concat(
_.deepPluck(item.processMessages, 'userMessage.messageTxt')
)
})
return errors;
}
function generateUpdatePassword(options) {
return {
"events": [
{
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "userAccount.credential.change"
},
"data": {
"eventContext": {
"contextExpressionID": "developer",
"userAccountID": options.username,
"associateOID": options.aoid
},
"transform": {
"eventReasonCode": {
"codeValue": "changePassword"
},
"eventStatusCode": {
"codeValue": "submit"
},
"user": {
"userAccount": {
"userAccountCredential": options.passwordOriginal,
"newUserAccountCredential": options.password
}
}
}
}
}
]
}
}
function generateForgotPassword(options) {
return {
"events": [{
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "userAccountCredentialReset.request"
},
"data": {
"eventContext": {
"contextExpressionID": "developer",
"userAccountID":options.username
},
"transform": {
"userAccountResetRequest": {
"userSecurityQuestionniare": {
"questionnaireID": 99,
"questionnaireAnswers": options.quiz
},
"retrievalChannelMethodCode": {
"codeValue": "email"
}
}
}
}
}]
}
}
function generateQuizUpdate(options) {
//http://netsecuredit.ws.nj.adp.com/scim/rest/api/events/core/v1/user-security-answers.change
return {
"events": [
{
"eventNameCode": {
"codeValue": "userSecurityAnswers.change"
},
"serviceCategoryCode": {
"codeValue": "core"
},
"originator": {
"associateOID": options.aoid
},
"actor": {
"associateOID": options.aoid
},
"data": {
"eventContext": {
"userID": options.username,
"questionnaireID": "99"
},
"transform": {
"eventStatusCode": {
"codeValue": "submit"
},
"userSecurityQuestionniare": {
"questionnaireID": "99",
"questionnaireAnswers": options.quiz
}
}
}
}
]
}
}
function generateForgotUsername(options) {
return {
"events": [
{
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "user-Account.retrieve"
},
"data": {
"eventContext": {
"contextExpressionID": "developer"
},
"transform": {
"eventStatusCode": {
"codeValue": "submit"
},
"user": {
"person": {
"personName": {
"givenName": options.first,
"familyName1": options.last
},
"personalCommunication": {
"emails": [
{
"nameCode": {
"codeValue": "personal"
},
"emailUri": options.email
}
]
}
},
"retrievalChannelMethodCode": {
"codeValue": "Email",
"shortName": "Email to User"
}
}
}
}
}
]
}
}
//use this to update email preference
function generateSaveNotification(options) {
return {
"events": [
{
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "securityNotificationPreference.change"
},
"originator": {
"associateOID": options.aoid
},
"actor": {
"associateOID": options.aoid
},
"data": {
"eventContext": {
"worker": {
"associateOID": options.aoid
},
"notificationPreference": {
"itemID": "1",
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "userAccount.change"
}
}
},
"transform": {
"eventStatusCode": {
"codeValue": "submit"
},
"notificationChannelPreference": {
"personalCommunication": {
"emails": [
{
"emailUri": options.email
}
]
}
}
}
}
}
]
}
}
function generateRegister(options) {
return {
"events": [
{
"serviceCategoryCode": {
"codeValue": "core"
},
"eventNameCode": {
"codeValue": "user.register"
},
"data": {
"eventContext": {
"contextExpressionID": "developer"
},
"transform": {
"eventStatusCode": {
"codeValue": "submit"
},
"user": {
"person": {
"personName": {
"givenName": options.first,
"familyName1": options.last
},
"personalCommunication": {
"emails": [
{
"nameCode": {
"codeValue": "personal"
},
"emailUri": options.email
}
]
}
},
"userAccount": {
"userAccountID": options.username,
"userAccountCredential": options.password,
"accountTypeCode": {
"codeValue": "classic"
},
"userSecurityQuestionnaire": {
"questionnaireID": "99",
"questionnaireAnswers": options.quiz
},
"disclosure": {
"disclosureTypeCode": {
"codeValue": "TandC"
},
"acceptedIndicator": {
"indicatorValue": true,
"effectiveDate": moment().format('YYYY-MM-DD')
}
}
}
}
}
}
}
]
}
}
module.exports = apiRequest;