304 lines
9.4 KiB
JavaScript
304 lines
9.4 KiB
JavaScript
const {
|
|
app,
|
|
BrowserWindow
|
|
} = require('electron');
|
|
const CryptoJS = require("crypto-js");
|
|
const {
|
|
Client,
|
|
Authenticator
|
|
} = require('minecraft-launcher-core');
|
|
const http = require('http');
|
|
const fs = require('fs');
|
|
var AdmZip = require('adm-zip');
|
|
const request = require('request');
|
|
const passPhrase = "PlumpOrangeOwnNova";
|
|
var updated = false;
|
|
let win;
|
|
const theConsole = console;
|
|
|
|
function getJSONP(url, success) {
|
|
var ud = '_' + +new Date,
|
|
script = document.createElement('script'),
|
|
head = document.getElementsByTagName('head')[0]
|
|
|| document.documentElement;
|
|
window[ud] = function(data) {
|
|
head.removeChild(script);
|
|
success && success(data);
|
|
};
|
|
script.src = url.replace('callback=?', 'callback=' + ud);
|
|
head.appendChild(script);
|
|
}
|
|
|
|
|
|
function windowClosed() {
|
|
theConsole.log("Shutdown");
|
|
}
|
|
|
|
function windowReady() {
|
|
theConsole.log("Ready");
|
|
fs.readFile('./info.json', 'utf8', (err, jsonString) => {
|
|
if (err) {
|
|
console.log("File read failed:", err)
|
|
return
|
|
}
|
|
const config = JSON.parse(jsonString);
|
|
version = config.version;
|
|
});
|
|
}
|
|
|
|
function accountSelected() {
|
|
|
|
}
|
|
|
|
function update() {
|
|
console.log("Needs Updated");
|
|
document.getElementById("launch-txt").innerText = "UPDATING";
|
|
document.getElementById("loading").style.display = "none";
|
|
|
|
const file = fs.createWriteStream("./1.7.10.zip");
|
|
let stream = request({
|
|
uri: 'http://192.95.4.92/1.7.10.zip',
|
|
gzip: true
|
|
})
|
|
.pipe(file)
|
|
.on('finish', () => {
|
|
console.log(`The file is finished downloading.`);
|
|
var zip = new AdmZip("./1.7.10.zip");
|
|
zip.extractAllTo( /*target path*/ "./mc/versions/", /*overwrite*/ true);
|
|
pgetJSONP("http://192.95.4.92/info.json", function(data) {
|
|
console.log(data);
|
|
fs.readFile('./info.json', 'utf8', (err, jsonString) => {
|
|
if (err) {
|
|
console.log("File read failed:", err)
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
return
|
|
}
|
|
|
|
const config = JSON.parse(jsonString);
|
|
config.version.oneseven = data.version.oneseven;
|
|
fs.writeFileSync('./info.json', JSON.stringify(config, null, 2));
|
|
fs.unlinkSync("./1.7.10.zip")
|
|
launch();
|
|
});
|
|
})
|
|
})
|
|
.on('error', (error) => {
|
|
console.log(error);
|
|
return;
|
|
})
|
|
}
|
|
|
|
function launch() {
|
|
//SETS LOADING
|
|
document.getElementById("launch-txt").innerText = "";
|
|
document.getElementById("loading").style.display = "block";
|
|
|
|
//CHECKS FOR UPDATES
|
|
getJSONP("http://192.95.4.92/info.json", function(data) {
|
|
console.log(data);
|
|
fs.readFile('./info.json', 'utf8', (err, jsonString) => {
|
|
if (err) {
|
|
console.log("File read failed:", err)
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
return
|
|
}
|
|
|
|
const config = JSON.parse(jsonString);
|
|
|
|
if (data.version.oneseven != config.version.oneseven) {
|
|
update();
|
|
}
|
|
});
|
|
})
|
|
//ONE INSTANCE CHECKER
|
|
if (document.getElementById("launch-txt").innerText == "READY" || document.getElementById("launch-txt").innerText == "" || document.getElementById("launch-txt").innerText == "UPDATING") {
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
return;
|
|
}
|
|
|
|
//READS CONFIG AND LAUNCHES
|
|
fs.readFile('./info.json', 'utf8', (err, jsonString) => {
|
|
if (err) {
|
|
console.log("File read failed:", err)
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
return
|
|
}
|
|
const config = JSON.parse(jsonString);
|
|
|
|
//CHECKS FOR SELECTED ACCOUNT
|
|
if (config.selected == "" || config.accounts[config.selected] == null) {
|
|
setTimeout(document.getElementById("launch-txt").innerText = "NO ACC", 2000);
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
return;
|
|
}
|
|
|
|
//PARSES TOKEN
|
|
let cached = CryptoJS.AES.decrypt(config.accounts[config.selected].cachedInfo, passPhrase).toString(CryptoJS.enc.Utf8);
|
|
let details = cached.split(":");
|
|
|
|
//GETS LAUNCH DETAILS AND SETS CONFIG
|
|
let auth = Authenticator.getAuth(details[0], details[1]);
|
|
let opts = {
|
|
clientPackage: null,
|
|
authorization: auth,
|
|
root: "./mc",
|
|
timeout: 60000,
|
|
version: {
|
|
number: "1.7.10",
|
|
type: "release",
|
|
custom: "Solar 1.7.10"
|
|
},
|
|
memory: {
|
|
max: config.ram,
|
|
min: 1
|
|
}
|
|
}
|
|
|
|
//LAUNCH
|
|
const launcher = new Client();
|
|
launcher.launch(opts);
|
|
|
|
//CLOSE LISTENER
|
|
launcher.on('close', (e) => {
|
|
document.getElementById("launch-txt").innerText = "LAUNCH";
|
|
document.getElementById("loading").style.display = "none";
|
|
updated = false;
|
|
});
|
|
|
|
//DEBUG
|
|
launcher.on('debug', (e) => theConsole.log(e.toString('utf-8')));
|
|
|
|
//CONSOLE OUTPUT
|
|
launcher.on('data', (e) => {
|
|
theConsole.log(e.toString('utf-8'));
|
|
if (!updated) {
|
|
updated = true;
|
|
document.getElementById("launch-txt").innerText = "READY";
|
|
document.getElementById("loading").style.display = "none";
|
|
}
|
|
});
|
|
|
|
//ERRORS
|
|
launcher.on('error', (e) => {
|
|
theConsole.log(e.toString('utf-8'));
|
|
});
|
|
});
|
|
return;
|
|
}
|
|
|
|
function login() {
|
|
emailIn = document.getElementById("email");
|
|
passwordIn = document.getElementById("password");
|
|
|
|
if (emailIn.value.toString() == "" || !emailIn.value.toString().includes("@")) {
|
|
theConsole.log("Invalid Email");
|
|
return;
|
|
}
|
|
if (passwordIn.value.toString() == "") {
|
|
theConsole.log("Empty Password");
|
|
return;
|
|
}
|
|
|
|
|
|
var email = emailIn.value.toString();
|
|
var password = passwordIn.value.toString();
|
|
|
|
const requestObject = {
|
|
url: "https://authserver.mojang.com" + "/authenticate",
|
|
json: {
|
|
agent: {
|
|
name: "Minecraft",
|
|
version: 1
|
|
},
|
|
username: email,
|
|
password: password,
|
|
requestUser: true
|
|
}
|
|
};
|
|
|
|
request.post(requestObject, function(error, response, body) {
|
|
if (error) resolve(error);
|
|
if (!body.selectedProfile || body.selectedProfile.paid == false || body.selectedProfile.suspended == true) {
|
|
console.log("Invalid Login!");
|
|
return;
|
|
} else {
|
|
console.log(body);
|
|
fs.readFile('./info.json', 'utf8', (err, jsonString) => {
|
|
const config = JSON.parse(jsonString);
|
|
var newCache = CryptoJS.AES.encrypt(email + ":" + password, passPhrase).toString();
|
|
config.accounts[body.selectedProfile.id] = {
|
|
displayName: body.selectedProfile.name,
|
|
cachedInfo: newCache
|
|
};
|
|
config.selected = body.selectedProfile.id;
|
|
document.getElementById("pfp").src = "https://visage.surgeplay.com/face/" + config.selected;
|
|
document.getElementById("accountName").innerText = config.accounts[config.selected].displayName;
|
|
|
|
if (!document.getElementById(config.selected)) {
|
|
var account = document.createElement("div");
|
|
account.className = "account-select";
|
|
account.id = config.selected;
|
|
account.addEventListener("click", (e) => selectAccount(event));
|
|
var accountButton = document.createElement("button");
|
|
var accountJson = config.accounts[config.selected];
|
|
accountButton.innerText = accountJson.displayName;
|
|
account.appendChild(accountButton);
|
|
accountSelect.appendChild(account);
|
|
}
|
|
resetAccountPopup();
|
|
fs.writeFileSync('./info.json', JSON.stringify(config, null, 2));
|
|
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
function resetAccountPopup() {
|
|
|
|
//Close Switch Account / Login Menu
|
|
document.getElementById("switchAccountPopup").style.display = "none";
|
|
document.getElementById("loginPopup").style.display = "none";
|
|
//Open Account Menu
|
|
document.getElementById("accountPopup").style.display = "block";
|
|
}
|
|
|
|
function createWindow() {
|
|
// Create the browser window.
|
|
win = new BrowserWindow({
|
|
width: 1000,
|
|
height: 800,
|
|
icon: "Nova.png",
|
|
title: "Solar Client",
|
|
resizable: false,
|
|
frame: false,
|
|
transparent: true,
|
|
autoHideMenuBar: true,
|
|
hasShadow: false,
|
|
fullscreenable: false,
|
|
minimizable: false,
|
|
webPreferences: {
|
|
nodeIntegration: true
|
|
}
|
|
});
|
|
//win.setMenu(null);
|
|
win.setFullScreenable(false);
|
|
win.setMaximizable(false);
|
|
win.isResizable(false);
|
|
win.loadFile("index.html");
|
|
win.on("closed", windowClosed);
|
|
win.webContents.on('new-window', function(e, url) {
|
|
e.preventDefault();
|
|
require('electron').shell.openExternal(url);
|
|
});
|
|
windowReady();
|
|
}
|
|
|
|
app.on('ready', createWindow) |