// ==UserScript== // @name Edupage H4x // @namespace https://brn.systems // @version 0.2.32 // @copyright Can be found at https://git.brn.systems/BRNSystems/Userscripts // @description Gives you a bit more options on EduPage, some are broken // @author BRNSystems // @website https://brn.systems // @downloadURL https://userscripts.brn.systems/edupage.user.js // @updateURL https://userscripts.brn.systems/edupage.user.js // @match https://*.edupage.org/* // @icon64 https://www.google.com/s2/favicons?sz=64&domain=edupage.org // @icon https://www.google.com/s2/favicons?sz=32&domain=edupage.org // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // @require https://openuserjs.org/src/libs/sizzle/GM_config.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM.getValue // @grant GM.setValue // @grant GM_registerMenuCommand // @grant GM.registerMenuCommand // ==/UserScript== ( function() { 'use strict'; //from https://addons.mozilla.org/en-US/firefox/addon/edupage-addons/ let darkmodecss = ` :root { --primary-bg-color: #040404; --secondary-bg-color: #1d1d1d; --tertiary-bg-color: #101010; --text-color: #fff; --link-hover-color: #5bba6f; } /* Specific selectors for each section */ .userTopDiv, .userRozvrh, .user-novyPrvok, .userHomeOther, .hwHeroDiv, .skgdFixedHeader, #skin_Div_10, #skin_Div_11, .messageViewerHeader, div.messageViewerReplies.messageViewerReplies1.messageViewerReplyText>form>div>div>textarea, .ui-dialog-titlebar, .etest-meditor-test-item.selected { background-color: var(--primary-bg-color) !important; box-shadow: none; } div.messageViewerReplies.messageViewerReplies1.messageViewerReplyText>form>div>div>textarea { outline: none; caret-color: var(--text-color); color: var(--text-color); } body, html, .userContentInner, .bgDiv, #jw4298a4ab_md, .edubarSidebar, .usercalendarTitle>h1, .zsvFilterElem, .zsvHeaderTitle, .zsvHeaderTabs, .diplomy-st-contet-outer, .print-nobreak, #fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(1)>div>div, /* ... (other selectors) ... */ .sgpQuestionElem { background-color: var(--tertiary-bg-color) !important; color: var(--text-color) !important; } .edubarSmartLink span, .edubarMenuitem a span, .ribbon-button span, .hwWeekItem, .zsvHeaderTitle>h1, td>span>span, td>a, td>div>a, .expandMonthBtn, #home_Heading_2, .messageViewerConfirmationItem { color: var(--text-color) !important; } .edubarSmartLink:hover, .edubarMenuitem.active a, .edubarMenuitem a:hover, .edubarMenulist a:hover, .hwmenuElem .selected, .hwWeekItem, #fitheight>div:nth-child(2)>div:nth-child(3)>div:nth-child(1), #fitheight>div:nth-child(2)>div:nth-child(3), .messageViewerReplyText, .messageViewerConfirmationsHeader, .tmv-userCardsList { background-color: var(--tertiary-bg-color) !important; } /* ... (other selectors) ... */ th, .fixedCell, td { background-color: var(--tertiary-bg-color) !important; color: var(--text-color) !important; border: none !important; } .header th, .sgpQuestionElem { background-color: #0b0b0b !important; } .sgpTargetItem.confirmed { background-color: var(--link-hover-color) !important; } .tt-cell, .tt-cell+div+div+div span { filter: brightness(60%); } `; let gmc = new GM_config( { id: 'edupage_h4x_cnf', title: GM_info.script.name + ' Settings', fields: { modify_startbutton: { label: 'Hides the intro button', type: 'checkbox', default: true, title: 'Hides the intro button' }, modify_adult_student: { label: 'Fake adult student', type: 'checkbox', default: false, title: 'Fakes you as an adult student(you might be able to sign your own grades)' }, modify_admin_stuff: { label: 'Fake admin', type: 'checkbox', default: false, title: 'Fakes isUcitelOrAdmin, isAdmin, getLoggedUserType, hasUserRight, isWebpageAdmin. Some functionality still does not work(Server protection)' }, modify_restricted: { label: 'Fake not restricted', type: 'checkbox', default: false, title: 'Fakes EduPage as not restricted(I do not know what this does)' }, modify_logged_in: { label: 'Fake logged in', type: 'checkbox', default: false, title: 'Fakes EduPage portal logged in(I do not know what this does)' }, modify_strings: { label: 'Patch strings', type: 'checkbox', default: true, title: 'Patch strings to more cool ones' }, modify_encoding: { label: 'Disable encoded links', type: 'checkbox', default: true, title: 'Disables ?eqa=gibberish' }, autologin: { label: 'Autologin', type: 'checkbox', default: false, title: 'Logs you in automatically' }, darkmode: { label: 'Dark mode', type: 'checkbox', default: true, title: 'Makes Edupage dark' }, }, 'events': { 'init': oninit } }); function oninit(){ GM_registerMenuCommand('Settings', () => { gmc.open() }) let removeintrobtn = gmc.get("modify_startbutton"); let fake_adult_student = gmc.get("modify_adult_student"); let fake_admin = gmc.get("modify_admin_stuff"); let fake_not_restricted = gmc.get("modify_restricted"); let fake_logged_in = gmc.get("modify_logged_in"); let disable_encoding = gmc.get("modify_encoding"); let change_strings = gmc.get("modify_strings"); let darkmode = gmc.get("darkmode"); let autologin = gmc.get("autologin"); let strings = { 3276: "budeme Ťa otravovať za", 3275: "Teraz ťa nebudeme chvíľu otravovať, ale", 3272: "Už kašli na školu, nemá to zmysel a", 3274: "Zabudni na úlohy,", }; function deleteNotX (jNode) { jNode.remove (); } // Define your modified function function modifiedGetLoggedUserType() { // Your custom code here return 'Admin'; // Override the return value as needed } function justtrue(){ return true; } function justfalse(){ return false; } function modifiedbarEncLink(url) { return url; } if(removeintrobtn){ //removes intro button waitForKeyElements ("a.learnMoreBtn", deleteNotX); } // Find and replace the original function if (typeof EdubarUtils !== 'undefined') { if(fake_admin){ if(typeof EdubarUtils.getLoggedUserType === 'function'){ EdubarUtils.getLoggedUserType = modifiedGetLoggedUserType; console.log('EdubarUtils.getLoggedUserType overridden successfully.'); } if (typeof EdubarUtils.isWebpageAdmin === 'function') { EdubarUtils.isWebpageAdmin = justtrue; console.log('EdubarUtils.isWebpageAdmin overridden successfully.'); } else { console.error('EdubarUtils.isWebpageAdmin not found or not a function.'); } if (typeof EdubarUtils.hasUserRight === 'function') { EdubarUtils.hasUserRight = justtrue; console.log('EdubarUtils.hasUserRight overridden successfully.'); } else { console.error('EdubarUtils.hasUserRight not found or not a function.'); } if (typeof EdubarUtils.isAdmin === 'function') { EdubarUtils.isAdmin = justtrue; console.log('EdubarUtils.isAdmin overridden successfully.'); } else { console.error('EdubarUtils.isAdmin not found or not a function.'); } if (typeof EdubarUtils.isUcitelOrAdmin === 'function') { EdubarUtils.isUcitelOrAdmin = justtrue; console.log('EdubarUtils.isUcitelOrAdmin overridden successfully.'); } else { console.error('EdubarUtils.isUcitelOrAdmin not found or not a function.'); } } if(fake_adult_student){ if (typeof EdubarUtils.isAdultStudent === 'function') { EdubarUtils.isAdultStudent = justtrue; console.log('EdubarUtils.isAdultStudent overridden successfully.'); } else { console.error('EdubarUtils.isAdultStudent not found or not a function.'); } if (typeof EdubarUtils.isParentOrAdultStudent === 'function') { EdubarUtils.isParentOrAdultStudent = justtrue; console.log('EdubarUtils.isParentOrAdultStudent overridden successfully.'); } else { console.error('EdubarUtils.isParentOrAdultStudent not found or not a function.'); } } if(fake_not_restricted){ if (typeof EdubarUtils.isRestrictedEdupage === 'function') { EdubarUtils.isRestrictedEdupage = justfalse; console.log('EdubarUtils.isRestrictedEdupage overridden successfully.'); } else { console.error('EdubarUtils.isRestrictedEdupage not found or not a function.'); } } if(fake_logged_in){ if (typeof EdubarUtils.isLoggedToPortal === 'function') { EdubarUtils.isLoggedToPortal = justtrue; console.log('EdubarUtils.isLoggedToPortal overridden successfully.'); } else { console.error('EdubarUtils.isLoggedToPortal not found or not a function.'); } } } else { console.error('EdubarUtils not found or not a function.'); } if(disable_encoding){ if (typeof unsafeWindow.barEncLink === 'function') { unsafeWindow.barEncLink = modifiedbarEncLink; //unsafeWindow.AscMobileAppVersion = "69420"; unsafeWindow.$j.post = function(url, data, success, dataType, eqav) { if (!eqav) { eqav = 1; } if(data && Object.keys(data).length === 0) { data = { eqap: "", eqacs: "da39a3ee5e6b4b0d3255bfef95601890afd80709", eqaz: 0, } } url += (url.indexOf('?') >= 0 ? '&' : '?')+'eqav='+eqav+'&maxEqav='+unsafeWindow.maxEqav; return $j.origPost(url, data, success, dataType); }; //MobileAppBridge.isActive = function() { // return false; //} console.log("barEncLink overriden successfully."); } else { console.error('barEncLink not found or not a function.'); } } if(change_strings){ if (typeof unsafeWindow.Langs === 'object') { for (var key in strings) { var value = strings[key]; unsafeWindow.Langs[key] = value; } console.log("Strings overriden successfully."); } else { console.error('Langs not found or not a function.'); } } // If Dark Mode is enabled, apply the styles if (darkmode) { const style = document.createElement('style'); style.textContent = darkmodecss; document.head.appendChild(style); } if (autologin) { (async function() { // Function to get value using postMessage async function getValue(k) { return new Promise((resolve) => { window.addEventListener("message", (e) => { console.log(e); if (e.data.message === "getValueResponse") { resolve(e.data.value); } }); window.postMessage({ message: "getValue", key: k }, "*"); }); } // Wait for the DOM to be ready await new Promise(resolve => { if (document.readyState === 'complete') { resolve(); } else { window.addEventListener('load', resolve); } }); // Select elements const userField = document.querySelector("#home_Login_1e1"); const passField = document.querySelector("#home_Login_1e2"); // Check if userField exists and host matches if (userField && location.host === (await getValue("autologin_host")) + ".edupage.org") { // Populate fields with autologin credentials userField.value = await getValue("autologin_username"); passField.value = await getValue("autologin_password"); // Click the submit button } })(); } } })();