// ==UserScript== // @name DAB (Smartbroker) Refresh Timeout // @namespace http://tampermonkey.net/ // @version 1.1 // @description Dieses Script verhindert den automatischen Logout im DAB (Smartbroker) Tradingcenter für 30 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 // ==/UserScript== (function() { 'use strict'; var maxLoginTime = 30; // 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 testInterval = 5; // Frequenz in Sekunden mit welcher der 5 Minuten Timer überprüft werden soll. // Dieser Wert muss bei den Min und Max Limits berücksichtigt werden. // So können durch den Intervall von 5 Sek aus 35 Sek Restzeit 30 Sek werden var logState = false; // Hier kann die Textausgabe im Konsolenfenster aktiviert werden (true / false) 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 interval; // Variable zum 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 if (htmlElement){ // Wenn das HTML Element mit dem 5 Minuten Countdown existiert... (Gibt es nicht auf jeder Seite! Z.B. Login/Logout Seite) setValues(); // dann führe die Funktion 'setValues()' aus. } // ansonsten mache nichts... 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] interval = setInterval(checkSessionTimerUpdate, testInterval * 1000); // Initialisieren und starten des Intervalls. // Die Funktion 'checkSessionTimerUpdate' alle [testInterval]Sekunden ausgeführt (*1000 da Angaben in Millisekunden notwendig) if(logState){ // Die folgenden Textausgaben in der Konsole werden nur ausgeführt wenn [logState] auf 'true' steht console.log("Test Intervall: ", testInterval, " Sekunden"); console.log("Countdown Limit: ", cdLimit, " Sekunden"); console.log("Intervall ID: ", interval); } } // Ende der Funktion 'setValues()' function checkSessionTimerUpdate(){ // 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 zu den Minuten * 60 aus Zeichen 1) 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 sofern [logState] auf 'true' steht console.log("Restwert des '5 Minuten Logout Countdowns': ", seconds); } clearInterval(interval); // 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 var millis = Date.now() - starttime; // Die Differenz zwischen aktueller Uhrzeit und der in [starttime] gespeicherten Startzeit wird ermittelt (in Millisekunden) if (millis < maxLoginTime * 60 * 1000){ // wenn die Differenz kleiner als [maxLoginTime] (Angabe in Minuten - daher * 60 * 1000)... setValues(); // ...dann starte die Funktion 'setValues()' und das Spiel beginnt von vorn ;-) } else { // ansonsten (Wenn [maxLoginTime] überschritten... if(logState){ // Textausgabe in der Konsole sofern [logState] auf 'true' steht console.log("Maximale Loginzeit überschritten - Kein Neustart des Timers"); } } } } } })();