|
|
@ -6,11 +6,13 @@ |
|
|
|
// @author Steven Allen
|
|
|
|
// @match https://leads.needtosellmyhousefast.com/*
|
|
|
|
// @require https://code.jquery.com/jquery-3.7.1.min.js
|
|
|
|
// @require http://crypto.stanford.edu/sjcl/sjcl.js
|
|
|
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=needtosellmyhousefast.com
|
|
|
|
// @grant none
|
|
|
|
// ==/UserScript==
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
|
|
|
|
//Load our settings
|
|
|
|
//localStorage.removeItem('alwayswin_settings');
|
|
|
|
|
|
|
@ -26,7 +28,7 @@ if(alwaysWinSettingsString == null || alwaysWinSettingsString == undefined) { |
|
|
|
} |
|
|
|
|
|
|
|
var alwaysWinSettings = JSON.parse(alwaysWinSettingsString); |
|
|
|
console.log(alwaysWinSettings); |
|
|
|
//console.log(alwaysWinSettings);
|
|
|
|
|
|
|
|
////////////
|
|
|
|
// Div injection and auto reload functions
|
|
|
@ -65,12 +67,15 @@ function saveSettings() { |
|
|
|
let minSecondsBetweenReloadsValue = document.querySelector("[name='minSecondsBetweenReloads']").value; |
|
|
|
let maxSecondsBetweenReloadsValue = document.querySelector("[name='maxSecondsBetweenReloads']").value; |
|
|
|
|
|
|
|
const latestSettings = { |
|
|
|
"isReloadEnabled": isReloadEnabledValue, |
|
|
|
"isAutoLoginEnabled": isAutoLoginEnabledValue, |
|
|
|
"minSecondsBetweenReloads": minSecondsBetweenReloadsValue, |
|
|
|
"maxSecondsBetweenReloads": maxSecondsBetweenReloadsValue |
|
|
|
}; |
|
|
|
var latestSettings = alwaysWinSettings; |
|
|
|
latestSettings.isReloadEnabled = isReloadEnabledValue; |
|
|
|
latestSettings.isAutoLoginEnabled = isAutoLoginEnabledValue; |
|
|
|
latestSettings.minSecondsBetweenReloads = minSecondsBetweenReloadsValue; |
|
|
|
latestSettings.maxSecondsBetweenReloads = maxSecondsBetweenReloadsValue; |
|
|
|
|
|
|
|
//console.log("latestSettings");
|
|
|
|
//console.log(latestSettings);
|
|
|
|
|
|
|
|
const latestSettingsString = JSON.stringify(latestSettings); |
|
|
|
localStorage.setItem('alwayswin_settings',latestSettingsString); |
|
|
|
|
|
|
@ -96,14 +101,14 @@ function reload() { |
|
|
|
console.log("Saving settings..."); |
|
|
|
let alwaysWinSettings = saveSettings(); |
|
|
|
|
|
|
|
console.log("Its time to perform a reload."); |
|
|
|
console.log("isEnabled: "+ alwaysWinSettings.isReloadEnabled); |
|
|
|
console.log("secondsBetweenReloads:"+ alwaysWinSettings.minSecondsBetweenReloads +" - "+ alwaysWinSettings.maxSecondsBetweenReloads); |
|
|
|
awLog("Its time to perform a reload."); |
|
|
|
awLog("isEnabled: "+ alwaysWinSettings.isReloadEnabled); |
|
|
|
awLog("secondsBetweenReloads:"+ alwaysWinSettings.minSecondsBetweenReloads +" - "+ alwaysWinSettings.maxSecondsBetweenReloads); |
|
|
|
if(!reloadIsEnabled() ) { |
|
|
|
console.log("Reload is not enabled"); |
|
|
|
awLog("Reload is not enabled"); |
|
|
|
return; |
|
|
|
} |
|
|
|
console.log("Reload is enabled. Reloading..."); |
|
|
|
awLog("Reload is enabled. Reloading..."); |
|
|
|
location.reload(); |
|
|
|
} |
|
|
|
|
|
|
@ -187,13 +192,13 @@ function winCounty(countyJson, saveChanges) { |
|
|
|
awLog(countyInfo +" is already winning by just the right amount"); |
|
|
|
} else if(countyJson.clicksToMinWin > 0) { |
|
|
|
//console.log(countyInfo +" is currently loosing. Increasing bid now");
|
|
|
|
awLog(countyInfo +" is currently loosing. Increasing bid now"); |
|
|
|
awLog(countyInfo +" is currently loosing by "+countyJson.clicksToMinWin+" Increasing bid now"); |
|
|
|
for(var i = 0; i < countyJson.clicksToMinWin; i++) { |
|
|
|
console.log("calling btnBidUp.click() for "+ countyInfo); |
|
|
|
//console.log("calling btnBidUp.click() for "+ countyInfo);
|
|
|
|
countyJson.btnBidUp.click(); |
|
|
|
} |
|
|
|
if(saveChanges) { |
|
|
|
console.log("calling btnSave.click() for "+ countyInfo); |
|
|
|
//console.log("calling btnSave.click() for "+ countyInfo);
|
|
|
|
countyJson.btnSave.click(); |
|
|
|
} |
|
|
|
} else if (countyJson.clicksToMinWin < 0) { |
|
|
@ -201,12 +206,12 @@ function winCounty(countyJson, saveChanges) { |
|
|
|
awLog(countyInfo +" is winning by too much. Decreasing bid now"); |
|
|
|
let clicksRemaining = Math.abs(countyJson.clicksToMinWin); |
|
|
|
while(clicksRemaining > 0) { |
|
|
|
console.log("calling btnBidDown.click() for "+ countyInfo); |
|
|
|
//console.log("calling btnBidDown.click() for "+ countyInfo);
|
|
|
|
countyJson.btnBidDown.click(); |
|
|
|
clicksRemaining--; |
|
|
|
} |
|
|
|
if(saveChanges) { |
|
|
|
console.log("calling btnSave.click() for "+ countyInfo); |
|
|
|
//console.log("calling btnSave.click() for "+ countyInfo);
|
|
|
|
countyJson.btnSave.click(); |
|
|
|
} |
|
|
|
} |
|
|
@ -222,6 +227,14 @@ function awLog(message) { |
|
|
|
document.getElementById("awLog").innerHTML = currentContent +"<br/>"+ message; |
|
|
|
} |
|
|
|
|
|
|
|
function encryptAndStore(encryptionKey, clearText) { |
|
|
|
return JSON.stringify(sjcl.encrypt(encryptionKey, clearText)); |
|
|
|
} |
|
|
|
|
|
|
|
function unStoreAndDecrypt (encryptionKey, jsonObj) { |
|
|
|
return sjcl.decrypt(encryptionKey, JSON.parse(jsonObj)); |
|
|
|
} |
|
|
|
|
|
|
|
function loginIfNeeded(){ |
|
|
|
var div_signin = document.querySelector('.signin-box'); |
|
|
|
var loginIsNeeded = false; |
|
|
@ -234,13 +247,40 @@ function loginIfNeeded(){ |
|
|
|
return loginIsNeeded; |
|
|
|
} |
|
|
|
console.log("A signin dialog exists"); |
|
|
|
const user = "xxx"; |
|
|
|
const pass = "xxx"; |
|
|
|
var txt_email = div_signin.querySelector("[id='email']"); |
|
|
|
var txt_password = div_signin.querySelector("[id='inputPassword']"); |
|
|
|
var btn_signin = div_signin.querySelector('.btn-signin'); //btn btn-primary btn-block btn-signin
|
|
|
|
txt_email.value = user; |
|
|
|
txt_password.value = pass; |
|
|
|
|
|
|
|
var encKey = alwaysWinSettings.encKey ?? ""; |
|
|
|
var ntsmhfUser = alwaysWinSettings.ntsmhfUser ?? ""; |
|
|
|
var ntsmhfPass = alwaysWinSettings.ntsmhfPass ?? ""; |
|
|
|
if (!encKey) { |
|
|
|
encKey = prompt('Script key not set for ' + location.hostname + '. Please enter a random string:',''); |
|
|
|
alwaysWinSettings.encKey = encKey; |
|
|
|
ntsmhfUser = ""; |
|
|
|
ntsmhfPass = ""; |
|
|
|
} |
|
|
|
|
|
|
|
if(ntsmhfUser) { |
|
|
|
ntsmhfUser = unStoreAndDecrypt(encKey, ntsmhfUser); |
|
|
|
} else { |
|
|
|
ntsmhfUser = prompt('UserName is not set for '+ location.hostname +'. Enter it now:',''); |
|
|
|
alwaysWinSettings.ntsmhfUser = encryptAndStore(encKey, ntsmhfUser); |
|
|
|
} |
|
|
|
|
|
|
|
if(ntsmhfPass) { |
|
|
|
ntsmhfPass = unStoreAndDecrypt(encKey, ntsmhfPass); |
|
|
|
} else { |
|
|
|
ntsmhfPass = prompt('Password is not set for '+ location.hostname +'. Enter it now:',''); |
|
|
|
alwaysWinSettings.ntsmhfPass = encryptAndStore(encKey, ntsmhfPass); |
|
|
|
} |
|
|
|
|
|
|
|
const latestSettingsString = JSON.stringify(alwaysWinSettings); |
|
|
|
localStorage.setItem('alwayswin_settings',latestSettingsString); |
|
|
|
//////
|
|
|
|
|
|
|
|
txt_email.value = ntsmhfUser; |
|
|
|
txt_password.value = ntsmhfPass; |
|
|
|
btn_signin.click(); |
|
|
|
} |
|
|
|
return loginIsNeeded; |
|
|
@ -263,7 +303,7 @@ jQuery(window).on('load',function() { |
|
|
|
newHtml += '<input type="checkbox" name="isReloadEnabled" '+ getCheckedValue("isReloadEnabled") +'/><label for="isReloadEnabled">AlwaysWin</label> | '; |
|
|
|
newHtml += '<input type="checkbox" name="isAutoLoginEnabled" '+ getCheckedValue("isAutoLoginEnabled") +'/><label for="isAutoLoginEnabled">Auto Login</label><br/>'; |
|
|
|
newHtml += '<label for="minSecondsBetweenReloads">Reload Every</label>:<input id="minSecondsBetweenReloads" type="text" size="3" name="minSecondsBetweenReloads" value="'+minSecondsBetweenReloads+'" /> to <input id="maxSecondsBetweenReloads" type="text" size="3" name="maxSecondsBetweenReloads" value="'+maxSecondsBetweenReloads+'" /> seconds <br/>'; |
|
|
|
newHtml += '<div id="reloaderData"><div id="countdown"></div><progress value="0" max="100" id="progressBar" style="width: 100%;"></progress></div><div id="awLog" style="width:100%; border-style:ridge; background-color:#FEFEFE;" ">Log:</div>'; |
|
|
|
newHtml += '<div id="reloaderData"><div id="countdown"></div><progress value="0" max="100" id="progressBar" style="width: 100%;"></progress></div><div id="awLog" style="width:100%; font-size: 0.75em; border-style:ridge; background-color:#FEFEFE;" ">Log:</div>'; |
|
|
|
newHtml += '</div>'; |
|
|
|
|
|
|
|
newDiv.innerHTML = newHtml; |
|
|
|