CCCPaste

h-da AutoLogin - tampermonkey plugin

// ==UserScript==
// @name         h-da AutoLogin (with saved credentials)
// @namespace    http://my.h-da.de/
// @version      1.1
// @description  Automatically logs into my.h-da.de after storing credentials securely in Tampermonkey
// @author       You
// @match        http://my.h-da.de/*
// @match        https://my.h-da.de/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    async function getCredentials() {
        let username = await GM_getValue("username", null);
        let password = await GM_getValue("password", null);

        // Ask user for credentials if not saved
        if (!username || !password) {
            username = prompt("Enter your h-da username:");
            password = prompt("Enter your h-da password:");

            if (username && password) {
                await GM_setValue("username", username);
                await GM_setValue("password", password);
                alert("Credentials saved. You will be logged in automatically from now on.");
            } else {
                alert("Username or password missing. Script will not log in automatically.");
                return null;
            }
        }

        return { username, password };
    }

    async function tryLogin() {
        const creds = await getCredentials();
        if (!creds) return;

        let loggedIn = false;
        let tries = 20; // more tries in case of slow load
        const interval = setInterval(() => {
            if (loggedIn || tries <= 0) {
                clearInterval(interval);
                return;
            }
            tries--;

            const loginForm = document.getElementById("loginForm");
            if (loginForm) {
                try {
                    const inputs = Array.from(loginForm.querySelectorAll("input"))
                        .filter(a => a.getAttribute("type") !== "hidden");

                    const [loginInput, passwordInput] = inputs;

                    loginInput.value = creds.username;
                    passwordInput.value = creds.password;

                    const submitButton = loginForm.querySelector("button[name=submit]");
                    if (submitButton) {
                        submitButton.click();
                        loggedIn = true;
                    }
                } catch (e) {
                    console.error("AutoLogin error:", e);
                }
            }
        }, 100);
    }

    // Add an optional way to reset saved credentials
    unsafeWindow.resetHDAAuth = async function() {
        await GM_deleteValue("username");
        await GM_deleteValue("password");
        alert("Saved credentials deleted. They will be requested again on next login.");
    };

    tryLogin();
})();