Initial Commit
This commit is contained in:
155
assets/js/sso.js
Normal file
155
assets/js/sso.js
Normal file
@ -0,0 +1,155 @@
|
||||
/* 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"> </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));
|
Reference in New Issue
Block a user