mirror of https://github.com/GooseMod/GooseMod
Injector v4.3.0: Added changelog, rewrote CSP Bypasser
parent
46e41702b8
commit
7b920178bc
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,45 @@
|
||||
import sleep from '../util/sleep';
|
||||
|
||||
const image = 'https://media.discordapp.net/attachments/756146058924392542/771374562184658944/2018-11-14-11-36-30-1200x800.png?width=853&height=569';
|
||||
const changelogURL = 'https://goosemod-api.netlify.app/latestChangelogRelease.json';
|
||||
|
||||
let version, generated;
|
||||
|
||||
let goosemodScope = {};
|
||||
|
||||
export const setThisScope = (scope) => {
|
||||
goosemodScope = scope;
|
||||
};
|
||||
|
||||
export const show = async () => {
|
||||
if (!generated) {
|
||||
await generate();
|
||||
}
|
||||
|
||||
goosemodScope.changelog.resetChangelog();
|
||||
|
||||
goosemodScope.changelog.setChangelog(generated);
|
||||
|
||||
goosemodScope.changelog.showChangelog();
|
||||
|
||||
await sleep(100);
|
||||
|
||||
document.querySelector('.modal-3O0aXp .title-3sZWYQ').textContent = `GooseMod ${version}`; // Set changelog modal title
|
||||
|
||||
document.querySelector('.modal-3O0aXp .footer-2gL1pp').remove(); // Remove footer of modal with social media
|
||||
|
||||
goosemodScope.changelog.resetChangelog();
|
||||
};
|
||||
|
||||
export const generate = async () => {
|
||||
const changelog = await goosemodScope.cspBypasser.json(changelogURL, false);
|
||||
|
||||
version = changelog.version;
|
||||
|
||||
generated = {
|
||||
image,
|
||||
|
||||
date: changelog.date,
|
||||
body: changelog.body
|
||||
};
|
||||
};
|
@ -0,0 +1,50 @@
|
||||
let goosemodScope = {};
|
||||
let showHideMod = {};
|
||||
|
||||
let originalChangelog = {};
|
||||
|
||||
export const setThisScope = (scope) => {
|
||||
goosemodScope = scope;
|
||||
showHideMod = goosemodScope.webpackModules.findByProps('showChangeLog');
|
||||
|
||||
const orig = goosemodScope.webpackModules.findByProps('changeLog').changeLog;
|
||||
|
||||
originalChangelog = {
|
||||
body: orig.body,
|
||||
image: orig.image,
|
||||
date: orig.date
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
export const showChangelog = () => {
|
||||
showHideMod.showChangeLog();
|
||||
};
|
||||
|
||||
export const hideChangelog = () => {
|
||||
showHideMod.hideChangeLog();
|
||||
};
|
||||
|
||||
export const resetChangelog = () => {
|
||||
let mod = goosemodScope.webpackModules.findByProps('changeLog');
|
||||
|
||||
mod.changeLog.body = originalChangelog.body;
|
||||
mod.changeLog.image = originalChangelog.image;
|
||||
mod.changeLog.date = originalChangelog.date;
|
||||
}
|
||||
|
||||
export const setChangelog = ({body, image, date}) => {
|
||||
let mod = goosemodScope.webpackModules.findByProps('changeLog');
|
||||
|
||||
if (body) {
|
||||
mod.changeLog.body = body;
|
||||
}
|
||||
|
||||
if (image) {
|
||||
mod.changeLog.image = image;
|
||||
}
|
||||
|
||||
if (date) {
|
||||
mod.changeLog.date = date;
|
||||
}
|
||||
};
|
@ -1,113 +1,74 @@
|
||||
let goosemodScope = {};
|
||||
|
||||
let noCSPFetch;
|
||||
|
||||
export default {
|
||||
setThisScope: (scope) => {
|
||||
goosemodScope = scope;
|
||||
},
|
||||
|
||||
frame: document.createElement('object'),
|
||||
noCSPFetch: undefined,
|
||||
|
||||
init: async () => {
|
||||
goosemodScope.cspBypasser.frame.data = location.origin;
|
||||
document.body.appendChild(goosemodScope.cspBypasser.frame);
|
||||
|
||||
let script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
if (window.goosemod_noCSPFetch) {
|
||||
noCSPFetch = window.goosemod_noCSPFetch;
|
||||
|
||||
let code = `
|
||||
window.addEventListener('message', async (e) => {
|
||||
const {url, type, useCORSProxy} = e.data;
|
||||
|
||||
if (!url) return;
|
||||
delete window.goosemod_noCSPFetch;
|
||||
|
||||
const proxyURL = useCORSProxy ? \`https://cors-anywhere.herokuapp.com/\${url}\` : url;
|
||||
return;
|
||||
}
|
||||
|
||||
if (type === 'img') {
|
||||
let canvas = document.createElement('canvas');
|
||||
let ctx = canvas.getContext('2d');
|
||||
let el = document.createElement('object');
|
||||
|
||||
let img = new Image();
|
||||
img.src = proxyURL;
|
||||
img.crossOrigin = 'anonymous';
|
||||
el.data = location.origin;
|
||||
document.body.appendChild(el);
|
||||
|
||||
img.onload = () => {
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
/*let script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
|
||||
ctx.drawImage(img, 0, 0);
|
||||
let code = `
|
||||
window.addEventListener('message', async (e) => {
|
||||
const { url, type, useCORSProxy, useCache } = e.data;
|
||||
|
||||
e.source.postMessage({ verify: url, data: canvas.toDataURL("image/png") });
|
||||
};
|
||||
if (!url) return;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const req = await fetch(proxyURL, {
|
||||
cache: 'no-store'
|
||||
});
|
||||
const req = await fetch(url, {
|
||||
cache: useCache ? 'default' : 'no-store'
|
||||
});
|
||||
|
||||
e.source.postMessage({ verify: url, data: await req[type]() });
|
||||
});`;
|
||||
e.source.postMessage({ verify: url, data: await req[type]() });
|
||||
});`;
|
||||
|
||||
script.appendChild(document.createTextNode(code));
|
||||
|
||||
goosemodScope.cspBypasser.frame.contentDocument.head.appendChild(script);
|
||||
},
|
||||
|
||||
runCode: (code) => {
|
||||
let script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
|
||||
script.appendChild(document.createTextNode(code));
|
||||
goosemodScope.cspBypasser.frame.contentDocument.head.appendChild(script);*/
|
||||
|
||||
goosemodScope.cspBypasser.frame.contentDocument.head.appendChild(script);
|
||||
noCSPFetch = el.contentWindow.fetch;
|
||||
},
|
||||
|
||||
json: (url, useCORSProxy = true) => {
|
||||
return new Promise((res) => {
|
||||
goosemodScope.cspBypasser.frame.contentWindow.postMessage({url, type: 'json', useCORSProxy});
|
||||
|
||||
window.addEventListener('message', async (e) => {
|
||||
if (e.data.verify !== url) return;
|
||||
fetch: (url, type, useCORSProxy = true) => {
|
||||
return new Promise(async (finalRes) => {
|
||||
const sendURL = useCORSProxy ? `https://cors-anywhere.herokuapp.com/${url}` : url;
|
||||
|
||||
res(e.data.data);
|
||||
});
|
||||
});
|
||||
},
|
||||
const sendType = type === 'img' ? 'blob' : type;
|
||||
|
||||
text: (url, useCORSProxy = true) => {
|
||||
return new Promise((res) => {
|
||||
goosemodScope.cspBypasser.frame.contentWindow.postMessage({url, type: 'text', useCORSProxy});
|
||||
const req = await noCSPFetch(sendURL);
|
||||
const resp = await req[sendType]();
|
||||
|
||||
window.addEventListener('message', async (e) => {
|
||||
if (e.data.verify !== url) return;
|
||||
if (type === 'img') {
|
||||
resp = URL.createObjectURL(resp);
|
||||
}
|
||||
|
||||
res(e.data.data);
|
||||
});
|
||||
return finalRes(resp);
|
||||
});
|
||||
},
|
||||
|
||||
blob: (url, useCORSProxy = true) => {
|
||||
return new Promise((res) => {
|
||||
goosemodScope.cspBypasser.frame.contentWindow.postMessage({url, type: 'blob', useCORSProxy});
|
||||
json: (url, useCORSProxy) => goosemodScope.cspBypasser.fetch(url, 'json', useCORSProxy),
|
||||
|
||||
window.addEventListener('message', async (e) => {
|
||||
if (e.data.verify !== url) return;
|
||||
text: (url, useCORSProxy) => goosemodScope.cspBypasser.fetch(url, 'text', useCORSProxy),
|
||||
|
||||
res(e.data.data);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
image: (url, useCORSProxy = true) => {
|
||||
return new Promise((res) => {
|
||||
goosemodScope.cspBypasser.frame.contentWindow.postMessage({url, type: 'img', useCORSProxy});
|
||||
|
||||
window.addEventListener('message', async (e) => {
|
||||
if (e.data.verify !== url) return;
|
||||
blob: (url, useCORSProxy) => goosemodScope.cspBypasser.fetch(url, 'blob', useCORSProxy),
|
||||
|
||||
res(e.data.data);
|
||||
});
|
||||
});
|
||||
},
|
||||
image: (url, useCORSProxy) => goosemodScope.cspBypasser.fetch(url, 'img', useCORSProxy),
|
||||
};
|
Loading…
Reference in new issue