Files
iTop/datamodels/2.x/itop-oauth-client/assets/js/oauth_connect.js

100 lines
2.8 KiB
JavaScript

/**
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
// Function used to open OAuth popup
var oWindowObjectReference = null;
var sPreviousUrl = null;
var oListener = null;
var sOAuthAjaxURI = null;
var sOAuthObjClass = null;
var sOAuthObjKey = null;
var sOAuthReturnURI = null;
const oOnOauthSuccess = function (event) {
if (oListener !== null) {
clearInterval(oListener);
}
$.post(
sOAuthAjaxURI,
{
operation: 'GetDisplayAuthenticationResults',
class: sOAuthObjClass,
id: sOAuthObjKey,
redirect_url: event.data
},
function (oData) {
window.location = oData.data;
}
);
}
const oOpenSignInWindow = function (url, name) {
// Remove any existing event listener
window.removeEventListener('message', oOnOauthSuccess);
if (oListener !== null) {
clearInterval(oListener);
}
// Window features
const sWindowFeatures = 'toolbar=no, menubar=no, width=600, height=700, top=100, left=100';
if (oWindowObjectReference === null || oWindowObjectReference.closed) {
/* If the pointer to the window object in memory does not exist
or if such pointer exists but the window was closed */
oWindowObjectReference = window.open(url, name, sWindowFeatures);
} else if (sPreviousUrl !== url) {
/* If the resource to load is different,
then we load it in the already opened secondary window, and then
we bring such window back on top/in front of its parent window. */
oWindowObjectReference = window.open(url, name, sWindowFeatures);
oWindowObjectReference.focus();
} else {
/* Else the window reference must exist and the window
is not closed; therefore, we can bring it back on top of any other
window with the focus() method. There would be no need to re-create
the window or to reload the referenced resource. */
oWindowObjectReference.focus();
}
/* Let know every second our child window that we're waiting for it to complete,
once we reach our landing page, it'll send us a reply
*/
oListener = window.setInterval(function () {
if (oWindowObjectReference.closed) {
clearInterval(oListener);
}
oWindowObjectReference.postMessage('anyone', sOAuthReturnURI);
}, 1000);
/* Once we receive a response, transmit it to the server to get authenticate and display
results
*/
window.addEventListener('message', oOnOauthSuccess, false);
// Assign the previous URL
sPreviousUrl = url;
};
const OAuthConnect = function(sClass, sId, sAjaxUri) {
sOAuthAjaxURI = sAjaxUri;
sOAuthObjClass = sClass;
sOAuthObjKey = sId;
$.post(
sOAuthAjaxURI,
{
operation: 'GetOAuthAuthorizationUrl',
class: sOAuthObjClass,
id: sOAuthObjKey
},
function (oData) {
if (oData.status === 'success') {
oOpenSignInWindow(oData.data.authorization_url, 'OAuth authorization')
} else {
CombodoModal.OpenErrorModal(oData.error_description);
}
}
);
}