implement branch switching
This commit is contained in:
parent
960abca5cc
commit
cd9d1b8095
10 changed files with 127 additions and 30 deletions
|
@ -12,6 +12,7 @@ import de.com.baseband.client.feature.render.HUD;
|
||||||
import de.com.baseband.client.registry.Configuration;
|
import de.com.baseband.client.registry.Configuration;
|
||||||
import de.com.baseband.client.registry.Updater;
|
import de.com.baseband.client.registry.Updater;
|
||||||
import de.com.baseband.client.util.interact.Chat;
|
import de.com.baseband.client.util.interact.Chat;
|
||||||
|
import de.com.baseband.prod.LoadHandler;
|
||||||
import de.tudbut.tools.Lock;
|
import de.tudbut.tools.Lock;
|
||||||
import hint.Mobf;
|
import hint.Mobf;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -28,7 +29,7 @@ public class BaseBand {
|
||||||
public static final Logger LOGGER = LogManager.getLogger("BaseBand");
|
public static final Logger LOGGER = LogManager.getLogger("BaseBand");
|
||||||
public static final SecureRandom RANDOM = new SecureRandom();
|
public static final SecureRandom RANDOM = new SecureRandom();
|
||||||
|
|
||||||
public static String buildString = "Broadway";
|
public static String buildString = LoadHandler.data.getBoolean("main-branch") ? "Dark Side of the Moon" : "Broadway";
|
||||||
public static final EventManager eventManager = new EventManager(LOGGER::error);
|
public static final EventManager eventManager = new EventManager(LOGGER::error);
|
||||||
public static final RemoteEventManager remoteEventManager = new RemoteEventManager();
|
public static final RemoteEventManager remoteEventManager = new RemoteEventManager();
|
||||||
public static final FMLEventHandler fmlEventHandlerInstance = new FMLEventHandler();
|
public static final FMLEventHandler fmlEventHandlerInstance = new FMLEventHandler();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.com.baseband.client;
|
package de.com.baseband.client;
|
||||||
|
|
||||||
|
import de.com.baseband.prod.LoadHandler;
|
||||||
import net.minecraftforge.common.ForgeVersion;
|
import net.minecraftforge.common.ForgeVersion;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
|
@ -25,8 +26,7 @@ public class DevStub implements IFMLLoadingPlugin {
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void onInit(FMLPostInitializationEvent event) {
|
public void onInit(FMLPostInitializationEvent event) {
|
||||||
BaseBand.buildString = "Dark Side of the Moon";
|
LoadHandler.data.set("main-branch", true);
|
||||||
BaseBand.onInit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
package de.com.baseband.prod;
|
package de.com.baseband.prod;
|
||||||
|
|
||||||
import de.com.baseband.client.BaseBand;
|
import de.com.baseband.client.BaseBand;
|
||||||
|
import de.tudbut.parsing.TCN;
|
||||||
|
|
||||||
public class LoadHandler {
|
public class LoadHandler {
|
||||||
|
|
||||||
public static void loaded() {
|
public static TCN data = new TCN();
|
||||||
|
|
||||||
|
public static void loaded(TCN data) {
|
||||||
|
LoadHandler.data = data;
|
||||||
try {
|
try {
|
||||||
Class.forName("de.com.baseband.launcher.Tweaker").getDeclaredMethod("loaded", Class.class).invoke(null, BaseBand.class);
|
Class.forName("de.com.baseband.launcher.Tweaker").getDeclaredMethod("loaded", Class.class).invoke(null, BaseBand.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -48,6 +48,18 @@ public class Main extends ListenerAdapter {
|
||||||
.setDefaultPermissions(DefaultMemberPermissions.DISABLED)
|
.setDefaultPermissions(DefaultMemberPermissions.DISABLED)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
commands.addCommands(
|
||||||
|
Commands.slash("branch", "Set branch of a given user.")
|
||||||
|
.addOptions(new OptionData(USER, "user", "The user who's branch we should change.")
|
||||||
|
.setRequired(true))
|
||||||
|
.addOptions(new OptionData(STRING, "branch", "The branch.")
|
||||||
|
.setRequired(true))
|
||||||
|
.addOptions(new OptionData(STRING, "password", "The admin password.")
|
||||||
|
.setRequired(true))
|
||||||
|
.setGuildOnly(true)
|
||||||
|
.setDefaultPermissions(DefaultMemberPermissions.DISABLED)
|
||||||
|
);
|
||||||
|
|
||||||
commands.addCommands(
|
commands.addCommands(
|
||||||
Commands.slash("add", "Add a user.")
|
Commands.slash("add", "Add a user.")
|
||||||
.addOptions(new OptionData(USER, "user", "The user who's HWID we should reset.")
|
.addOptions(new OptionData(USER, "user", "The user who's HWID we should reset.")
|
||||||
|
@ -133,6 +145,54 @@ public class Main extends ListenerAdapter {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "branch": {
|
||||||
|
User user = event.getOption("user").getAsUser();
|
||||||
|
String branch = event.getOption("branch").getAsString();
|
||||||
|
String password = event.getOption("password").getAsString();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
TCN tcn = new TCN();
|
||||||
|
tcn.set("action", "reset");
|
||||||
|
tcn.set("authorisation", Hasher.sha512hex(password));
|
||||||
|
tcn.set("discord-id", user.getIdLong());
|
||||||
|
tcn.set("branch", branch);
|
||||||
|
tos.writeString(tcn.toString());
|
||||||
|
|
||||||
|
switch (tis.readInt()) {
|
||||||
|
case 201: {
|
||||||
|
event.getChannel().sendMessage("Branch of **`" + user.getName() + "`** has been set.").queue();
|
||||||
|
event.reply("`Success.`").setEphemeral(true).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 403: {
|
||||||
|
event.reply("`Incorrect Admin Password.`").setEphemeral(true).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 400: {
|
||||||
|
event.reply("`Error! I sent malformed data somehow.`").setEphemeral(true).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 404: {
|
||||||
|
event.reply("`User Not Found, Do they have BaseBand?`").setEphemeral(true).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
event.reply("Error! I am out of sync with the server.").setEphemeral(true).queue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
event.reply("Exception occurred pushing data to server.").setEphemeral(true).queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "add": {
|
case "add": {
|
||||||
User user = event.getOption("user").getAsUser();
|
User user = event.getOption("user").getAsUser();
|
||||||
String password = event.getOption("password").getAsString();
|
String password = event.getOption("password").getAsString();
|
||||||
|
@ -148,7 +208,8 @@ public class Main extends ListenerAdapter {
|
||||||
|
|
||||||
switch (tis.readInt()) {
|
switch (tis.readInt()) {
|
||||||
case 201: {
|
case 201: {
|
||||||
event.reply("Created user with username **`" + username + "`**. (`" + user.getName() + "`)").setEphemeral(true).queue();
|
event.getChannel().sendMessage("Created user with username **`" + username + "`**. (`" + user.getName() + "`)").queue();
|
||||||
|
event.reply("`Success.`").setEphemeral(true).queue();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,8 @@ public class Loader implements Util {
|
||||||
|
|
||||||
if(status == Response.OK) {
|
if(status == Response.OK) {
|
||||||
try {
|
try {
|
||||||
|
TCN clientData = TCN.readMap(Tools.stringToMap(key.decryptString(inputStream.readString())));
|
||||||
|
|
||||||
HashMap<String, byte[]> data = new HashMap<>();
|
HashMap<String, byte[]> data = new HashMap<>();
|
||||||
RawKey rk = new RawKey(key.toBytes());
|
RawKey rk = new RawKey(key.toBytes());
|
||||||
int n = inputStream.readInt();
|
int n = inputStream.readInt();
|
||||||
|
@ -75,7 +77,7 @@ public class Loader implements Util {
|
||||||
LOGGER.info("BaseBand downloaded: " + data.size() + " classes.");
|
LOGGER.info("BaseBand downloaded: " + data.size() + " classes.");
|
||||||
classLoader = new CustomClassLoader(data);
|
classLoader = new CustomClassLoader(data);
|
||||||
classLoader.inject();
|
classLoader.inject();
|
||||||
classLoader.informClient();
|
classLoader.informClient(clientData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.fatal("BaseBand failed to (down)load.");
|
LOGGER.fatal("BaseBand failed to (down)load.");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package de.com.baseband.launcher.classloader;
|
||||||
|
|
||||||
import de.com.baseband.launcher.url.URLWrapper;
|
import de.com.baseband.launcher.url.URLWrapper;
|
||||||
import de.com.baseband.launcher.util.Util;
|
import de.com.baseband.launcher.util.Util;
|
||||||
|
import de.tudbut.parsing.TCN;
|
||||||
import de.tudbut.security.*;
|
import de.tudbut.security.*;
|
||||||
import de.tudbut.security.permissionmanager.CallClassRestriction;
|
import de.tudbut.security.permissionmanager.CallClassRestriction;
|
||||||
import de.tudbut.security.permissionmanager.ClassLoaderRestriction;
|
import de.tudbut.security.permissionmanager.ClassLoaderRestriction;
|
||||||
|
@ -77,10 +78,10 @@ public class CustomClassLoader extends ClassLoader implements Util {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void informClient() {
|
public void informClient(TCN clientData) {
|
||||||
LOGGER.info("Informing client that it has been loaded.");
|
LOGGER.info("Informing client that it has been loaded.");
|
||||||
try {
|
try {
|
||||||
this.loadClass("de.com.baseband.prod.LoadHandler").getDeclaredMethod("loaded").invoke(null);
|
this.loadClass("de.com.baseband.prod.LoadHandler").getDeclaredMethod("loaded", TCN.class).invoke(null, clientData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,21 @@ public class BotServiceHandler {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "branch": {
|
||||||
|
TCN user = (TCN) UserHandler.users.stream()
|
||||||
|
.filter(
|
||||||
|
a -> ((TCN) a).getLong("discord-id").equals(tcn.getLong("discord-id"))
|
||||||
|
).findFirst().orElse(null);
|
||||||
|
|
||||||
|
if(user != null) {
|
||||||
|
user.set("branch", tcn.getString("branch"));
|
||||||
|
tos.writeInt(201);
|
||||||
|
} else {
|
||||||
|
tos.writeInt(404);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "add": {
|
case "add": {
|
||||||
long discord_id = tcn.getLong("discord-id");
|
long discord_id = tcn.getLong("discord-id");
|
||||||
String username = tcn.getString("username");
|
String username = tcn.getString("username");
|
||||||
|
@ -72,6 +87,7 @@ public class BotServiceHandler {
|
||||||
userToAdd.set("hardware-id-reset", true);
|
userToAdd.set("hardware-id-reset", true);
|
||||||
userToAdd.set("disabled", false);
|
userToAdd.set("disabled", false);
|
||||||
userToAdd.set("discord-id", discord_id);
|
userToAdd.set("discord-id", discord_id);
|
||||||
|
userToAdd.set("main-branch", false);
|
||||||
|
|
||||||
TCN user = (TCN) UserHandler.users.stream() //checking if it already exists LOL
|
TCN user = (TCN) UserHandler.users.stream() //checking if it already exists LOL
|
||||||
.filter(
|
.filter(
|
||||||
|
|
|
@ -2,6 +2,7 @@ package de.com.baseband.server;
|
||||||
|
|
||||||
import de.tudbut.io.TypedInputStream;
|
import de.tudbut.io.TypedInputStream;
|
||||||
import de.tudbut.io.TypedOutputStream;
|
import de.tudbut.io.TypedOutputStream;
|
||||||
|
import de.tudbut.obj.DoubleTypedObject;
|
||||||
import de.tudbut.parsing.TCN;
|
import de.tudbut.parsing.TCN;
|
||||||
import de.tudbut.tools.Tools;
|
import de.tudbut.tools.Tools;
|
||||||
import de.tudbut.tools.encryption.Key;
|
import de.tudbut.tools.encryption.Key;
|
||||||
|
@ -22,9 +23,12 @@ public class LoaderHandler {
|
||||||
|
|
||||||
TCN userData = TCN.readMap(Tools.stringToMap(key.decryptString(inputStream.readString())));
|
TCN userData = TCN.readMap(Tools.stringToMap(key.decryptString(inputStream.readString())));
|
||||||
|
|
||||||
int response = UserHandler.isValid(userData);
|
DoubleTypedObject<Integer, TCN> response = UserHandler.isValid(userData);
|
||||||
outputStream.writeInt(response);
|
outputStream.writeInt(response.o);
|
||||||
if(response == UserHandler.Response.OK.ordinal()) {
|
if(response.o == UserHandler.Response.OK.ordinal()) {
|
||||||
|
TCN data = new TCN();
|
||||||
|
data.set("main-branch", "main".equals(response.t.getString("branch")));
|
||||||
|
|
||||||
RawKey rk = new RawKey(key.toBytes());
|
RawKey rk = new RawKey(key.toBytes());
|
||||||
outputStream.writeInt(Main.classes.size());
|
outputStream.writeInt(Main.classes.size());
|
||||||
for (Map.Entry<String, byte[]> entry : Main.classes.entrySet()) {
|
for (Map.Entry<String, byte[]> entry : Main.classes.entrySet()) {
|
||||||
|
|
|
@ -35,7 +35,8 @@ public class Main {
|
||||||
public static RSAKey rsaKey;
|
public static RSAKey rsaKey;
|
||||||
|
|
||||||
public static boolean denyAll = false;
|
public static boolean denyAll = false;
|
||||||
public static Map<String, byte[]> classes;
|
public static Map<String, byte[]> classes = new HashMap<>();
|
||||||
|
public static Map<String, byte[]> classesDebug = new HashMap<>();
|
||||||
|
|
||||||
public static void save() {
|
public static void save() {
|
||||||
try {
|
try {
|
||||||
|
@ -82,6 +83,7 @@ public class Main {
|
||||||
tcn.set("hardware-id-reset", true);
|
tcn.set("hardware-id-reset", true);
|
||||||
tcn.set("disabled", false);
|
tcn.set("disabled", false);
|
||||||
tcn.set("discord-id", 0);
|
tcn.set("discord-id", 0);
|
||||||
|
tcn.set("main-branch", false);
|
||||||
|
|
||||||
UserHandler.users.add(tcn);
|
UserHandler.users.add(tcn);
|
||||||
}
|
}
|
||||||
|
@ -91,15 +93,8 @@ public class Main {
|
||||||
|
|
||||||
|
|
||||||
System.out.println("Indexing Jar...");
|
System.out.println("Indexing Jar...");
|
||||||
classes = new HashMap<>();
|
indexJar(classes, "Broadway");
|
||||||
ZipInputStream jar = new ZipInputStream(new FileInputStream("BaseBand-Broadway.jar"));
|
indexJar(classesDebug, "DSM");
|
||||||
ZipEntry entry;
|
|
||||||
while ((entry = jar.getNextEntry()) != null) {
|
|
||||||
byte[] bytes = new StreamReader(jar).readAllAsBytes();
|
|
||||||
classes.put(entry.getName(), bytes);
|
|
||||||
System.out.println(entry.getName() + ": " + bytes.length);
|
|
||||||
jar.closeEntry();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("Enabling Service Handler for Remote Actioning...");
|
System.out.println("Enabling Service Handler for Remote Actioning...");
|
||||||
|
@ -131,6 +126,18 @@ public class Main {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void indexJar(Map<String, byte[]> classes, String label) throws IOException {
|
||||||
|
classes.clear();
|
||||||
|
ZipInputStream jar = new ZipInputStream(new FileInputStream("BaseBand-" + label + ".jar"));
|
||||||
|
ZipEntry entry;
|
||||||
|
while ((entry = jar.getNextEntry()) != null) {
|
||||||
|
byte[] bytes = new StreamReader(jar).readAllAsBytes();
|
||||||
|
classes.put(entry.getName(), bytes);
|
||||||
|
jar.closeEntry();
|
||||||
|
}
|
||||||
|
jar.close();
|
||||||
|
}
|
||||||
|
|
||||||
private static void remoteActionHandler() throws IOException {
|
private static void remoteActionHandler() throws IOException {
|
||||||
ServerSocket server = new ServerSocket(40001);
|
ServerSocket server = new ServerSocket(40001);
|
||||||
Socket client;
|
Socket client;
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package de.com.baseband.server;
|
package de.com.baseband.server;
|
||||||
|
|
||||||
import at.favre.lib.crypto.bcrypt.BCrypt;
|
import at.favre.lib.crypto.bcrypt.BCrypt;
|
||||||
|
import de.tudbut.obj.DoubleTypedObject;
|
||||||
import de.tudbut.parsing.TCN;
|
import de.tudbut.parsing.TCN;
|
||||||
import de.tudbut.parsing.TCNArray;
|
import de.tudbut.parsing.TCNArray;
|
||||||
|
|
||||||
public class UserHandler {
|
public class UserHandler {
|
||||||
public static TCNArray users = new TCNArray();
|
public static TCNArray users = new TCNArray();
|
||||||
|
|
||||||
public static int isValid(TCN remoteTCN) {
|
public static DoubleTypedObject<Integer, TCN> isValid(TCN remoteTCN) {
|
||||||
if(CheckNull.isNull(remoteTCN.get("username"))) {
|
if(CheckNull.isNull(remoteTCN.get("username"))) {
|
||||||
return Response.FORBIDDEN.ordinal();
|
return new DoubleTypedObject<>(Response.FORBIDDEN.ordinal(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -24,35 +25,35 @@ public class UserHandler {
|
||||||
boolean isDisabled = localTCN.getBoolean("disabled");
|
boolean isDisabled = localTCN.getBoolean("disabled");
|
||||||
|
|
||||||
if(isDisabled) { //if they're banned we're not even looking at their TCN
|
if(isDisabled) { //if they're banned we're not even looking at their TCN
|
||||||
return Response.BANNED.ordinal();
|
return new DoubleTypedObject<>(Response.BANNED.ordinal(), localTCN);
|
||||||
}
|
}
|
||||||
|
|
||||||
String remotePassword = remoteTCN.getString("password");
|
String remotePassword = remoteTCN.getString("password");
|
||||||
String remoteHardwareID = remoteTCN.getString("hardware-id");
|
String remoteHardwareID = remoteTCN.getString("hardware-id");
|
||||||
|
|
||||||
if(CheckNull.isNull(remotePassword, remoteHardwareID)) {
|
if(CheckNull.isNull(remotePassword, remoteHardwareID)) {
|
||||||
return Response.SERVER_ERROR.ordinal();
|
return new DoubleTypedObject<>(Response.SERVER_ERROR.ordinal(), localTCN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isReset) {
|
if (isReset) {
|
||||||
localTCN.set("hardware-id-reset", false);
|
localTCN.set("hardware-id-reset", false);
|
||||||
localTCN.set("hardware-id", remoteHardwareID);
|
localTCN.set("hardware-id", remoteHardwareID);
|
||||||
return Response.RESET.ordinal();
|
return new DoubleTypedObject<>(Response.RESET.ordinal(), localTCN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!localHardwareID.equals(remoteTCN.getString("hardware-id"))) {
|
if(!localHardwareID.equals(remoteTCN.getString("hardware-id"))) {
|
||||||
return Response.HWID_INVALID.ordinal();
|
return new DoubleTypedObject<>(Response.HWID_INVALID.ordinal(), localTCN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(BCrypt.verifyer().verify(remotePassword.toCharArray(), localPassword.toCharArray()).verified) {
|
if(BCrypt.verifyer().verify(remotePassword.toCharArray(), localPassword.toCharArray()).verified) {
|
||||||
return Response.OK.ordinal();
|
return new DoubleTypedObject<>(Response.OK.ordinal(), localTCN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LOL
|
//LOL
|
||||||
return Response.FORBIDDEN.ordinal();
|
return new DoubleTypedObject<>(Response.FORBIDDEN.ordinal(), localTCN);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
return Response.SERVER_ERROR.ordinal();
|
return new DoubleTypedObject<>(Response.SERVER_ERROR.ordinal(), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue