UNPKG

adp

Version:

Toolkit for interfacing with ADP Marketplace API's

525 lines (464 loc) 14.8 kB
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;