Files
2024-11-30 18:24:12 -07:00

156 lines
3.6 KiB
JavaScript

/* global wu_create_cookie, wu_sso_config, wu_read_cookie, detectIncognito */
(function(o) {
window.wu = window.wu || {};
window.is_incognito = false;
window.wu.sso_denied = function() {
wu_create_cookie('wu_sso_denied', 1, o.expiration_in_minutes);
}; // end if;
window.wu.check_for_incognito_window = function() {
detectIncognito(results => window.is_incognito = results.isPrivate);
} // end is_incognito_window;
window.wu.check_for_incognito_window();
window.addEventListener('error', wu.sso_denied, true);
const w = document.createElement('script');
w.type = 'text/javascript';
w.async = true;
w.defer = true;
w.src = o.server_url + '?_jsonp=1';
const denied = wu_read_cookie('wu_sso_denied');
document.head.insertAdjacentHTML('beforeend', `
<style>
@keyframes fade_in {
from { opacity: 0; }
to { opacity: 1; }
}
body.sso-loading {
overflow: hidden;
}
body.sso-loading .sso-overlay {
background: rgba(0, 0, 0, 0.7);
width: 100vw;
height: 100vh;
position: absolute;
top: 0;
-webkit-animation: fade_in 300ms;
-moz-animation: fade_in 300ms;
-ms-animation: fade_in 300ms;
-o-animation: fade_in 300ms;
animation: fade_in 300ms;
}
body.sso-loading .sso-overlay::before {
content: "";
display: block;
width: 20px;
height: 20px;
position: absolute;
left: 50%;
top: 50%;
margin: -10px 0 0 -10px;
transform: translateZ(0);
background: transparent url(${ o.img_folder }/spinner.gif) no-repeat center center;
background-image: url(${ o.img_folder }/loader.svg);
background-size: 20px 20px;
}
</style>
`);
if (! o.is_user_logged_in && ! denied) {
const s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(w, s);
document.body.insertAdjacentHTML('beforeend', '<div class="sso-overlay">&nbsp;</div>');
} // end if;
window.wu.sso = function(payload) {
const encodedLocation = encodeURIComponent(window.location.href);
if (payload.code === 200) {
if (o.use_overlay) {
document.body.classList.add('sso-loading');
} // end if;
/**
* In case we're dealing with http (without ssl),
* we force a redirect to bypass browser cookie
* limitations.
*
* Otherwise, on the else block,
* we redirect with the verification code attached,
* to perform a regular SSO flow.
*/
if (payload.verify === 'must-redirect') {
window.location.replace(`${ o.server_url }?return_url=${ encodedLocation }`);
} else {
window.location.replace(`${ o.server_url }?sso_verify=${ payload.verify }&return_url=${ encodedLocation }`);
} // end if;
} else {
/**
* If we are in a incognito window,
* we give it another try with a full redirect,
* as chrome settings might be blocking
* cookies from being sent anyways.
*/
if (window.is_incognito) {
if (o.use_overlay) {
document.body.classList.add('sso-loading');
} // end if;
window.location.replace(`${o.server_url}?return_url=${ encodedLocation }`);
return;
} // end if;
window.wu.sso_denied();
document.body.classList.remove('sso-loading');
} // end if;
}; // end sso;
(function clean_up_query_args() {
if (window.history.replaceState) {
window.history.replaceState(null, null, o.filtered_url + window.location.hash);
} // end if;
}());
}(wu_sso_config));