ea-crm-service-connector
Version:
A connector for Microsoft Dynamics CRM instances
81 lines (78 loc) • 2.7 kB
JavaScript
// https://github.com/AzureAD/azure-activedirectory-library-for-nodejs
// https://azure.microsoft.com/en-gb/documentation/articles/active-directory-devquickstarts-webapi-nodejs/
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)
}
}