DAB (Smartbroker) Refresh Timeout

Dieses Script verhindert den automatischen Logout im DAB (Smartbroker) Tradingcenter für x Minuten

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         DAB (Smartbroker) Refresh Timeout
// @version      1.2
// @description  Dieses Script verhindert den automatischen Logout im DAB (Smartbroker) Tradingcenter für x Minuten
//               ACHTUNG! Dadurch wird eine wichtige Sicherheitsfunktion ausgehebelt!!!!
//
//                             Ich übernehme
//               K E I N E R L E I     V E R A N T W O R T U N G
//                  für eventuelle Schäden jeglicher Art!!!!
//
// @author       Kratzerchen
// @include      https://b2b.dab-bank.de/Tradingcenter/*
// @include      https://b2b.dab-bank.de/smartbroker/*
// @grant        none
// @namespace https://greasyfork.org/users/684354
// ==/UserScript==

// Tabulatorbreite auf 4 stellen!

(function() {
	'use strict';

	var maxLoginTime	= 240;																				// Hier kann die maximale Loginzeit in Minuten festgelegt werden. Reset benötigt echten Seitenrefresh!
	var cdLimitMax		= 120;																				// Oberer Grenzwert in Sekunden. Frühstmöglicher Zeitpunkt zum Rücksetzten des 5 Minuten Timers
	var cdLimitMin		= 35;																				// Unterer Grenzwert in Sekunden. Minimalste erlaubte Restzeit des 5 Minuten Timers
	var logState		= false;																			// Hier kann die Textausgabe im Konsolenfenster aktiviert werden (true / false)var
	var cdLimit;																							// Zufällig ermittelter Wert zwischen [cdLimitMax] und [cdLimitMin].
																											// Unterschreitet der "5 Minuten Logout Countdown" diesen Wert wird dieser zurückgesetzt und ein neuer Zufallswert generiert.
																											// Durch die Verwendung von zufälligen Werten soll ein "natürlich" wirkendes Verhalten simuliert werden
	var checkInterval;																						// Variable zu speichern der Intervall ID. Wird benötigt um auf den gesetzten Intervall zugreifen zu können um ihn z.B zu löschen.
	var starttime = Date.now();																				// Die aktuelle Uhrzeit. Wird für die Überwachung der maximalen Loginzeit [maxLoginTime] benötigt
	var htmlElement = document.querySelector(".sessionTimer-countdown");									// In der Variable [htmlElement] wird der Knoten des HTML Elements, welches den 5 Minuten Timers enthält gespeichert

	maxLoginTime *= 60000;																					// [maxLoginTime] von Minuten in Millisekunden umrechnen
	if (htmlElement){																						// Wenn das HTML Element mit dem 5 Minuten Countdown existiert...  (Gibt es nicht auf jeder Seite! Z.B. Login/Logout Seite)
		var patchtDiv = document.createElement("div");														// Erzeuge ein neues Element und formatiere es mit den folgenden Styles
		patchtDiv.style.position ='absolute';
		patchtDiv.style.bottom = '0px';
		patchtDiv.style.right = '0px';
		patchtDiv.style.top = '0px';
		patchtDiv.style.left = '0px';
		patchtDiv.style.padding = '19px';
        patchtDiv.style.borderStyle = 'inherit inherit';
        patchtDiv.style.borderRadius = 'inherit';
		patchtDiv.style.textAlign = 'center';
		patchtDiv.style.zIndex = '1';
		patchtDiv.style.background = 'white';
		patchtDiv.style.fontSize = '20px';
		patchtDiv.innerHTML = 'Logout in <b id="newCD">00:00:00</b>';

		document.getElementById('sessionTimer').appendChild(patchtDiv);										// Füge dem HTML Element auf der Seite mit der ID 'sessionTimer' unser oben definieres Element als neues letztes Kindelement hinzu.
																											// Dieses 'übermalt' den originalen 5 Minuten Logout Timer.
		var newCD = document.getElementById('newCD');														// Speichere den HTML Knoten von unserem neuen <b>mm:ss</b> Tag um direkt auf die Timeranzeige zugreifen zu können
		var newCdInterval = setInterval(updateCD, 1000);													// Starte einen 1 Sekunden Intervall um den neuen Countdownzähler zu aktualisieren (Funktion 'updateCD')
		setValues();																						// führe die Funktion 'setValues()' aus.
	}																										// ansonsten mache nichts...  (if htmlElement)

	function setValues(){																					// Funktion 'setValues()' wird nach jedem Sart des Skripts sowie nach jedem Rücksetzen des 5 Minuten Countdowns ausgeführt
		cdLimit = Math.floor(Math.random() * (cdLimitMax - cdLimitMin + 1)) + cdLimitMin;					// Ermitteln der Zufallszahl zwischen [cdLimitMax] und [cdLimitMin]
		var checkIntervalMillis = Math.floor(Math.random() * 4000 + 1001);
        checkInterval = setInterval(checkOriginalTimer, checkIntervalMillis);								// Initialisieren und starten des Intervalls zum überpüfen des originalen 5 Minuten Logout Countdowns. (Funktion 'checkOriginalTimer')
																											// Wiederholrate ist zufällig zwischen 1000 und 5000 Millisekunden (damit nicht immer zur vollen Sekunde geklickt wird)
		if (logState){																						// Textausgabe in der Konsole wenn [logState] = true
			console.log("'checkInterval' Frequenz: ", checkIntervalMillis, "MilliSekunden");
			console.log("Countdown Limit: ", cdLimit, "Sekunden");
		}
	}																										// Ende der Funktion 'setValues()'

	function updateCD(){																					// Funktion zum akualieren des von uns eingefügten Logout Timers. Bei Ablauf erfolgt Logout!
		var millisPassed = Date.now() - starttime;															// vergangene Millisekunden seit Skriptstart
		var cdValue = maxLoginTime - millisPassed;															// Und deren Differenz zu [maxLoginTime]. [cdValue] ist somit die Restzeit
		newCD.innerHTML = leadingZero(cdValue/1000/60/60) + ":" + leadingZero((cdValue/1000/60)%60) + ":" + leadingZero(cdValue/1000%60);
																											// Die Resetzeit in Textformat 'hh:mm:ss' (mit führender Null wenn einstellig) umwandeln und die Coutdown-Anzeige aktualisieren
		if (cdValue <=0){																					// Wenn Maximale Loginzeit überschritten ([cdValue] ist 0 oder negativ)
			clearInterval(newCdInterval);																	// Lösche den 1 Sekunden Intervall
			clearInterval(checkInterval)																	// Lösche den Interval zum Resetten des originalen 5 Minuten Logout CD
			document.getElementById('login').firstElementChild.click();										// Dann klicke auf den Logout Link. Dieser ist das erste Kindelemet des HTML Elemets mit der ID 'Login'.
		}
	}

	function checkOriginalTimer(){																			// Die Funktion 'checkSessionTimerUpdate()' wird durch den in 'setValues()' gestarteten Intervall regelmäsßig ausgeführt

		var text = htmlElement.innerHTML;																	// Der Inhalt des HTML Elements, welches den Wert des "5 Minuten Logout Countdowns" enhält wird ausgelesen
		text.trim();																						// eventuelle Leerzeichen am Beginn und Ende des Textes werden abgeschnitten.
		if (text.length == 4){																				// Wenn der Text 4 Zeichen hat. (z.B: '1:35' {Minuten einstellig - Doppelpunkt - Sekunden zweistellig} sind 4 Zeichen.) Die Angabe '> 4 Minuten' wird somit ignoriert.
			var seconds = Number(text.slice(-2)) + Number(text.charAt(0)) * 60;								// Der Text wird in Sekunden umgewandelt (Die Sekunden aus den letzten beiden Zeichen addiert mit den Minuten * 60 aus Zeichen 1)
			if (logState){																					// Textausgabe in der Konsole wenn [logState] = true
				console.log("Restzeit original Contdown: ", seconds, "Sekunden. Limit bei " + cdLimit + " Sekunden.");
			}
			if (seconds < cdLimit){																			// Wenn die ausgelesene Restzeit in Sekunden des "5 Minuten Logout Countdowns" den in [cdLimit] gespeicherten Wert untersreitet....
				if (logState){																				// Textausgabe in der Konsole wenn [logState] = true
					console.log("Original Contdown ("+ seconds + ") kleiner als cdLimit (" + cdLimit +")  --> RESET");
				}
				clearInterval(checkInterval);																// Der Intervall, welcher in der Funktion  'setValues()' gestartet wurde, wird gelöscht.
				document.querySelector(".sessionTimer-refresh").click();									// Das '.click()' Event wird ausgelöst. Ziel ist der Refresh Button
				setValues();																				// ...dann starte die Funktion 'setValues()' und das Spiel beginnt von vorn ;-)
			}
		}
	}

	function leadingZero(value){																			// Funktion um einstelligen Zahlenwerten eine führende '0' zu verpassen
		return (value < 10 ? '0' : '' ) + parseInt(value);													// Rückgabe als Text und mit führender 0 falls [value] kleiner 10
	}
})();