Skip to content

Commit

Permalink
Merge pull request #928 from tbodt/fix-firefox
Browse files Browse the repository at this point in the history
Make firefox problems go away
  • Loading branch information
dimdenGD authored Sep 2, 2024
2 parents 34341da + 7ea802a commit 1f06d6b
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 42 deletions.
1 change: 0 additions & 1 deletion pack.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ copyDir('./', '../OldTwitterFirefox').then(async () => {
"webRequest",
"webRequestBlocking"
];
manifest.content_security_policy = "script-src 'self' 'unsafe-eval' 'sha256-0c7AR7s38d85qcAifgyf/pxhEECsIYaQQxFzScXjrKI='; object-src 'self'",
delete manifest.sandbox;
delete manifest.host_permissions;
delete manifest.declarative_net_request;
Expand Down
26 changes: 22 additions & 4 deletions sandbox.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,35 @@
let data = event.data;
if (data.action === 'init') {
try {
let url = `https://abs.twimg.com/responsive-web/client-web/ondemand.s.${data.challengeCode}a.js`
let challengeData;
try {
challengeData = await fetch(url).then(res => res.text());
} catch(e) {
await sleep(500);
try {
challengeData = await fetch(url).then(res => res.text());
} catch(e) {
await sleep(1000);
try {
challengeData = await fetch(url).then(res => res.text());
} catch(e) {
throw new Error('Failed to fetch challenge data: ' + e);
}
}
}

let animsDiv = document.getElementById('anims');
for(let anim of data.anims) {
animsDiv.innerHTML += `\n${anim}`;
}
let verif = document.querySelector('meta[name="twitter-site-verification"]');
verif.content = data.verificationCode;
let headerRegex = /(\d+):(.+)=>.+default:\(\)=>(\w).+,\w\(\d+\)\;/;
let headerMatch = data.code.match(headerRegex);
let headerMatch = challengeData.match(headerRegex);
if(!headerMatch) {
console.error('Uh oh, header not found!! Report to https://github.com/dimdenGD/OldTwitter/issues');
event.source.postMessage({action: 'initError', error: `Header not found at ${data.challengeCode} (${String(data.code).slice(0, 500)}...)`}, event.origin);
event.source.postMessage({action: 'initError', error: `Header not found at ${data.challengeCode} (${String(challengeData).slice(0, 500)}...)`}, event.origin);
initError = true;
return;
}
Expand All @@ -41,7 +59,7 @@
// It only ever executes code from trusted Twitter domain, abs.twimg.com (specifically their script that generates security headers)
// It's impossible to have it contained in extension itself, since it's generated dynamically
// you can see where script is loaded in scripts/twchallenge.js
eval(data.code.replace(headerRegex, '$1:$2=>{window._CHALLENGE=()=>$3;'));
eval(challengeData.replace(headerRegex, '$1:$2=>{window._CHALLENGE=()=>$3;'));
let id = headerMatch[1];
webpackChunk_twitter_responsive_web[0][1][id]();
solver = window._CHALLENGE()();
Expand Down Expand Up @@ -85,4 +103,4 @@
});
</script>
</body>
</html>
</html>
63 changes: 26 additions & 37 deletions scripts/twchallenge.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,35 @@
let solverIframe;
let solveId = 0;
let solveCallbacks = {};
let solveQueue = []
let solverReady = false;
let solverErrored = false;
let sentData = false;

let solverIframe = document.createElement('iframe');
solverIframe.style.display = 'none';
solverIframe.src = chrome.runtime.getURL(`sandbox.html`);
let injectedBody = document.getElementById('injected-body');
if(injectedBody) {
injectedBody.appendChild(solverIframe);
} else {
let int = setInterval(() => {
let injectedBody = document.getElementById('injected-body');
if(injectedBody) {
injectedBody.appendChild(solverIframe);
clearInterval(int);
}
}, 10);
let sandboxUrl = fetch(chrome.runtime.getURL(`sandbox.html`))
.then(resp => resp.blob())
.then(blob => URL.createObjectURL(blob))
.catch(console.error);

function createSolverFrame() {
if (solverIframe) solverIframe.remove();
solverIframe = document.createElement('iframe');
solverIframe.style.display = 'none';
sandboxUrl.then(url => solverIframe.src = url);
let injectedBody = document.getElementById('injected-body');
if(injectedBody) {
injectedBody.appendChild(solverIframe);
} else {
let int = setInterval(() => {
let injectedBody = document.getElementById('injected-body');
if(injectedBody) {
injectedBody.appendChild(solverIframe);
clearInterval(int);
}
}, 10);
}
}
createSolverFrame();

function solveChallenge(path, method) {
return new Promise((resolve, reject) => {
Expand Down Expand Up @@ -51,11 +61,7 @@ function solveChallenge(path, method) {
setInterval(() => {
if(!document.getElementById('loading-box').hidden && sentData && solveQueue.length) {
console.log("Something's wrong with the challenge solver, reloading", solveQueue);
solverIframe.remove();
solverIframe = document.createElement('iframe');
solverIframe.style.display = 'none';
solverIframe.src = chrome.runtime.getURL(`sandbox.html`);
document.getElementById('injected-body').appendChild(solverIframe);
createSolverFrame();
initChallenge();
}
}, 2000);
Expand Down Expand Up @@ -143,22 +149,6 @@ async function initChallenge() {
let anims = Array.from(dom.querySelectorAll('svg[id^="loading-x"]')).map(svg => svg.outerHTML);

let challengeCode = homepageData.match(/"ondemand.s":"(\w+)"/)[1];
let challengeData;
try {
challengeData = await _fetch(`https://abs.twimg.com/responsive-web/client-web/ondemand.s.${challengeCode}a.js`).then(res => res.text());
} catch(e) {
await sleep(500);
try {
challengeData = await _fetch(`https://abs.twimg.com/responsive-web/client-web/ondemand.s.${challengeCode}a.js`).then(res => res.text());
} catch(e) {
await sleep(1000);
try {
challengeData = await _fetch(`https://abs.twimg.com/responsive-web/client-web/ondemand.s.${challengeCode}a.js`).then(res => res.text());
} catch(e) {
throw new Error('Failed to fetch challenge data: ' + e);
}
}
}

OLDTWITTER_CONFIG.verificationKey = verificationKey;

Expand All @@ -167,7 +157,6 @@ async function initChallenge() {
if(!solverIframe || !solverIframe.contentWindow) return setTimeout(sendInit, 50);
solverIframe.contentWindow.postMessage({
action: 'init',
code: challengeData,
challengeCode,
anims,
verificationCode: OLDTWITTER_CONFIG.verificationKey
Expand All @@ -187,4 +176,4 @@ async function initChallenge() {
}
};

initChallenge();
initChallenge();

0 comments on commit 1f06d6b

Please sign in to comment.