<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>Lithium Authentication Redirect</title>
	<script type="text/javascript">
		const environments = {
			"stage": {
				"oktaOrgURL": "https://auth-test.sas.com",
				"lithiumHostnames": [
					"communities-lithiumstage.sas.com",
					"community-stage.jmp.com"
				]
			},
			"production": {
				"oktaOrgURL": "https://auth.sas.com",
				"lithiumHostnames": [
					"communities.sas.com",
					"community.jmp.com"
				]
			}
		};
		const lithiumAuthenticationPath = "/plugins/common/feature/saml/doauth/post";
		const oktaLoginCheckEndpoint = "/api/v1/users/me";
		const defaultRedirect = "https://www.sas.com";

		const environment = environments[getQueryStringParameterValue("environment")];
		const referer = getQueryStringParameterValue("referer");

		try {
			if (!environment) {
				throw new Error("Invalid environment");
			}

			const refererHost = (new URL(referer)).host.toLowerCase().trim();
			if (!environment.lithiumHostnames.includes(refererHost)) {
				throw new Error("Invalid referer");
			}

			if (isUserLoggedIn(environment.oktaOrgURL)) {
				location.href = "https://" + refererHost + lithiumAuthenticationPath + "?referer=" + referer;
			} else {
				location.href = referer;
			}
		} catch (error) {
			console.log(error);
			location.href = defaultRedirect;
		}

		function isUserLoggedIn(oktaOrgURL) {
			const xhr = new XMLHttpRequest();
			xhr.withCredentials = true;
			xhr.open("GET", oktaOrgURL + oktaLoginCheckEndpoint, false);
			xhr.send(null);
			return xhr.status === 200
		}

		function getQueryStringParameterValue(parameterName) {
			const query = window.location.search.substring(1);
			const vars = query.split('&');
			for (let i = 0; i < vars.length; i++) {
				const pair = vars[i].split('=');
				if (decodeURIComponent(pair[0]) === parameterName) {
					return decodeURIComponent(pair[1]);
				}
			}
		}
	</script>
</head>
</html>
