UNPKG

ea-crm-service-connector

Version:

A connector for Microsoft Dynamics CRM instances

81 lines (78 loc) 2.7 kB
// https://github.com/AzureAD/azure-activedirectory-library-for-nodejs // https://azure.microsoft.com/en-gb/documentation/articles/active-directory-devquickstarts-webapi-nodejs/ 'use strict' const AuthenticationContext = require('adal-node').AuthenticationContext const configHelper = require('../../helpers/config-helper') const crmConfig = configHelper.getCrmConfig() var oAuthParameters = {} var self = module.exports = { init: function (callback) { if (crmConfig && crmConfig.dynamics && crmConfig.dynamics.oauth) { oAuthParameters = crmConfig.dynamics.oauth } self.authorityUrl = oAuthParameters.authorityHostUrl + '/' + oAuthParameters.tenant self.context = new AuthenticationContext(self.authorityUrl) self.acquireToken(function (err, result) { if (err) { err.status = false return callback(err) } callback(null, result) }) }, authorityUrl: null, context: null, refreshToken: null, activeToken: null, tokenResponse: null, setActiveToken: function (activeToken) { self.activeToken = activeToken }, getActiveToken: function () { return self.activeToken }, getRefreshToken: function () { return self.refreshToken }, parseToken: function (tokenResponse) { return tokenResponse }, parseRefreshToken: function (tokenResponse) { return tokenResponse[ 'refreshToken' ] }, setTokenRepsonse: function (tokenResponse) { self.tokenResponse = tokenResponse }, setRefreshToken: function (tokenResponse) { self.refreshToken = tokenResponse }, acquireToken: function (callback) { self.context.acquireTokenWithUsernamePassword(oAuthParameters.resource, oAuthParameters.username, oAuthParameters.password, oAuthParameters.clientId, function (err, tokenResponse) { if (err) { callback(err) } else { self.setActiveToken(tokenResponse) self.refreshTokenEvery() callback(null, tokenResponse) } }) }, authenticate: function (username, password, callback) { self.context.acquireTokenWithUsernamePassword(oAuthParameters.resource, username, password, oAuthParameters.clientId, callback) }, aquireRefreshToken: function (callback) { self.context.acquireTokenWithRefreshToken(self.activeToken[ 'refreshToken' ], oAuthParameters.clientId, null, function (err, tokenResponse) { if (err) { callback(err) } else { self.setActiveToken(tokenResponse) callback(null, tokenResponse) } }) }, refreshTokenEvery: function () { setTimeout(function () { self.aquireRefreshToken(self.refreshTokenEvery) }, crmConfig.dynamics.refreshTokenEveryMillisecs) } }