authentication-adal-pkg
Advanced tools
Comparing version 1.0.31 to 1.0.32
@@ -23,2 +23,5 @@ window.AuthenticationContext = require('adal-angular'); | ||
var clientId = null; | ||
var loginPolicy = null; | ||
var editProfilePolicy = null; | ||
var changePasswordPolicy = null; | ||
var userId = null; | ||
@@ -32,3 +35,3 @@ var authenticationResult = null; | ||
const initialize = (config) => { | ||
const initialize = config => { | ||
authority = config.authority; | ||
@@ -41,15 +44,33 @@ tenant = config.tenant; | ||
resourceUri = config.resourceUri; | ||
loginPolicy = config.loginPolicy; | ||
editProfilePolicy = config.editProfilePolicy; | ||
changePasswordPolicy = config.changePasswordPolicy; | ||
clientId = config.clientId; | ||
userId = config.userId; | ||
loginResource = config.loginResource; | ||
} | ||
}; | ||
const initAuthenticationContext = (platform) => { | ||
const initAuthenticationContext = platform => { | ||
if (platform === constants.BROWSER) { | ||
const config = { | ||
let config = { | ||
tenant: tenant, | ||
clientId: clientId, | ||
redirectUri: redirectUriWeb, | ||
loginResource: loginResource, | ||
loginResource: loginResource | ||
}; | ||
if (!!loginPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(loginPolicy) | ||
}); | ||
} | ||
if (!!editProfilePolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(editProfilePolicy) | ||
}); | ||
} | ||
if (!!changePasswordPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(changePasswordPolicy) | ||
}); | ||
} | ||
auth = new AuthenticationContext(config); | ||
@@ -59,3 +80,3 @@ } else { | ||
} | ||
} | ||
}; | ||
@@ -77,33 +98,37 @@ const storage = { | ||
const getPlatform = () => (window.cordova && window.cordova.platformId) || 'browser'; | ||
const getPlatform = () => | ||
(window.cordova && window.cordova.platformId) || 'browser'; | ||
const signIn = () => new Promise((resolve, reject) => { | ||
authenticate(resolve, reject); | ||
}); | ||
const signIn = () => | ||
new Promise((resolve, reject) => { | ||
authenticate(resolve, reject); | ||
}); | ||
const signOutMobile = () => new Promise((resolve, reject) => { | ||
try { | ||
if (!authContext) { | ||
initAuthenticationContext(constants.MOBILE); | ||
const signOutMobile = () => | ||
new Promise((resolve, reject) => { | ||
try { | ||
if (!authContext) { | ||
initAuthenticationContext(constants.MOBILE); | ||
} | ||
authContext.tokenCache.clear(); | ||
resolve(); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
authContext.tokenCache.clear(); | ||
resolve(); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
// request naar https://login.windows.net/{tenantid or "common"}/oauth2/logout?post_logout_redirect_uri={URL} | ||
}); | ||
// request naar https://login.windows.net/{tenantid or "common"}/oauth2/logout?post_logout_redirect_uri={URL} | ||
}); | ||
const signOutBrowser = () => new Promise((resolve, reject) => { | ||
try { | ||
if (!auth) { | ||
initAuthenticationContext(constants.BROWSER); | ||
const signOutBrowser = () => | ||
new Promise((resolve, reject) => { | ||
try { | ||
if (!auth) { | ||
initAuthenticationContext(constants.BROWSER); | ||
} | ||
auth.logOut(); | ||
storage.remove(constants.TOKEN); | ||
resolve(); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
auth.logOut(); | ||
storage.remove(constants.TOKEN); | ||
resolve(); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
}); | ||
}); | ||
@@ -116,21 +141,19 @@ const signOut = () => { | ||
} | ||
} | ||
}; | ||
const onAcquireToken = (errorDesc, token, error) => new Promise((resolve, reject) => { | ||
const acquireTokenCallback = (desc, token, err) => { | ||
if (err) | ||
reject(err); | ||
else | ||
const onAcquireToken = (errorDesc, token, error) => | ||
new Promise((resolve, reject) => { | ||
const acquireTokenCallback = (desc, token, err) => { | ||
if (err) reject(err); | ||
else resolve(token); | ||
}; | ||
if (error) { | ||
if (!auth) { | ||
initAuthenticationContext(constants.BROWSER); | ||
} | ||
auth.acquireTokenPopup(clientId, null, null, acquireTokenCallback); | ||
} else { | ||
resolve(token); | ||
} | ||
; | ||
if (error) { | ||
if (!auth) { | ||
initAuthenticationContext(constants.BROWSER); | ||
} | ||
auth.acquireTokenPopup(clientId, null, null, acquireTokenCallback); | ||
} else { | ||
resolve(token); | ||
} | ||
}); | ||
}); | ||
@@ -146,12 +169,14 @@ const acquireTokenBrowser = (resolve, reject, cb) => { | ||
const acquireTokenCallback = (errorDesc, token, error) => { | ||
onAcquireToken(errorDesc, token, error).then(resolve).catch((e) => { | ||
if (e === 'login required') { | ||
const authPromise = new Promise((resolve, reject) => { | ||
authenticate(resolve, reject); | ||
}); | ||
} else{ | ||
reject(e); | ||
} | ||
}); | ||
} | ||
onAcquireToken(errorDesc, token, error) | ||
.then(resolve) | ||
.catch(e => { | ||
if (e === 'login required') { | ||
const authPromise = new Promise((resolve, reject) => { | ||
authenticate(resolve, reject); | ||
}); | ||
} else { | ||
reject(e); | ||
} | ||
}); | ||
}; | ||
auth.acquireToken(clientId, acquireTokenCallback); | ||
@@ -161,3 +186,3 @@ } else { | ||
} | ||
} | ||
}; | ||
@@ -168,3 +193,3 @@ const acquireTokenMobile = (resolve, reject) => { | ||
} | ||
authContext.tokenCache.readItems().then((items) => { | ||
authContext.tokenCache.readItems().then(items => { | ||
const index = items.length - 1; | ||
@@ -177,18 +202,19 @@ const token = items[index] && items[index].accessToken; | ||
} | ||
}) | ||
} | ||
}); | ||
}; | ||
const acquireToken = (cb) => new Promise((resolve, reject) => { | ||
try { | ||
if (getPlatform() === constants.BROWSER) { | ||
acquireTokenBrowser(resolve, reject, cb); | ||
} else { | ||
acquireTokenMobile(resolve, reject); | ||
const acquireToken = cb => | ||
new Promise((resolve, reject) => { | ||
try { | ||
if (getPlatform() === constants.BROWSER) { | ||
acquireTokenBrowser(resolve, reject, cb); | ||
} else { | ||
acquireTokenMobile(resolve, reject); | ||
} | ||
} catch (err) { | ||
reject(err); | ||
} | ||
} catch (err) { | ||
reject(err); | ||
} | ||
}); | ||
}); | ||
const setPlatformRedirectUri = (platform) => { | ||
const setPlatformRedirectUri = platform => { | ||
switch (platform.toLowerCase()) { | ||
@@ -205,3 +231,3 @@ case 'android': | ||
} | ||
} | ||
}; | ||
@@ -213,10 +239,10 @@ const isInProgress = () => storage.get(constants.IN_PROGRESS) === 'true'; | ||
const expiration = storage.get(constants.TOKEN_EXPIRATION); | ||
if (expiration && (parseInt(expiration, 10) > (Date.now() / 1000))) { | ||
if (expiration && parseInt(expiration, 10) > Date.now() / 1000) { | ||
// log.info('valid cached token'); | ||
return {response: token, error: null}; | ||
return { response: token, error: null }; | ||
} else if (localError) { | ||
return {response: null, error: localError}; | ||
return { response: null, error: localError }; | ||
} | ||
return {response: null, error: null}; | ||
} | ||
return { response: null, error: null }; | ||
}; | ||
@@ -230,3 +256,3 @@ const authenticateMobile = (resolve, reject) => { | ||
// This prevents an additional prompt | ||
authContext.tokenCache.readItems().then((items) => { | ||
authContext.tokenCache.readItems().then(items => { | ||
if (items.length > 0) { | ||
@@ -237,21 +263,25 @@ authority = items[0].authority; | ||
// Attempt to authorize user silently | ||
authContext.acquireTokenSilentAsync(resourceUri, clientId, userId).then(resolve, () => { | ||
// We require user credentials so triggers authentication dialog | ||
authContext.acquireTokenAsync(resourceUri, clientId, platformRedirectUri).then(resolve, reject); | ||
}); | ||
authContext | ||
.acquireTokenSilentAsync(resourceUri, clientId, userId) | ||
.then(resolve, () => { | ||
// We require user credentials so triggers authentication dialog | ||
authContext | ||
.acquireTokenAsync(resourceUri, clientId, platformRedirectUri) | ||
.then(resolve, reject); | ||
}); | ||
}); | ||
}); | ||
} | ||
}; | ||
const authenticateBrowser = (resolve, reject) => { | ||
initAuthenticationContext(constants.BROWSER); | ||
const {response: token} = getCachedToken(); | ||
const { response: token } = getCachedToken(); | ||
if (!token && !isInProgress() && !localError) { | ||
storage.set(constants.IN_PROGRESS, false); | ||
auth.login(); | ||
resolve({token: null, error: null}); | ||
resolve({ token: null, error: null }); | ||
} else { | ||
auth.saveTokenFromHash(auth.getRequestInfo(window.location.hash)); | ||
resolve({token, error: null}); | ||
resolve({ token, error: null }); | ||
} | ||
} | ||
}; | ||
const authenticate = (resolve, reject) => { | ||
@@ -268,5 +298,5 @@ try { | ||
} | ||
} | ||
}; | ||
const decodeTokenPayload = (token) => { | ||
const decodeTokenPayload = token => { | ||
try { | ||
@@ -278,8 +308,8 @@ return jwtDecode(token); | ||
} | ||
} | ||
}; | ||
const getUser = () => { | ||
if (!Object.keys(user).length) { | ||
return acquireToken(getUser).then((token) => { | ||
var {family_name, given_name, name, upn} = decodeTokenPayload(token); | ||
return acquireToken(getUser).then(token => { | ||
var { family_name, given_name, name, upn } = decodeTokenPayload(token); | ||
if (!upn) { | ||
@@ -293,12 +323,12 @@ upn = decodeTokenPayload(token).email; | ||
return Promise.resolve(user); | ||
} | ||
}; | ||
const getTokenFromCache = () => { | ||
return storage.get(constants.TOKEN); | ||
} | ||
}; | ||
const getUserFromCache = () => { | ||
const token = storage.get(constants.TOKEN); | ||
if(token){ | ||
var {family_name, given_name, name, upn} = decodeTokenPayload(token); | ||
if (token) { | ||
var { family_name, given_name, name, upn } = decodeTokenPayload(token); | ||
if (!upn) { | ||
@@ -310,9 +340,9 @@ upn = decodeTokenPayload(token).email; | ||
} | ||
} | ||
}; | ||
const createUser = (familyName, givenName, name, upn) => { | ||
return {familyName, givenName, name, upn}; | ||
} | ||
return { familyName, givenName, name, upn }; | ||
}; | ||
const getUrlParameters = (hash) => { | ||
const getUrlParameters = hash => { | ||
function deserializeHash(query) { | ||
@@ -343,14 +373,22 @@ var match; | ||
function getQueryParams(url) { | ||
return url.substr(1).split('&').reduce((params, item) => { | ||
const [key, | ||
value] = item.split('='); | ||
if (!params.hasOwnProperty(key)) { // eslint-disable-line no-prototype-builtins | ||
return Object.assign({}, params, {[key]: decodeURIComponent(value)}); | ||
} | ||
return params; | ||
}, {}); | ||
return url | ||
.substr(1) | ||
.split('&') | ||
.reduce((params, item) => { | ||
const [key, value] = item.split('='); | ||
if (!params.hasOwnProperty(key)) { | ||
// eslint-disable-line no-prototype-builtins | ||
return Object.assign({}, params, { | ||
[key]: decodeURIComponent(value) | ||
}); | ||
} | ||
return params; | ||
}, {}); | ||
} | ||
return getHash(hash || window.location.hash) || getQueryParams(window.location.search); | ||
} | ||
return ( | ||
getHash(hash || window.location.hash) || | ||
getQueryParams(window.location.search) | ||
); | ||
}; | ||
@@ -381,5 +419,13 @@ const handleWindowCallback = () => { | ||
} | ||
} | ||
}; | ||
handleWindowCallback(); | ||
return {signIn, signOut, acquireToken, initialize, getUser, getUserFromCache, getTokenFromCache} | ||
return { | ||
signIn, | ||
signOut, | ||
acquireToken, | ||
initialize, | ||
getUser, | ||
getUserFromCache, | ||
getTokenFromCache | ||
}; | ||
})(); | ||
@@ -386,0 +432,0 @@ |
414
index.js
@@ -0,6 +1,62 @@ | ||
'use strict'; | ||
var _slicedToArray = (function() { | ||
function sliceIterator(arr, i) { | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for ( | ||
var _i = arr[Symbol.iterator](), _s; | ||
!(_n = (_s = _i.next()).done); | ||
_n = true | ||
) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i['return']) _i['return'](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
return function(arr, i) { | ||
if (Array.isArray(arr)) { | ||
return arr; | ||
} else if (Symbol.iterator in Object(arr)) { | ||
return sliceIterator(arr, i); | ||
} else { | ||
throw new TypeError( | ||
'Invalid attempt to destructure non-iterable instance' | ||
); | ||
} | ||
}; | ||
})(); | ||
function _defineProperty(obj, key, value) { | ||
if (key in obj) { | ||
Object.defineProperty(obj, key, { | ||
value: value, | ||
enumerable: true, | ||
configurable: true, | ||
writable: true | ||
}); | ||
} else { | ||
obj[key] = value; | ||
} | ||
return obj; | ||
} | ||
window.AuthenticationContext = require('adal-angular'); | ||
const jwtDecode = require('jwt-decode'); | ||
var jwtDecode = require('jwt-decode'); | ||
const eandisAuthenticator = (function auth(config) { | ||
const constants = { | ||
var eandisAuthenticator = (function auth(config) { | ||
var constants = { | ||
MOBILE: 'mobile', | ||
@@ -22,4 +78,8 @@ BROWSER: 'browser', | ||
var loginResource = null; | ||
var clientId = null; | ||
var clientIdNative = null; | ||
var clientIdWeb = null; | ||
var userId = null; | ||
var loginPolicy = null; | ||
var editProfilePolicy = null; | ||
var changePasswordPolicy = null; | ||
var authenticationResult = null; | ||
@@ -32,3 +92,3 @@ var auth = null; | ||
const initialize = config => { | ||
var initialize = function initialize(config) { | ||
authority = config.authority; | ||
@@ -41,16 +101,35 @@ tenant = config.tenant; | ||
resourceUri = config.resourceUri; | ||
clientId = config.clientId; | ||
clientIdWeb = config.clientIdWeb; | ||
clientIdNative = config.clientIdNative; | ||
userId = config.userId; | ||
loginResource = config.loginResource; | ||
loginPolicy = config.loginPolicy; | ||
editProfilePolicy = config.editProfilePolicy; | ||
changePasswordPolicy = config.changePasswordPolicy; | ||
}; | ||
const initAuthenticationContext = platform => { | ||
var initAuthenticationContext = function initAuthenticationContext(platform) { | ||
if (platform === constants.BROWSER) { | ||
const config = { | ||
let config = { | ||
tenant: tenant, | ||
clientId: clientId, | ||
clientId: clientIdWeb, | ||
redirectUri: redirectUriWeb, | ||
loginResource: loginResource | ||
}; | ||
auth = new AuthenticationContext(config); | ||
if (!!loginPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(loginPolicy) | ||
}); | ||
} | ||
if (!!editProfilePolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(editProfilePolicy) | ||
}); | ||
} | ||
if (!!changePasswordPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(changePasswordPolicy) | ||
}); | ||
} | ||
auth = new AuthenticationContext(_config); | ||
} else { | ||
@@ -61,12 +140,12 @@ authContext = new Microsoft.ADAL.AuthenticationContext(authority); | ||
const storage = { | ||
var storage = { | ||
prefix: 'auth', | ||
set(key, value) { | ||
localStorage.setItem(`${this.prefix}-${key}`, value); | ||
set: function set(key, value) { | ||
localStorage.setItem(this.prefix + '-' + key, value); | ||
}, | ||
get(key) { | ||
return localStorage.getItem(`${this.prefix}-${key}`); | ||
get: function get(key) { | ||
return localStorage.getItem(this.prefix + '-' + key); | ||
}, | ||
remove(key) { | ||
localStorage.removeItem(`${this.prefix}-${key}`); | ||
remove: function remove(key) { | ||
localStorage.removeItem(this.prefix + '-' + key); | ||
} | ||
@@ -77,12 +156,28 @@ }; | ||
const getPlatform = () => | ||
(window.cordova && window.cordova.platformId) || 'browser'; | ||
var getPlatform = function getPlatform() { | ||
return (window.cordova && window.cordova.platformId) || 'browser'; | ||
}; | ||
const signIn = () => | ||
new Promise((resolve, reject) => { | ||
var signIn = function signIn() { | ||
return new Promise(function(resolve, reject) { | ||
authenticate(resolve, reject); | ||
}); | ||
const signOutMobile = () => | ||
new Promise((resolve, reject) => { | ||
}; | ||
var signoutServer = function signoutServer() { | ||
var xhr = new XMLHttpRequest(); | ||
setPlatformRedirectUri(getPlatform()); | ||
var url = | ||
'https://login.windows.net/' + | ||
tenant + | ||
'/oauth2/logout?post_logout_redirect_uri=' + | ||
platformRedirectUri; | ||
xhr.open('GET', url, true); | ||
xhr.onreadystatechange = function() { | ||
if (xhr.readyState == 4) { | ||
} | ||
}; | ||
xhr.send(); | ||
}; | ||
var signOutMobile = function signOutMobile() { | ||
return new Promise(function(resolve, reject) { | ||
try { | ||
@@ -93,2 +188,4 @@ if (!authContext) { | ||
authContext.tokenCache.clear(); | ||
signoutServer(); | ||
resolve(); | ||
@@ -100,5 +197,6 @@ } catch (err) { | ||
}); | ||
}; | ||
const signOutBrowser = () => | ||
new Promise((resolve, reject) => { | ||
var signOutBrowser = function signOutBrowser() { | ||
return new Promise(function(resolve, reject) { | ||
try { | ||
@@ -109,3 +207,2 @@ if (!auth) { | ||
auth.logOut(); | ||
storage.remove(constants.TOKEN); | ||
resolve(); | ||
@@ -116,4 +213,7 @@ } catch (err) { | ||
}); | ||
}; | ||
const signOut = () => { | ||
var signOut = function signOut() { | ||
storage.remove(constants.TOKEN); | ||
storage.remove(constants.TOKEN_EXPIRATION); | ||
if (getPlatform() === constants.BROWSER) { | ||
@@ -126,5 +226,9 @@ return signOutBrowser(); | ||
const onAcquireToken = (errorDesc, token, error) => | ||
new Promise((resolve, reject) => { | ||
const acquireTokenCallback = (desc, token, err) => { | ||
var onAcquireToken = function onAcquireToken(errorDesc, token, error) { | ||
return new Promise(function(resolve, reject) { | ||
var acquireTokenCallback = function acquireTokenCallback( | ||
desc, | ||
token, | ||
err | ||
) { | ||
if (err) reject(err); | ||
@@ -137,3 +241,3 @@ else resolve(token); | ||
} | ||
auth.acquireTokenPopup(clientId, null, null, acquireTokenCallback); | ||
auth.acquireTokenPopup(clientIdWeb, null, null, acquireTokenCallback); | ||
} else { | ||
@@ -143,5 +247,6 @@ resolve(token); | ||
}); | ||
}; | ||
const acquireTokenBrowser = (resolve, reject, cb) => { | ||
const token = storage.get(constants.TOKEN); | ||
var acquireTokenBrowser = function acquireTokenBrowser(resolve, reject, cb) { | ||
var token = storage.get(constants.TOKEN); | ||
if (!token) { | ||
@@ -153,8 +258,12 @@ if (!auth) { | ||
auth.handleWindowCallback(); | ||
const acquireTokenCallback = (errorDesc, token, error) => { | ||
var acquireTokenCallback = function acquireTokenCallback( | ||
errorDesc, | ||
token, | ||
error | ||
) { | ||
onAcquireToken(errorDesc, token, error) | ||
.then(resolve) | ||
.catch(e => { | ||
.catch(function(e) { | ||
if (e === 'login required') { | ||
const authPromise = new Promise((resolve, reject) => { | ||
var authPromise = new Promise(function(resolve, reject) { | ||
authenticate(resolve, reject); | ||
@@ -167,3 +276,3 @@ }); | ||
}; | ||
auth.acquireToken(clientId, acquireTokenCallback); | ||
auth.acquireToken(clientIdWeb, acquireTokenCallback); | ||
} else { | ||
@@ -174,13 +283,20 @@ resolve(token); | ||
const acquireTokenMobile = (resolve, reject) => { | ||
var acquireTokenMobile = function acquireTokenMobile(resolve, reject) { | ||
if (!authContext) { | ||
initAuthenticationContext(constants.MOBILE); | ||
} | ||
authContext.tokenCache.readItems().then(items => { | ||
const index = items.length - 1; | ||
const token = items[index] && items[index].accessToken; | ||
authContext.tokenCache.readItems().then(function(items) { | ||
var index = items.length - 1; | ||
var token = items[index] && items[index].accessToken; | ||
if (token) { | ||
resolve(token); | ||
} else { | ||
reject(new Error('No token found')); | ||
var token = getTokenFromCache(); | ||
if (token) { | ||
resolve(token); | ||
} else { | ||
// No token found | ||
authenticateMobile(resolve, reject); | ||
// reject(new Error('No token found')); | ||
} | ||
} | ||
@@ -190,4 +306,4 @@ }); | ||
const acquireToken = cb => | ||
new Promise((resolve, reject) => { | ||
var acquireToken = function acquireToken(cb) { | ||
return new Promise(function(resolve, reject) { | ||
try { | ||
@@ -203,4 +319,5 @@ if (getPlatform() === constants.BROWSER) { | ||
}); | ||
}; | ||
const setPlatformRedirectUri = platform => { | ||
var setPlatformRedirectUri = function setPlatformRedirectUri(platform) { | ||
switch (platform.toLowerCase()) { | ||
@@ -219,7 +336,9 @@ case 'android': | ||
const isInProgress = () => storage.get(constants.IN_PROGRESS) === 'true'; | ||
var isInProgress = function isInProgress() { | ||
return storage.get(constants.IN_PROGRESS) === 'true'; | ||
}; | ||
const getCachedToken = () => { | ||
const token = storage.get(constants.TOKEN); | ||
const expiration = storage.get(constants.TOKEN_EXPIRATION); | ||
var getCachedToken = function getCachedToken() { | ||
var token = storage.get(constants.TOKEN); | ||
var expiration = storage.get(constants.TOKEN_EXPIRATION); | ||
if (expiration && parseInt(expiration, 10) > Date.now() / 1000) { | ||
@@ -234,5 +353,20 @@ // log.info('valid cached token'); | ||
const authenticateMobile = (resolve, reject) => { | ||
var acquireTokenAsyncMobile = function(resolve, reject) { | ||
authContext | ||
.acquireTokenAsync(resourceUri, clientIdNative, platformRedirectUri) | ||
.then(function(authResult) { | ||
var token = authResult.accessToken; | ||
var exp = new Date(authResult.expiresOn).getTime(); | ||
storeToken(token, exp); | ||
resolve(authResult); | ||
}, reject); | ||
}; | ||
var storeToken = function(token, exp) { | ||
storage.set(constants.IN_PROGRESS, false); | ||
storage.set(constants.TOKEN, token); | ||
storage.set(constants.TOKEN_EXPIRATION, exp); | ||
}; | ||
var authenticateMobile = function(resolve, reject) { | ||
// Check if MS ADAL cordova library is installed | ||
Microsoft.ADAL.AuthenticationSettings.setUseBroker(true).then(() => { | ||
Microsoft.ADAL.AuthenticationSettings.setUseBroker(true).then(function() { | ||
initAuthenticationContext(constants.MOBILE); | ||
@@ -242,5 +376,6 @@ setPlatformRedirectUri(getPlatform()); | ||
// This prevents an additional prompt | ||
authContext.tokenCache.readItems().then(items => { | ||
authContext.tokenCache.readItems().then(function(items) { | ||
if (items.length > 0) { | ||
authority = items[0].authority; | ||
var index = items.length - 1; | ||
authority = items[index].authority; | ||
initAuthenticationContext(constants.MOBILE); | ||
@@ -250,15 +385,37 @@ } | ||
authContext | ||
.acquireTokenSilentAsync(resourceUri, clientId, userId) | ||
.then(resolve, () => { | ||
// We require user credentials so triggers authentication dialog | ||
authContext | ||
.acquireTokenAsync(resourceUri, clientId, platformRedirectUri) | ||
.then(resolve, reject); | ||
}); | ||
}); | ||
}); | ||
.acquireTokenSilentAsync(resourceUri, clientIdNative, userId) | ||
.then( | ||
function(authResult) { | ||
var token = authResult.accessToken; | ||
var exp = new Date(authResult.expiresOn).getTime(); | ||
storeToken(token, exp); | ||
resolve(authResult); | ||
}, | ||
function() { | ||
// We require user credentials so triggers authentication dialog | ||
// acquireTokenAsyncMobile(resolve, reject); | ||
authContext | ||
.acquireTokenAsync( | ||
resourceUri, | ||
clientIdNative, | ||
platformRedirectUri | ||
) | ||
.then(function(authResult) { | ||
var token = authResult.accessToken; | ||
var exp = new Date(authResult.expiresOn).getTime(); | ||
var token = authResult.accessToken; | ||
storeToken(token, exp); | ||
resolve(authResult); | ||
}, reject); | ||
} | ||
); | ||
}, reject); | ||
}, reject); | ||
}; | ||
const authenticateBrowser = (resolve, reject) => { | ||
var authenticateBrowser = function authenticateBrowser(resolve, reject) { | ||
initAuthenticationContext(constants.BROWSER); | ||
const { response: token } = getCachedToken(); | ||
var _getCachedToken = getCachedToken(), | ||
token = _getCachedToken.response; | ||
if (!token && !isInProgress() && !localError) { | ||
@@ -270,6 +427,6 @@ storage.set(constants.IN_PROGRESS, false); | ||
auth.saveTokenFromHash(auth.getRequestInfo(window.location.hash)); | ||
resolve({ token, error: null }); | ||
resolve({ token: token, error: null }); | ||
} | ||
}; | ||
const authenticate = (resolve, reject) => { | ||
var authenticate = function authenticate(resolve, reject) { | ||
try { | ||
@@ -287,3 +444,3 @@ // Check platformId | ||
const decodeTokenPayload = token => { | ||
var decodeTokenPayload = function decodeTokenPayload(token) { | ||
try { | ||
@@ -297,6 +454,11 @@ return jwtDecode(token); | ||
const getUser = () => { | ||
var getUser = function getUser() { | ||
if (!Object.keys(user).length) { | ||
return acquireToken(getUser).then(token => { | ||
var { family_name, given_name, name, upn } = decodeTokenPayload(token); | ||
return acquireToken(getUser).then(function(token) { | ||
var _decodeTokenPayload = decodeTokenPayload(token), | ||
family_name = _decodeTokenPayload.family_name, | ||
given_name = _decodeTokenPayload.given_name, | ||
name = _decodeTokenPayload.name, | ||
upn = _decodeTokenPayload.upn; | ||
if (!upn) { | ||
@@ -311,11 +473,29 @@ upn = decodeTokenPayload(token).email; | ||
}; | ||
var isValidToken = function(token) { | ||
if (!token) { | ||
return false; | ||
} | ||
var expiration = storage.get(constants.TOKEN_EXPIRATION); | ||
return expiration && parseInt(expiration, 10) > Date.now() / 1000; | ||
}; | ||
const getTokenFromCache = () => { | ||
return storage.get(constants.TOKEN); | ||
var getTokenFromCache = function getTokenFromCache() { | ||
var token = storage.get(constants.TOKEN); | ||
if (!isValidToken(token)) { | ||
storage.remove(constants.TOKEN); | ||
storage.remove(constants.TOKEN_EXPIRATION); | ||
return null; | ||
} | ||
return token; | ||
}; | ||
const getUserFromCache = () => { | ||
const token = storage.get(constants.TOKEN); | ||
if (token) { | ||
var { family_name, given_name, name, upn } = decodeTokenPayload(token); | ||
var getUserFromCache = function getUserFromCache() { | ||
var token = storage.get(constants.TOKEN); | ||
if (isValidToken(token)) { | ||
var _decodeTokenPayload2 = decodeTokenPayload(token), | ||
family_name = _decodeTokenPayload2.family_name, | ||
given_name = _decodeTokenPayload2.given_name, | ||
name = _decodeTokenPayload2.name, | ||
upn = _decodeTokenPayload2.upn; | ||
if (!upn) { | ||
@@ -329,13 +509,20 @@ upn = decodeTokenPayload(token).email; | ||
const createUser = (familyName, givenName, name, upn) => { | ||
return { familyName, givenName, name, upn }; | ||
var createUser = function createUser(familyName, givenName, name, upn) { | ||
return { | ||
familyName: familyName, | ||
givenName: givenName, | ||
name: name, | ||
upn: upn | ||
}; | ||
}; | ||
const getUrlParameters = hash => { | ||
var getUrlParameters = function getUrlParameters(hash) { | ||
function deserializeHash(query) { | ||
var match; | ||
const pl = /\+/g; // Regex for replacing addition symbol with a space | ||
const search = /([^&=]+)=?([^&]*)/g; | ||
const decode = s => decodeURIComponent(s.replace(pl, ' ')); | ||
const parameters = {}; | ||
var pl = /\+/g; // Regex for replacing addition symbol with a space | ||
var search = /([^&=]+)=?([^&]*)/g; | ||
var decode = function(s) { | ||
return decodeURIComponent(s.replace(pl, ' ')); | ||
}; | ||
var parameters = {}; | ||
match = search.exec(query); | ||
@@ -363,9 +550,15 @@ while (match) { | ||
.split('&') | ||
.reduce((params, item) => { | ||
const [key, value] = item.split('='); | ||
.reduce(function(params, item) { | ||
var _item$split = item.split('='), | ||
_item$split2 = _slicedToArray(_item$split, 2), | ||
key = _item$split2[0], | ||
value = _item$split2[1]; | ||
if (!params.hasOwnProperty(key)) { | ||
// eslint-disable-line no-prototype-builtins | ||
return Object.assign({}, params, { | ||
[key]: decodeURIComponent(value) | ||
}); | ||
return Object.assign( | ||
{}, | ||
params, | ||
_defineProperty({}, key, decodeURIComponent(value)) | ||
); | ||
} | ||
@@ -382,19 +575,20 @@ return params; | ||
const handleWindowCallback = () => { | ||
var handleWindowCallback = function handleWindowCallback() { | ||
//get token from parameter and push to session storage | ||
const parameters = getUrlParameters(); | ||
const getParameter = key => parameters[key]; | ||
const token = getParameter('id_token'); | ||
const state = getParameter('state'); | ||
var parameters = getUrlParameters(); | ||
var getParameter = function getParameter(key) { | ||
return parameters[key]; | ||
}; | ||
var token = getParameter('id_token'); | ||
var state = getParameter('state'); | ||
var validToken = true; | ||
if (token) { | ||
var { | ||
nonce, | ||
aud, | ||
exp, | ||
family_name, | ||
given_name, | ||
name, | ||
upn | ||
} = decodeTokenPayload(token); | ||
var _decodeTokenPayload3 = decodeTokenPayload(token), | ||
nonce = _decodeTokenPayload3.nonce, | ||
aud = _decodeTokenPayload3.aud, | ||
exp = _decodeTokenPayload3.exp, | ||
family_name = _decodeTokenPayload3.family_name, | ||
given_name = _decodeTokenPayload3.given_name, | ||
name = _decodeTokenPayload3.name, | ||
upn = _decodeTokenPayload3.upn; | ||
@@ -410,9 +604,9 @@ if (validToken) { | ||
return { | ||
signIn, | ||
signOut, | ||
acquireToken, | ||
initialize, | ||
getUser, | ||
getUserFromCache, | ||
getTokenFromCache | ||
signIn: signIn, | ||
signOut: signOut, | ||
acquireToken: acquireToken, | ||
initialize: initialize, | ||
getUser: getUser, | ||
getUserFromCache: getUserFromCache, | ||
getTokenFromCache: getTokenFromCache | ||
}; | ||
@@ -419,0 +613,0 @@ })(); |
@@ -81,2 +81,5 @@ 'use strict'; | ||
var userId = null; | ||
var loginPolicy = null; | ||
var editProfilePolicy = null; | ||
var changePasswordPolicy = null; | ||
var authenticationResult = null; | ||
@@ -101,2 +104,5 @@ var auth = null; | ||
loginResource = config.loginResource; | ||
loginPolicy = config.loginPolicy; | ||
editProfilePolicy = config.editProfilePolicy; | ||
changePasswordPolicy = config.changePasswordPolicy; | ||
}; | ||
@@ -106,3 +112,3 @@ | ||
if (platform === constants.BROWSER) { | ||
var _config = { | ||
let config = { | ||
tenant: tenant, | ||
@@ -113,2 +119,17 @@ clientId: clientIdWeb, | ||
}; | ||
if (!!loginPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(loginPolicy) | ||
}); | ||
} | ||
if (!!editProfilePolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(editProfilePolicy) | ||
}); | ||
} | ||
if (!!changePasswordPolicy) { | ||
config = Object.assign(config, { | ||
extraQueryParameter: encodeURIComponent(changePasswordPolicy) | ||
}); | ||
} | ||
auth = new AuthenticationContext(_config); | ||
@@ -115,0 +136,0 @@ } else { |
{ | ||
"name": "authentication-adal-pkg", | ||
"version": "1.0.31", | ||
"version": "1.0.32", | ||
"description": "An authentication SDK based on MS ADAL ", | ||
@@ -9,3 +9,10 @@ "main": "lib/index.js", | ||
}, | ||
"keywords": ["authentication", "adal"], | ||
"keywords": [ | ||
"authentication", | ||
"adal", | ||
"SSO", | ||
"Azure B2B", | ||
"Azure B2C", | ||
"Microsoft Authenticator" | ||
], | ||
"author": "Donovan De Smedt", | ||
@@ -18,2 +25,2 @@ "license": "ISC", | ||
} | ||
} | ||
} |
@@ -1,13 +0,10 @@ | ||
Authentication-pkg | ||
=================== | ||
# Authentication-pkg | ||
Algemeen | ||
--------- | ||
## General | ||
Deze package maakt voor de authenticatie gebruik van [*adal-angular*](https://github.com/AzureAD/azure-activedirectory-library-for-js) en [*adal-cordova*](https://github.com/AzureAD/azure-activedirectory-library-for-cordova). Deze biedt ondersteuning | ||
aan zowel browser als native (iOS 10 en hoger, Android 4.0.3 en hoger, UWP 10). | ||
This package implements authentication for web and native (>= iOS 10, >= Android 4.0.3 & UWP 10), included SSO with Microsoft Authenticator. | ||
This package uses authentication from [_adal-angular_](https://github.com/AzureAD/azure-activedirectory-library-for-js) and [_adal-cordova_](https://github.com/AzureAD/azure-activedirectory-library-for-cordova) | ||
Installatie | ||
-------- | ||
## Install | ||
@@ -18,4 +15,3 @@ ``` | ||
Gebruik | ||
--------------- | ||
## Usage | ||
@@ -26,3 +22,2 @@ ``` | ||
## API | ||
@@ -32,21 +27,25 @@ | ||
#### Methodes | ||
#### Methods | ||
`initialize(config): void` | ||
Het config object kan volgende zaken bevatten: | ||
- tenant*** | ||
- clientId*** | ||
- redirectUriWeb* | ||
- redirectUriAndroid (en/of) redirectUriIos** | ||
- authority** | ||
- resourceUri** | ||
- userId** | ||
Config is an object that should contain following properties: | ||
- tenant\*\*\* | ||
- clientId\*\*\* | ||
- redirectUriWeb\* | ||
- redirectUriAndroid (and/or) redirectUriIos** (and/or) redirectUriWindows** | ||
- authority\*\* | ||
- resourceUri\*\* | ||
- loginPolicy | ||
- editProfilePolicy | ||
- changePasswordPolicy | ||
- userId\*\* | ||
- loginResource | ||
`*verplicht voor authenticatie web` | ||
`*required for authentication web` | ||
`**verplicht voor authenticatie native` | ||
`**required for authentication native` | ||
`***verplicht voor zowel authenticatie web & native` | ||
`***required for authentication web & native` | ||
@@ -53,0 +52,0 @@ `signIn() Promise<{token, error}>` |
76200
2323
60