Skip to content

tweaking in get refresh token logic for "lib" . #97

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Nov 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 31 additions & 24 deletions src/connector-wrapper.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
const {createFrame} = require('./iframe')
const {getToken} = require ('./token')
const { createFrame } = require('./iframe')
const { getToken, isTokenExpired } = require('./token')

let iframe = null
let loading = null
let url = ''
let mock = false
let token = ''

export function configureConnector({connectorUrl, frameId, mockMode, mockToken}) {
export function configureConnector({ connectorUrl, frameId, mockMode, mockToken }) {
if (mockMode) {
mock = true
token = mockToken
} else if (iframe) {
console.warn('tc-accounts connector can only be configured once, this request has been ignored.')
} else {
iframe = createFrame(frameId, connectorUrl)
url = connectorUrl
loading = new Promise( (resolve) => {
iframe.onload = function() {
url = connectorUrl

loading = new Promise((resolve) => {
iframe.onload = function () {
loading = null
resolve()
}
})
}
}

const proxyCall = function() {
const proxyCall = function () {
if (mock) {
throw new Error('connector is running in mock mode. This method (proxyCall) should not be invoked.')
}
Expand All @@ -36,26 +36,33 @@ const proxyCall = function() {
}

function request() {
/*return new Promise( (resolve, reject) => {
function receiveMessage(e) {
const safeFormat = e.data.type === SUCCESS || e.data.type === FAILURE
const token = getToken('v3jwt')
// 65 is offset in seconds, before expiry
if (token && !isTokenExpired(token, 65)) {
return new Promise((resolve, reject) => {
token ? resolve({ token: token }) : reject("v3jwt cookie not found")
})
} else {
return new Promise((resolve, reject) => {
function receiveMessage(e) {
const safeFormat = e.data.type === "SUCCESS" || e.data.type === "FAILURE"
if (safeFormat) {
window.removeEventListener('message', receiveMessage)
if (e.data.type === SUCCESS) resolve(e.data)
if (e.data.type === FAILURE) reject(e.error)
window.removeEventListener('message', receiveMessage)
if (e.data.type === "SUCCESS") {
token ? resolve({ token: token }) : reject("v3jwt cookie not found")
} else {
reject("unable to get refesh token")
}
}
}
}

window.addEventListener('message', receiveMessage)
window.addEventListener('message', receiveMessage)

const payload = Object.assign({}, { type: REQUEST }, params)
const payload = { type: "REFRESH_TOKEN" }

iframe.contentWindow.postMessage(payload, url)
}) */
return new Promise((resolve, reject) => {
const token = getToken('v3jwt')
token ? resolve({ token: token }) : reject("v3jwt cookie not found")
})
iframe.contentWindow.postMessage(payload, url)
})
}
}

if (loading) {
Expand All @@ -75,7 +82,7 @@ export function getFreshToken() {
}

return proxyCall()
.then( data => data.token )
.then(data => data.token)
}


Expand Down
91 changes: 85 additions & 6 deletions web-assets/js/setupAuth0WithRedirect.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@ const authSetup = function () {
? 'localstorage'
: 'memory',
useRefreshTokens: useRefreshTokens
}).then(_init);
}).then(_init).catch(function (e) {
logger("Error occurred in initializing auth0 object: ", e);
window.location.reload();
});
window.addEventListener("message", receiveMessage, false);
};

Expand All @@ -90,8 +93,8 @@ const authSetup = function () {
} else if (!isLoggedIn() && returnAppUrl) {
login();
} else if (qs['error'] && qs['state']) {
logger("Error in executing callback(): ", qs['error_description']);
showLoginError(qs['error_description'], appUrl);
logger("Error in executing callback(): ", qs['error_description']);
showLoginError(qs['error_description'], appUrl);
} else {
logger("User already logged in", true);
postLogin();
Expand Down Expand Up @@ -218,7 +221,7 @@ const authSetup = function () {
}

const isLoggedIn = function () {
var token = getCookie(tcJWTCookie);
var token = getCookie(v3JWTCookie);
return token ? !isTokenExpired(token) : false;
};

Expand Down Expand Up @@ -410,8 +413,8 @@ const authSetup = function () {
}

/**
* will receive message from iframe
*/
* will receive message from iframe
*/
function receiveMessage(e) {
logger("received Event:", e);
if (e.data && e.data.type && e.origin) {
Expand All @@ -420,7 +423,83 @@ const authSetup = function () {
logout();
}
}
if (e.data.type === "REFRESH_TOKEN") {
const token = getCookie(v3JWTCookie);
const failed = {
type: "FAILURE"
};
const success = {
type: "SUCCESS"
};

const informIt = function (payload) {
e.source.postMessage(payload, e.origin);
}
try {
const storeRefreshedToken = function (aObj) {
aObj.getIdTokenClaims().then(function (claims) {
idToken = claims.__raw;
let userActive = false;
Object.keys(claims).findIndex(function (key) {
if (key.includes('active')) {
userActive = claims[key];
return true;
}
return false;
});
if (userActive) {
let tcsso = '';
Object.keys(claims).findIndex(function (key) {
if (key.includes(tcSSOCookie)) {
tcsso = claims[key];
return true;
}
return false;
});
logger('Storing refreshed token...', true);
setCookie(tcJWTCookie, idToken, cookieExpireIn);
setCookie(v3JWTCookie, idToken, cookieExpireIn);
setCookie(tcSSOCookie, tcsso, cookieExpireIn);
informIt(success);
} else {
logger("Refeshed token - user active ? ", userActive);
informIt(failed);
}
}).catch(function (err) {
logger("Refeshed token - error in fetching token from auth0: ", err);
informIt(failed);
});
};

const getToken = function (aObj) {
aObj.getTokenSilently({ timeoutInSeconds: 60 }).then(function (token) {
storeRefreshedToken(aObj);
}).catch(function (err) {
logger("receiveMessage: Error in refreshing token through iframe:", err)
informIt(failed);
});

};

// main execution start here
if (token && !isTokenExpired(token)) {
informIt(success);
} else if (!token) {
informIt(failed);
} else {
if (auth0) {
getToken(auth0);
} else {
informIt(failed);
}
}
} catch (e) {
logger("error occured in iframe handler:", e.message);
informIt(failed);
}
} else {
// do nothing
}
}

function changeWindowMessage() {
Expand Down