Displays a (working) login form.
// ==UserScript==
// @name ExHentai - Working Login Screen (Cookies)
// @namespace Violentmonkey Scripts
// @match https://exhentai.org/*
// @grant GM_getValue
// @version 1.7
// @author shlsdv
// @license MIT
// @description Displays a (working) login form.
// @icon https://e-hentai.org/favicon.ico
// @homepageURL https://greasyfork.org/en/scripts/470374-working-exhentai-login-screen-cookies
// ==/UserScript==
function getCookie(name) {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.startsWith(name + '=')) {
return cookie.substring(name.length + 1);
}
}
return null;
}
function isLoggedIn() {
return getCookie('igneous') && getCookie('igneous') !== 'mystery'
&& getCookie('ipb_member_id') && getCookie('ipb_pass_hash');
}
function setCookie(name, value, domain) {
document.cookie = name + '=' + value + '; path=/' + (domain ? '; domain=' + domain+';' : '');
}
function deleteAllCookies() {
var cookieList = document.cookie.split (/;\s*/);
for (var J = cookieList.length - 1; J >= 0; --J) {
var cookieName = cookieList[J].replace (/\s*(\w+)=.+$/, "$1");
eraseCookie (cookieName);
}
}
function eraseCookie(cookieName) {
var domain = document.domain;
var domain2 = document.domain.replace (/^www\./, "");
var domain3 = document.domain.replace (/^(\w+\.)+?(\w+\.\w+)$/, "$2");;
var pathNodes = location.pathname.split ("/").map ( function (pathWord) {
return '/' + pathWord;
} );
var cookPaths = [""].concat (pathNodes.map ( function (pathNode) {
if (this.pathStr) {
this.pathStr += pathNode;
} else {
this.pathStr = "; path=";
return (this.pathStr + pathNode);
}
return (this.pathStr);
} ) );
( eraseCookie = function (cookieName) {
cookPaths.forEach ( function (pathStr) {
var diagStr = cookieName + "=" + pathStr + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = diagStr;
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain2 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain3 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
} );
} ) (cookieName);
}
function addCustomCookies(id, pass, sk=""){
setCookie('sl', 'dm_1');
setCookie('ipb_member_id', id);
setCookie('ipb_pass_hash', pass);
if (sk) {
setCookie('sk', sk, '.exhentai.org');
}
}
function submitLoginForm() {
deleteAllCookies();
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
var [id, sk=""] = username.split(';');
addCustomCookies(id.trim(), password.trim(), sk.trim());
location.reload();
}
function checkStoredLogin() {
var id = GM_getValue('ipb_member_id', '');
var pass = GM_getValue('ipb_pass_hash', '');
var sk = GM_getValue('sk', '');
if (id && pass) {
console.log("Stored credentials found. Setting cookies.");
addCustomCookies(id, pass, sk);
location.reload();
return true;
}
return false;
}
(function() {
function addLoginForm() {
if (typeof isLoggedIn === "function" && isLoggedIn()) {
console.log("Cookies found, not adding form");
return;
}
if (checkStoredLogin()) return;
console.log("Adding login form");
document.body.style.backgroundColor = '#121212';
document.body.style.color = '#ffffff';
var loginForm = document.createElement('form');
loginForm.setAttribute('id', 'login-form');
loginForm.style.position = 'fixed';
loginForm.style.top = '50%';
loginForm.style.left = '50%';
loginForm.style.transform = 'translate(-50%, -50%)';
loginForm.style.zIndex = '9999';
loginForm.style.backgroundColor = '#ffffff';
loginForm.style.padding = '30px';
loginForm.style.borderRadius = '8px';
loginForm.style.boxShadow = '0 4px 20px rgba(255, 255, 255, 0.1)';
loginForm.style.fontFamily = 'Arial, sans-serif';
loginForm.style.color = '#333';
loginForm.style.transition = 'all 0.3s ease';
loginForm.style.width = '300px';
loginForm.innerHTML = `
<div style="text-align: center;">
<h2>Login</h2>
<input type="text" id="username" name="username" placeholder="ipb_member_id;sk" style="height: 30px;" required><br><br>
<input type="password" id="password" name="password" placeholder="ipb_pass_hash" style="height: 30px;" required><br><br>
<input type="submit" value="Submit" style="width: 80px; height: 40px;">
</div>
<p>
<b>Update</b>: The igneous cookie should no longer be used.
</p>
<details>
<summary style="cursor: pointer; color: blue; text-decoration: underline;">Help</summary>
<p>
In the first field, enter your 'ipb_member_id' cookie.
In the second field, enter your 'ipb_pass_hash'.
Obtain these two cookies in your browser's developer tools after successfully entering ExHentai.
You can also add your 'sk' cookie after a semicolon in the first field to fix potential watchlist-related issues.
</p>
</details>
`;
loginForm.addEventListener('submit', function(event) {
event.preventDefault();
submitLoginForm();
});
document.addEventListener('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
submitLoginForm();
}
});
document.body.appendChild(loginForm);
}
if (document.readyState === 'complete' || document.readyState === 'interactive') {
addLoginForm();
} else {
document.addEventListener('DOMContentLoaded', addLoginForm);
}
})();