HTTP/1.1 200 OK
Server: BlueServer/4.8.6.3
Date: Thu, 21 Nov 2024 10:21:55 GMT
P3P: CP="CAO COR CURa ADMa DEVa OUR IND ONL COM DEM PRE"
Access-Control-Allow-Origin: *
Set-Cookie: session=0e3a78ab5f17456f5315301e3ee35ed2; path=/
Connection: Close
Content-Type: text/html; charset=UTF-8
Content-Length: 14961
Cache-Control: no-cache, no-store
X-Frame-Options: SAMEORIGIN
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Blue Iris Login</title>
<script type="text/javascript">
var login_version = "19";
var bi_version = "4.8.6.3";
var combined_version = login_version + "-" + bi_version;
</script>
<script type="text/javascript">
window.onerror = function (msg, url, line, charIdx)
{
try
{
var versionStr = "unknown";
if (typeof login_version !== "undefined")
versionStr = login_version;
var biVersionStr = "unknown";
if (typeof bi_version !== "undefined")
biVersionStr = bi_version;
url = url.replace(/\/\/.*?\//, '//censored_hostname/');
alert("An unexpected error has occurred in Blue Iris Login (v " + versionStr + " / " + biVersionStr + "). If you wish to report the error, please SCREENSHOT the browser now.\n\n" + msg + "\nat " + url + " [" + line + ":" + charIdx + "]\n" + navigator.userAgent);
}
catch (ex)
{
alert(ex);
}
};
</script>
<style type="text/css">
body
{
font-family: sans-serif;
background: #212325;
}
#loginLoading
{
display: none;
text-shadow: 0 0 10px rgba(0,0,0,0.3);
position: absolute;
text-align: center;
top: 40%;
width: 100%;
color: #FFFFFF;
}
#loginLoading h1
{
margin: 0 0 20px 0;
font-size: 32px;
}
#loginLoading div
{
font-size: 20px;
}
#login
{
display: none;
}
.checkboxWrapper
{
max-width: 488px;
}
</style>
</head>
<body>
<div id="loginLoading">
<h1>Jokevideo</h1>
<div>Loading login page...</div>
</div>
<div id="login">
<h1>Jokevideo</h1>
<input id="txtUn" type="text" class="text" placeholder="Username" autocapitalize="off" autocorrect="off" />
<input id="txtPw" type="password" class="text" placeholder="Password" onkeypress="return pwKeypress(this, event);" autocapitalize="off" autocorrect="off" />
<div class="checkboxWrapper">
<input id="cbLoginAutomatically" type="checkbox" class="checkbox" onchange="cbLoginAutomaticallyClicked();" /><label for="cbLoginAutomatically" id="lblLoginAutomatically"><span class="ui"></span>Log in automatically:</label>
</div>
<div id="status_wrapper_upper"></div>
<input id="btnLogin" type="button" class="btn" value="Log in" onclick="login();" />
<div id="status_wrapper_lower"><div id="status"></div></div>
</div>
<script type="text/javascript">
var loadingOpacity = 0;
function IncreaseLoadingOpacity()
{
loadingOpacity += 0.05;
if (loadingOpacity > 1)
loadingOpacity = 1;
var ele = document.getElementById('loginLoading');
ele.style.display = "block";
ele.style.opacity = loadingOpacity;
if (loadingOpacity < 1)
showLoadingMessageTimeout = setTimeout(IncreaseLoadingOpacity, 33);
}
var showLoadingMessageTimeout = setTimeout(IncreaseLoadingOpacity, 67);
document.write('<link href="applet/loginStyles.css?v=' + combined_version + '" rel="stylesheet" />'
+ '<script src="applet/loginScripts.js?v=' + combined_version + '"><\/script>');
</script>
<script type="text/javascript">
/* eslint no-extra-parens: 0 */
var autologin_timeout_1 = null;
var autologin_timeout_2 = null;
var existingSession = "0e3a78ab5f17456f5315301e3ee35ed2";
var isStoredDataLoaded = false;
var windowUnloading = false;
var cookiesEnabled;
var localStorageEnabled;
/**
* Changes the current URL by removing the specified query string parameter(s) from it.
* @returns {String} Returns null if successful, otherwise returns the new URL if changing the history state failed.
*/
function NavRemoveUrlParams()
{
var url = RemoveUrlParams.apply(this, arguments);
try { history.replaceState(history.state, "", url); return null; } catch (ex) { return url; }
}
function RemoveUrlParams()
{
var s = location.search;
for (var i = 0; i < arguments.length; i++)
{
var param = arguments[i];
var rx = new RegExp('(&|\\?)' + param + '=[^&?#%]+', 'gi');
s = s.replace(rx, "");
while (s.indexOf("&") === 0)
{
if (s.length > 1)
s = s.substr(1);
else
s = "";
}
if (s.length > 0 && s.indexOf("?") === -1)
s = "?" + s;
}
return location.origin + location.pathname + s + location.hash;
}
NavRemoveUrlParams("session");
$(function ()
{
cookiesEnabled = testCookieFunctionality();
localStorageEnabled = isLocalStorageEnabled();
var skipAutoLogin = GetPersistedValue("bi_override_disable_auto_login_once") === "1";
if (UrlParameters.Get("autologin") === "0")
{
skipAutoLogin = true;
var url = NavRemoveUrlParams("session", "autologin");
if (url)
{
SetPersistedValue("bi_override_disable_auto_login_once", "1");
location.href = url;
return;
}
}
if (skipAutoLogin)
{
SetPersistedValue("bi_override_disable_auto_login_once", "0");
}
clearTimeout(showLoadingMessageTimeout);
$("#loginLoading").hide();
$("#login").show();
if (typeof window.JSON === 'undefined')
{
$("#login").html("<div>Your web browser is too old to use the Blue Iris web interface properly.<br><br>To proceed with this browser, disable the \"Secure only\" requirement within Blue Iris's web server settings.</div>");
$("#login").css("color", "#EEEEEE").css("margin", "8px");
return;
}
if (!existingSession || (existingSession.length === 11 && existingSession.startsWith("%") && existingSession.endsWith("%") && existingSession.indexOf("SESSION") === 2))
{
$("#login").html("<div>Session data was not provided as expected. This login page only works when served by Blue Iris 4.8.2.3 or newer.</div>");
$("#login").css("color", "#EEEEEE").css("margin", "8px");
return;
}
if (!localStorageEnabled)
$("#cbLoginAutomatically").parent().text("Note: Local Storage is disabled in your browser, so credentials can not be saved.").css("color", "#EEEEEE");
SetupLoginContextMenu();
SetStatus();
$(window).resize(resized);
resized();
window.onbeforeunload = function ()
{
windowUnloading = true;
cbLoginAutomaticallyClicked();
return;
};
// Handle automatic login
if (GetPersistedValue("bi_rememberMe") === "1")
{
$("#cbLoginAutomatically").attr('checked', 'checked');
$("#txtUn").val(Base64.decode(GetPersistedValue("bi_username")));
$("#txtPw").val(Base64.decode(GetPersistedValue("bi_password")));
if (!skipAutoLogin)
{
if ($("#txtUn").val() !== "" && $("#txtPw").val() !== "")
{
if (GetAutoLoginInstantly())
{
if ($("#cbLoginAutomatically").is(":checked"))
login();
}
else
{
$("#btnLogin").val("Logging in, in 2 seconds");
autologin_timeout_1 = setTimeout(function () { $("#btnLogin").val("Logging in, in 1 second"); }, 1000);
autologin_timeout_2 = setTimeout(function ()
{
if ($("#cbLoginAutomatically").is(":checked"))
login();
}, 2000);
}
}
}
}
else
{
$("#cbLoginAutomatically").removeAttr('checked');
SetPersistedValue("bi_username", "");
SetPersistedValue("bi_password", "");
}
// Check for existing session
ExecJSON({ cmd: "login", session: existingSession }, function (response)
{
if (response.result === "fail")
{
// No existing session.
var anonymousAvailable = response.data && response.data["auth-exempt"];
if (anonymousAvailable)
{
// Attempt Anonymous login, to get the permission level.
var myResponse = md5("Anonymous:" + response.session + ":");
ExecJSON({ cmd: "login", session: response.session, response: myResponse }, function (response)
{
if (response.result === "success")
{
existingSession = response.session;
SetStatus("An anonymous " + (response.data.admin ? "administrator" : "user") + ' session is available. <a href="javascript:LeaveLoginPage()">Click here to use it.</a>');
}
},
function (jqXHR, textStatus, errorThrown)
{
HandleError("Unable to contact Blue Iris server");
});
}
}
else if (response.result === "success")
{
existingSession = response.session;
SetStatus("An existing " + (response.data.admin ? "administrator" : "user") + ' session is available. <a href="javascript:LeaveLoginPage()">Click here to use it.</a>');
}
},
function (jqXHR, textStatus, errorThrown)
{
HandleError("Unable to contact Blue Iris server");
});
// Set focus on first empty field
if (!$("#txtUn").val())
$("#txtUn").get(0).focus();
else if (!$("#txtPw").val())
$("#txtPw").get(0).focus();
else
$("#btnLogin").get(0).focus();
isStoredDataLoaded = true;
});
function login()
{
cbLoginAutomaticallyClicked();
$("#btnLogin").val("Logging in ...");
SetStatus();
ExecJSON({ cmd: "login" }, function (response)
{
var myResponse = md5($("#txtUn").val() + ":" + response.session + ":" + $("#txtPw").val());
ExecJSON({ cmd: "login", session: response.session, response: myResponse }, function (response)
{
if (response.result === "success")
{
$("#btnLogin").attr("disabled", "disabled").val("Redirecting...");
existingSession = response.session;
LeaveLoginPage();
}
else
{
$("#cbLoginAutomatically").removeAttr('checked');
SetPersistedValue("bi_rememberMe", "0");
SetPersistedValue("bi_username", "");
SetPersistedValue("bi_password", "");
$("#btnLogin").val("Log in");
HandleError(response.data ? response.data.reason : "Login failed but Blue Iris did not provide a reason.");
}
},
function (jqXHR, textStatus, errorThrown)
{
HandleError("Unable to contact Blue Iris server");
$("#btnLogin").val("Log in");
});
},
function (jqXHR, textStatus, errorThrown)
{
HandleError("Unable to contact Blue Iris server");
$("#btnLogin").val("Log in");
});
}
function LeaveLoginPage()
{
var page = UrlParameters.Get("page");
if (page === "")
page = "/";
page = page.replace(/&session=[^&?#%]+/gi, '');
page = page.replace(/\?session=[^&?#%]+/gi, '?');
page += (page.indexOf("?") < 0 ? "?" : "&") + "session=" + existingSession;
if (cookiesEnabled)
$.cookie("session", existingSession, { path: "/" });
location.href = page + location.hash;
}
function cancelAutoLogin()
{
if (autologin_timeout_1 !== null)
{
clearTimeout(autologin_timeout_1);
autologin_timeout_1 = null;
}
if (autologin_timeout_2 !== null)
{
clearTimeout(autologin_timeout_2);
autologin_timeout_2 = null;
}
$("#btnLogin").val(windowUnloading ? "Redirecting..." : "Log in");
}
function cbLoginAutomaticallyClicked()
{
cancelAutoLogin();
if (!isStoredDataLoaded)
return;
var isChecked = $("#cbLoginAutomatically").is(":checked");
SetPersistedValue("bi_rememberMe", isChecked ? "1" : "0");
SetPersistedValue("bi_username", isChecked ? Base64.encode($("#txtUn").val()) : "");
SetPersistedValue("bi_password", isChecked ? Base64.encode($("#txtPw").val()) : "");
}
function GetPersistedValue(key)
{
var value;
if (localStorageEnabled)
value = localStorage.getItem(key);
if (!value)
value = "";
return value;
}
function SetPersistedValue(key, value)
{
if (localStorageEnabled)
return localStorage.setItem(key, value);
}
function pwKeypress(ele, e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (typeof e !== "undefined" && e) keycode = e.which;
else return true;
if (keycode === 13)
{
login();
return false;
}
else
return true;
}
function resized()
{
if ($("#status").is(":visible"))
{
$("#status").hide();
$("#status").css("max-width", $("#login").width() + "px");
$("#status").show();
}
$('#login').css({ position: 'absolute', left: ($(window).width() - $('#login').outerWidth()) / 2, top: ($(window).height() - $('#login').outerHeight()) / 2 });
$("#status").css("max-width", $("#login").width() + "px");
var heightTotal = 0;
$("#login").children().each(function (idx, ele)
{
heightTotal += $(ele).outerHeight(true);
});
if (heightTotal > $(window).height())
{
if ($("#status").parent().attr("id") !== "status_wrapper_upper")
$("#status_wrapper_upper").append($("#status"));
}
else
{
if ($("#status").parent().attr("id") !== "status_wrapper_lower")
$("#status_wrapper_lower").append($("#status"));
}
$("#lblLoginAutomatically").parent().css("padding-left", (($('#login').outerWidth() - $("#lblLoginAutomatically").outerWidth(true)) / 2) + "px");
}
function HandleError(error)
{
SetStatus(error, "#FF6262");
}
function SetStatus(html, color)
{
if (typeof html === "undefined" || html === null || html === "")
{
html = "";
$("#status").hide();
}
else
$("#status").show();
if (typeof color === "undefined" || color === null || color === "")
color = "#FFFFFF";
$("#status").html(html);
$("#status").css("color", color);
resized();
}
function GetAutoLoginInstantly()
{
return GetPersistedValue("bi_autoLoginInstant") === "1";
}
function GetPreferredContextMenuTrigger()
{
return GetPersistedValue("ui3_contextMenus_longPress") === "1" ? "longpress" : "right";
}
function SetupLoginContextMenu()
{
var onTriggerContextMenu = function (e)
{
if (GetAutoLoginInstantly())
$("#autoLoginNoDelay").text("Auto Login: Instant (click to change)");
else
$("#autoLoginNoDelay").text("Auto Login: Delayed (click to change)");
return true;
};
var onContextMenuAction = function ()
{
if (this.data.alias === "autoLoginNoDelay")
SetPersistedValue("bi_autoLoginInstant", GetAutoLoginInstantly() ? "0" : "1");
};
var menuOptions =
{
alias: "cmroot_login", width: "300px", items:
[
{ text: '<span id="autoLoginNoDelay"></span>', icon: "", alias: "autoLoginNoDelay", action: onContextMenuAction }
]
, onContextMenu: onTriggerContextMenu
, clickType: GetPreferredContextMenuTrigger()
};
$(".checkboxWrapper,#btnLogin").contextmenu(menuOptions);
}
</script>
</body>
</html>
{
"@category" : "datascan",
"@timestamp" : "2024-11-21T10:22:07.000Z",
"app" : {
"extract" : {
"domain" : [
"w3.org"
],
"hostname" : [
"www.w3.org"
],
"ip" : [
"4.8.2.3",
"4.8.6.3"
],
"url" : [
"http://www.w3.org/1999/xhtml"
]
},
"http" : {
"bodymd5" : "17e0d89b2433c35b898ed5eea7fa8d6d",
"bodymmh3" : -1943070495,
"headermd5" : "9e5cb3724ed5f895f78b80abd7ba14a7",
"headermmh3" : 1470756761,
"title" : "Blue Iris Login"
},
"length" : 15343
},
"asn" : "AS12322",
"city" : "Ostricourt",
"country" : "FR",
"data" : "HTTP/1.1 200 OK\r\nServer: BlueServer/4.8.6.3\r\nDate: Thu, 21 Nov 2024 10:21:55 GMT\r\nP3P: CP=\"CAO COR CURa ADMa DEVa OUR IND ONL COM DEM PRE\"\r\nAccess-Control-Allow-Origin: *\r\nSet-Cookie: session=0e3a78ab5f17456f5315301e3ee35ed2; path=/\r\nConnection: Close\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Length: 14961\r\nCache-Control: no-cache, no-store\r\nX-Frame-Options: SAMEORIGIN\r\n\r\n<!DOCTYPE html>\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\r\n\t<link rel=\"shortcut icon\" href=\"/favicon.ico\" type=\"image/x-icon\" />\r\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\r\n\t<title>Blue Iris Login</title>\r\n\t<script type=\"text/javascript\">\r\n\t\tvar login_version = \"19\";\r\n\t\tvar bi_version = \"4.8.6.3\";\r\n\t\tvar combined_version = login_version + \"-\" + bi_version;\r\n\t</script>\r\n\t<script type=\"text/javascript\">\r\n\t\twindow.onerror = function (msg, url, line, charIdx)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tvar versionStr = \"unknown\";\r\n\t\t\t\tif (typeof login_version !== \"undefined\")\r\n\t\t\t\t\tversionStr = login_version;\r\n\t\t\t\tvar biVersionStr = \"unknown\";\r\n\t\t\t\tif (typeof bi_version !== \"undefined\")\r\n\t\t\t\t\tbiVersionStr = bi_version;\r\n\t\t\t\turl = url.replace(/\\/\\/.*?\\//, '//censored_hostname/');\r\n\t\t\t\talert(\"An unexpected error has occurred in Blue Iris Login (v \" + versionStr + \" / \" + biVersionStr + \"). If you wish to report the error, please SCREENSHOT the browser now.\\n\\n\" + msg + \"\\nat \" + url + \" [\" + line + \":\" + charIdx + \"]\\n\" + navigator.userAgent);\r\n\t\t\t}\r\n\t\t\tcatch (ex)\r\n\t\t\t{\r\n\t\t\t\talert(ex);\r\n\t\t\t}\r\n\t\t};\r\n\t</script>\r\n\t<style type=\"text/css\">\r\n\t\tbody\r\n\t\t{\r\n\t\t\tfont-family: sans-serif;\r\n\t\t\tbackground: #212325;\r\n\t\t}\r\n\r\n\t\t#loginLoading\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t\ttext-shadow: 0 0 10px rgba(0,0,0,0.3);\r\n\t\t\tposition: absolute;\r\n\t\t\ttext-align: center;\r\n\t\t\ttop: 40%;\r\n\t\t\twidth: 100%;\r\n\t\t\tcolor: #FFFFFF;\r\n\t\t}\r\n\r\n\t\t\t#loginLoading h1\r\n\t\t\t{\r\n\t\t\t\tmargin: 0 0 20px 0;\r\n\t\t\t\tfont-size: 32px;\r\n\t\t\t}\r\n\r\n\t\t\t#loginLoading div\r\n\t\t\t{\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\r\n\t\t#login\r\n\t\t{\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\r\n\t\t.checkboxWrapper\r\n\t\t{\r\n\t\t\tmax-width: 488px;\r\n\t\t}\r\n\t</style>\r\n</head>\r\n<body>\r\n\t<div id=\"loginLoading\">\r\n\t\t<h1>Jokevideo</h1>\r\n\t\t<div>Loading login page...</div>\r\n\t</div>\r\n\t<div id=\"login\">\r\n\t\t<h1>Jokevideo</h1>\r\n\t\t<input id=\"txtUn\" type=\"text\" class=\"text\" placeholder=\"Username\" autocapitalize=\"off\" autocorrect=\"off\" />\r\n\t\t<input id=\"txtPw\" type=\"password\" class=\"text\" placeholder=\"Password\" onkeypress=\"return pwKeypress(this, event);\" autocapitalize=\"off\" autocorrect=\"off\" />\r\n\t\t<div class=\"checkboxWrapper\">\r\n\t\t\t<input id=\"cbLoginAutomatically\" type=\"checkbox\" class=\"checkbox\" onchange=\"cbLoginAutomaticallyClicked();\" /><label for=\"cbLoginAutomatically\" id=\"lblLoginAutomatically\"><span class=\"ui\"></span>Log in automatically:</label>\r\n\t\t</div>\r\n\t\t<div id=\"status_wrapper_upper\"></div>\r\n\t\t<input id=\"btnLogin\" type=\"button\" class=\"btn\" value=\"Log in\" onclick=\"login();\" />\r\n\t\t<div id=\"status_wrapper_lower\"><div id=\"status\"></div></div>\r\n\t</div>\r\n\t<script type=\"text/javascript\">\r\n\t\tvar loadingOpacity = 0;\r\n\t\tfunction IncreaseLoadingOpacity()\r\n\t\t{\r\n\t\t\tloadingOpacity += 0.05;\r\n\t\t\tif (loadingOpacity > 1)\r\n\t\t\t\tloadingOpacity = 1;\r\n\t\t\tvar ele = document.getElementById('loginLoading');\r\n\t\t\tele.style.display = \"block\";\r\n\t\t\tele.style.opacity = loadingOpacity;\r\n\t\t\tif (loadingOpacity < 1)\r\n\t\t\t\tshowLoadingMessageTimeout = setTimeout(IncreaseLoadingOpacity, 33);\r\n\t\t}\r\n\t\tvar showLoadingMessageTimeout = setTimeout(IncreaseLoadingOpacity, 67);\r\n\r\n\t\tdocument.write('<link href=\"applet/loginStyles.css?v=' + combined_version + '\" rel=\"stylesheet\" />'\r\n\t\t\t+ '<script src=\"applet/loginScripts.js?v=' + combined_version + '\"><\\/script>');\r\n\t</script>\r\n\t<script type=\"text/javascript\">\r\n\t\t/* eslint no-extra-parens: 0 */\r\n\t\tvar autologin_timeout_1 = null;\r\n\t\tvar autologin_timeout_2 = null;\r\n\t\tvar existingSession = \"0e3a78ab5f17456f5315301e3ee35ed2\";\r\n\t\tvar isStoredDataLoaded = false;\r\n\t\tvar windowUnloading = false;\r\n\t\tvar cookiesEnabled;\r\n\t\tvar localStorageEnabled;\r\n\r\n\t\t/**\r\n\t\t * Changes the current URL by removing the specified query string parameter(s) from it.\r\n\t\t * @returns {String} Returns null if successful, otherwise returns the new URL if changing the history state failed.\r\n\t\t */\r\n\t\tfunction NavRemoveUrlParams()\r\n\t\t{\r\n\t\t\tvar url = RemoveUrlParams.apply(this, arguments);\r\n\t\t\ttry { history.replaceState(history.state, \"\", url); return null; } catch (ex) { return url; }\r\n\t\t}\r\n\t\tfunction RemoveUrlParams()\r\n\t\t{\r\n\t\t\tvar s = location.search;\r\n\t\t\tfor (var i = 0; i < arguments.length; i++)\r\n\t\t\t{\r\n\t\t\t\tvar param = arguments[i];\r\n\t\t\t\tvar rx = new RegExp('(&|\\\\?)' + param + '=[^&?#%]+', 'gi');\r\n\t\t\t\ts = s.replace(rx, \"\");\r\n\t\t\t\twhile (s.indexOf(\"&\") === 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (s.length > 1)\r\n\t\t\t\t\t\ts = s.substr(1);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\ts = \"\";\r\n\t\t\t\t}\r\n\t\t\t\tif (s.length > 0 && s.indexOf(\"?\") === -1)\r\n\t\t\t\t\ts = \"?\" + s;\r\n\t\t\t}\r\n\t\t\treturn location.origin + location.pathname + s + location.hash;\r\n\t\t}\r\n\r\n\t\tNavRemoveUrlParams(\"session\");\r\n\r\n\t\t$(function ()\r\n\t\t{\r\n\t\t\tcookiesEnabled = testCookieFunctionality();\r\n\t\t\tlocalStorageEnabled = isLocalStorageEnabled();\r\n\t\t\tvar skipAutoLogin = GetPersistedValue(\"bi_override_disable_auto_login_once\") === \"1\";\r\n\t\t\tif (UrlParameters.Get(\"autologin\") === \"0\")\r\n\t\t\t{\r\n\t\t\t\tskipAutoLogin = true;\r\n\t\t\t\tvar url = NavRemoveUrlParams(\"session\", \"autologin\");\r\n\t\t\t\tif (url)\r\n\t\t\t\t{\r\n\t\t\t\t\tSetPersistedValue(\"bi_override_disable_auto_login_once\", \"1\");\r\n\t\t\t\t\tlocation.href = url;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (skipAutoLogin)\r\n\t\t\t{\r\n\t\t\t\tSetPersistedValue(\"bi_override_disable_auto_login_once\", \"0\");\r\n\t\t\t}\r\n\t\t\tclearTimeout(showLoadingMessageTimeout);\r\n\t\t\t$(\"#loginLoading\").hide();\r\n\t\t\t$(\"#login\").show();\r\n\t\t\tif (typeof window.JSON === 'undefined')\r\n\t\t\t{\r\n\t\t\t\t$(\"#login\").html(\"<div>Your web browser is too old to use the Blue Iris web interface properly.<br><br>To proceed with this browser, disable the \\\"Secure only\\\" requirement within Blue Iris's web server settings.</div>\");\r\n\t\t\t\t$(\"#login\").css(\"color\", \"#EEEEEE\").css(\"margin\", \"8px\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!existingSession || (existingSession.length === 11 && existingSession.startsWith(\"%\") && existingSession.endsWith(\"%\") && existingSession.indexOf(\"SESSION\") === 2))\r\n\t\t\t{\r\n\t\t\t\t$(\"#login\").html(\"<div>Session data was not provided as expected. This login page only works when served by Blue Iris 4.8.2.3 or newer.</div>\");\r\n\t\t\t\t$(\"#login\").css(\"color\", \"#EEEEEE\").css(\"margin\", \"8px\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!localStorageEnabled)\r\n\t\t\t\t$(\"#cbLoginAutomatically\").parent().text(\"Note: Local Storage is disabled in your browser, so credentials can not be saved.\").css(\"color\", \"#EEEEEE\");\r\n\t\t\tSetupLoginContextMenu();\r\n\t\t\tSetStatus();\r\n\t\t\t$(window).resize(resized);\r\n\t\t\tresized();\r\n\t\t\twindow.onbeforeunload = function ()\r\n\t\t\t{\r\n\t\t\t\twindowUnloading = true;\r\n\t\t\t\tcbLoginAutomaticallyClicked();\r\n\t\t\t\treturn;\r\n\t\t\t};\r\n\t\t\t// Handle automatic login\r\n\t\t\tif (GetPersistedValue(\"bi_rememberMe\") === \"1\")\r\n\t\t\t{\r\n\t\t\t\t$(\"#cbLoginAutomatically\").attr('checked', 'checked');\r\n\t\t\t\t$(\"#txtUn\").val(Base64.decode(GetPersistedValue(\"bi_username\")));\r\n\t\t\t\t$(\"#txtPw\").val(Base64.decode(GetPersistedValue(\"bi_password\")));\r\n\r\n\t\t\t\tif (!skipAutoLogin)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ($(\"#txtUn\").val() !== \"\" && $(\"#txtPw\").val() !== \"\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (GetAutoLoginInstantly())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ($(\"#cbLoginAutomatically\").is(\":checked\"))\r\n\t\t\t\t\t\t\t\tlogin();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t$(\"#btnLogin\").val(\"Logging in, in 2 seconds\");\r\n\t\t\t\t\t\t\tautologin_timeout_1 = setTimeout(function () { $(\"#btnLogin\").val(\"Logging in, in 1 second\"); }, 1000);\r\n\t\t\t\t\t\t\tautologin_timeout_2 = setTimeout(function ()\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif ($(\"#cbLoginAutomatically\").is(\":checked\"))\r\n\t\t\t\t\t\t\t\t\tlogin();\r\n\t\t\t\t\t\t\t}, 2000);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t$(\"#cbLoginAutomatically\").removeAttr('checked');\r\n\t\t\t\tSetPersistedValue(\"bi_username\", \"\");\r\n\t\t\t\tSetPersistedValue(\"bi_password\", \"\");\r\n\t\t\t}\r\n\r\n\t\t\t// Check for existing session\r\n\t\t\tExecJSON({ cmd: \"login\", session: existingSession }, function (response)\r\n\t\t\t{\r\n\t\t\t\tif (response.result === \"fail\")\r\n\t\t\t\t{\r\n\t\t\t\t\t// No existing session.\r\n\t\t\t\t\tvar anonymousAvailable = response.data && response.data[\"auth-exempt\"];\r\n\t\t\t\t\tif (anonymousAvailable)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Attempt Anonymous login, to get the permission level.\r\n\t\t\t\t\t\tvar myResponse = md5(\"Anonymous:\" + response.session + \":\");\r\n\t\t\t\t\t\tExecJSON({ cmd: \"login\", session: response.session, response: myResponse }, function (response)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (response.result === \"success\")\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\texistingSession = response.session;\r\n\t\t\t\t\t\t\t\tSetStatus(\"An anonymous \" + (response.data.admin ? \"administrator\" : \"user\") + ' session is available. <a href=\"javascript:LeaveLoginPage()\">Click here to use it.</a>');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tfunction (jqXHR, textStatus, errorThrown)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tHandleError(\"Unable to contact Blue Iris server\");\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (response.result === \"success\")\r\n\t\t\t\t{\r\n\t\t\t\t\texistingSession = response.session;\r\n\t\t\t\t\tSetStatus(\"An existing \" + (response.data.admin ? \"administrator\" : \"user\") + ' session is available. <a href=\"javascript:LeaveLoginPage()\">Click here to use it.</a>');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\tfunction (jqXHR, textStatus, errorThrown)\r\n\t\t\t\t{\r\n\t\t\t\t\tHandleError(\"Unable to contact Blue Iris server\");\r\n\t\t\t\t});\r\n\r\n\t\t\t// Set focus on first empty field\r\n\t\t\tif (!$(\"#txtUn\").val())\r\n\t\t\t\t$(\"#txtUn\").get(0).focus();\r\n\t\t\telse if (!$(\"#txtPw\").val())\r\n\t\t\t\t$(\"#txtPw\").get(0).focus();\r\n\t\t\telse\r\n\t\t\t\t$(\"#btnLogin\").get(0).focus();\r\n\r\n\t\t\tisStoredDataLoaded = true;\r\n\t\t});\r\n\t\tfunction login()\r\n\t\t{\r\n\t\t\tcbLoginAutomaticallyClicked();\r\n\t\t\t$(\"#btnLogin\").val(\"Logging in ...\");\r\n\t\t\tSetStatus();\r\n\t\t\tExecJSON({ cmd: \"login\" }, function (response)\r\n\t\t\t{\r\n\t\t\t\tvar myResponse = md5($(\"#txtUn\").val() + \":\" + response.session + \":\" + $(\"#txtPw\").val());\r\n\t\t\t\tExecJSON({ cmd: \"login\", session: response.session, response: myResponse }, function (response)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (response.result === \"success\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$(\"#btnLogin\").attr(\"disabled\", \"disabled\").val(\"Redirecting...\");\r\n\t\t\t\t\t\texistingSession = response.session;\r\n\t\t\t\t\t\tLeaveLoginPage();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$(\"#cbLoginAutomatically\").removeAttr('checked');\r\n\t\t\t\t\t\tSetPersistedValue(\"bi_rememberMe\", \"0\");\r\n\t\t\t\t\t\tSetPersistedValue(\"bi_username\", \"\");\r\n\t\t\t\t\t\tSetPersistedValue(\"bi_password\", \"\");\r\n\t\t\t\t\t\t$(\"#btnLogin\").val(\"Log in\");\r\n\t\t\t\t\t\tHandleError(response.data ? response.data.reason : \"Login failed but Blue Iris did not provide a reason.\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\tfunction (jqXHR, textStatus, errorThrown)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tHandleError(\"Unable to contact Blue Iris server\");\r\n\t\t\t\t\t\t$(\"#btnLogin\").val(\"Log in\");\r\n\t\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t\tfunction (jqXHR, textStatus, errorThrown)\r\n\t\t\t\t{\r\n\t\t\t\t\tHandleError(\"Unable to contact Blue Iris server\");\r\n\t\t\t\t\t$(\"#btnLogin\").val(\"Log in\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction LeaveLoginPage()\r\n\t\t{\r\n\t\t\tvar page = UrlParameters.Get(\"page\");\r\n\t\t\tif (page === \"\")\r\n\t\t\t\tpage = \"/\";\r\n\t\t\tpage = page.replace(/&session=[^&?#%]+/gi, '');\r\n\t\t\tpage = page.replace(/\\?session=[^&?#%]+/gi, '?');\r\n\t\t\tpage += (page.indexOf(\"?\") < 0 ? \"?\" : \"&\") + \"session=\" + existingSession;\r\n\t\t\tif (cookiesEnabled)\r\n\t\t\t\t$.cookie(\"session\", existingSession, { path: \"/\" });\r\n\t\t\tlocation.href = page + location.hash;\r\n\t\t}\r\n\t\tfunction cancelAutoLogin()\r\n\t\t{\r\n\t\t\tif (autologin_timeout_1 !== null)\r\n\t\t\t{\r\n\t\t\t\tclearTimeout(autologin_timeout_1);\r\n\t\t\t\tautologin_timeout_1 = null;\r\n\t\t\t}\r\n\t\t\tif (autologin_timeout_2 !== null)\r\n\t\t\t{\r\n\t\t\t\tclearTimeout(autologin_timeout_2);\r\n\t\t\t\tautologin_timeout_2 = null;\r\n\t\t\t}\r\n\t\t\t$(\"#btnLogin\").val(windowUnloading ? \"Redirecting...\" : \"Log in\");\r\n\t\t}\r\n\t\tfunction cbLoginAutomaticallyClicked()\r\n\t\t{\r\n\t\t\tcancelAutoLogin();\r\n\t\t\tif (!isStoredDataLoaded)\r\n\t\t\t\treturn;\r\n\t\t\tvar isChecked = $(\"#cbLoginAutomatically\").is(\":checked\");\r\n\t\t\tSetPersistedValue(\"bi_rememberMe\", isChecked ? \"1\" : \"0\");\r\n\t\t\tSetPersistedValue(\"bi_username\", isChecked ? Base64.encode($(\"#txtUn\").val()) : \"\");\r\n\t\t\tSetPersistedValue(\"bi_password\", isChecked ? Base64.encode($(\"#txtPw\").val()) : \"\");\r\n\t\t}\r\n\t\tfunction GetPersistedValue(key)\r\n\t\t{\r\n\t\t\tvar value;\r\n\t\t\tif (localStorageEnabled)\r\n\t\t\t\tvalue = localStorage.getItem(key);\r\n\t\t\tif (!value)\r\n\t\t\t\tvalue = \"\";\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\tfunction SetPersistedValue(key, value)\r\n\t\t{\r\n\t\t\tif (localStorageEnabled)\r\n\t\t\t\treturn localStorage.setItem(key, value);\r\n\t\t}\r\n\t\tfunction pwKeypress(ele, e)\r\n\t\t{\r\n\t\t\tvar keycode;\r\n\t\t\tif (window.event) keycode = window.event.keyCode;\r\n\t\t\telse if (typeof e !== \"undefined\" && e) keycode = e.which;\r\n\t\t\telse return true;\r\n\r\n\t\t\tif (keycode === 13)\r\n\t\t\t{\r\n\t\t\t\tlogin();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction resized()\r\n\t\t{\r\n\t\t\tif ($(\"#status\").is(\":visible\"))\r\n\t\t\t{\r\n\t\t\t\t$(\"#status\").hide();\r\n\t\t\t\t$(\"#status\").css(\"max-width\", $(\"#login\").width() + \"px\");\r\n\t\t\t\t$(\"#status\").show();\r\n\t\t\t}\r\n\t\t\t$('#login').css({ position: 'absolute', left: ($(window).width() - $('#login').outerWidth()) / 2, top: ($(window).height() - $('#login').outerHeight()) / 2 });\r\n\t\t\t$(\"#status\").css(\"max-width\", $(\"#login\").width() + \"px\");\r\n\t\t\tvar heightTotal = 0;\r\n\t\t\t$(\"#login\").children().each(function (idx, ele)\r\n\t\t\t{\r\n\t\t\t\theightTotal += $(ele).outerHeight(true);\r\n\t\t\t});\r\n\t\t\tif (heightTotal > $(window).height())\r\n\t\t\t{\r\n\t\t\t\tif ($(\"#status\").parent().attr(\"id\") !== \"status_wrapper_upper\")\r\n\t\t\t\t\t$(\"#status_wrapper_upper\").append($(\"#status\"));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif ($(\"#status\").parent().attr(\"id\") !== \"status_wrapper_lower\")\r\n\t\t\t\t\t$(\"#status_wrapper_lower\").append($(\"#status\"));\r\n\t\t\t}\r\n\t\t\t$(\"#lblLoginAutomatically\").parent().css(\"padding-left\", (($('#login').outerWidth() - $(\"#lblLoginAutomatically\").outerWidth(true)) / 2) + \"px\");\r\n\t\t}\r\n\t\tfunction HandleError(error)\r\n\t\t{\r\n\t\t\tSetStatus(error, \"#FF6262\");\r\n\t\t}\r\n\t\tfunction SetStatus(html, color)\r\n\t\t{\r\n\t\t\tif (typeof html === \"undefined\" || html === null || html === \"\")\r\n\t\t\t{\r\n\t\t\t\thtml = \"\";\r\n\t\t\t\t$(\"#status\").hide();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t$(\"#status\").show();\r\n\t\t\tif (typeof color === \"undefined\" || color === null || color === \"\")\r\n\t\t\t\tcolor = \"#FFFFFF\";\r\n\t\t\t$(\"#status\").html(html);\r\n\t\t\t$(\"#status\").css(\"color\", color);\r\n\t\t\tresized();\r\n\t\t}\r\n\t\tfunction GetAutoLoginInstantly()\r\n\t\t{\r\n\t\t\treturn GetPersistedValue(\"bi_autoLoginInstant\") === \"1\";\r\n\t\t}\r\n\t\tfunction GetPreferredContextMenuTrigger()\r\n\t\t{\r\n\t\t\treturn GetPersistedValue(\"ui3_contextMenus_longPress\") === \"1\" ? \"longpress\" : \"right\";\r\n\t\t}\r\n\t\tfunction SetupLoginContextMenu()\r\n\t\t{\r\n\t\t\tvar onTriggerContextMenu = function (e)\r\n\t\t\t{\r\n\t\t\t\tif (GetAutoLoginInstantly())\r\n\t\t\t\t\t$(\"#autoLoginNoDelay\").text(\"Auto Login: Instant (click to change)\");\r\n\t\t\t\telse\r\n\t\t\t\t\t$(\"#autoLoginNoDelay\").text(\"Auto Login: Delayed (click to change)\");\r\n\t\t\t\treturn true;\r\n\t\t\t};\r\n\t\t\tvar onContextMenuAction = function ()\r\n\t\t\t{\r\n\t\t\t\tif (this.data.alias === \"autoLoginNoDelay\")\r\n\t\t\t\t\tSetPersistedValue(\"bi_autoLoginInstant\", GetAutoLoginInstantly() ? \"0\" : \"1\");\r\n\t\t\t};\r\n\t\t\tvar menuOptions =\r\n\t\t\t{\r\n\t\t\t\talias: \"cmroot_login\", width: \"300px\", items:\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t{ text: '<span id=\"autoLoginNoDelay\"></span>', icon: \"\", alias: \"autoLoginNoDelay\", action: onContextMenuAction }\r\n\t\t\t\t\t]\r\n\t\t\t\t, onContextMenu: onTriggerContextMenu\r\n\t\t\t\t, clickType: GetPreferredContextMenuTrigger()\r\n\t\t\t};\r\n\t\t\t$(\".checkboxWrapper,#btnLogin\").contextmenu(menuOptions);\r\n\t\t}\r\n\t</script>\r\n</body>\r\n</html>\r\n",
"datamd5" : "f6f5b96a1ce4d2d69bdd831d80cc37a3",
"datammh3" : 2106729453,
"device" : {
"class" : "<enterprise field>: device.class"
},
"domain" : [
"proxad.net"
],
"forward" : "88.166.133.69",
"geolocus" : {
"asn" : "AS12322",
"continent" : "EU",
"continentname" : "Europe",
"country" : "FR",
"countryname" : "France",
"domain" : [
"proxad.net"
],
"isineu" : "true",
"latitude" : "46.227638",
"location" : "46.227638,2.213749",
"longitude" : "2.213749",
"netname" : "FR-PROXAD-ADSL",
"organization" : "ProXad network / Free SAS",
"subnet" : "88.166.0.0/15"
},
"host" : [
"88-166-133-69"
],
"hostname" : [
"88-166-133-69.subs.proxad.net",
"88.166.133.69"
],
"ip" : "88.166.133.69",
"ipv6" : "false",
"latitude" : "50.4533",
"location" : "50.4533,3.0447",
"longitude" : "3.0447",
"node" : {
"country" : "<enterprise field>: node.country",
"groupid" : "<enterprise field>: node.groupid",
"id" : "<enterprise field>: node.id",
"physicalcountry" : "<enterprise field>: node.physicalcountry"
},
"organization" : "Free SAS",
"port" : 49153,
"protocol" : "http",
"protocolversion" : "1.1",
"reason" : "OK",
"reverse" : [
"88-166-133-69.subs.proxad.net"
],
"seen_date" : "2024-11-21",
"source" : "datascan::redirect::1",
"status" : 200,
"subdomains" : [
"subs.proxad.net"
],
"subnet" : "88.160.0.0/13",
"tag" : "<enterprise field>: tag",
"tld" : [
"net"
],
"tls" : "false",
"transport" : "tcp",
"url" : "/login.htm?page=%2F"
}