Added Uliratha

This commit is contained in:
JKetelaar
2015-04-30 00:54:07 +02:00
parent 8341173f78
commit ee6f13934e
17 changed files with 580 additions and 248 deletions
@@ -6,7 +6,8 @@ package org.parabot.core;
* @author Everel * @author Everel
*/ */
public class Configuration { public class Configuration {
public static final String LOGIN_SERVER = "https://www.parabot.org/community/api/login.php?username=%s&password=%s"; // public static final String LOGIN_SERVER = "https://www.parabot.org/community/api/login.php?username=%s&password=%s";
public static final String LOGIN_SERVER = "http://bdn.parabot.org/api/v2/users/login";
public static final String GET_SCRIPTS = "http://bdn.parabot.org/api/get.php?action=scripts_scripts&server="; public static final String GET_SCRIPTS = "http://bdn.parabot.org/api/get.php?action=scripts_scripts&server=";
public static final String GET_SCRIPT = "http://bdn.parabot.org/api/get.php?action=scripts_script&id="; public static final String GET_SCRIPT = "http://bdn.parabot.org/api/get.php?action=scripts_script&id=";
public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers"; public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers";
@@ -1,5 +1,6 @@
package org.parabot.core; package org.parabot.core;
import org.json.simple.parser.JSONParser;
import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.asm.ASMClassLoader;
import org.parabot.core.classpath.ClassPath; import org.parabot.core.classpath.ClassPath;
import org.parabot.core.desc.ServerProviderInfo; import org.parabot.core.desc.ServerProviderInfo;
@@ -13,6 +14,7 @@ import org.parabot.environment.input.Keyboard;
import org.parabot.environment.input.Mouse; import org.parabot.environment.input.Mouse;
import org.parabot.environment.scripts.Script; import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.randoms.RandomHandler; import org.parabot.environment.scripts.randoms.RandomHandler;
import org.parabot.environment.scripts.uliratha.UlirathaClient;
import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.ServerProvider;
import java.applet.Applet; import java.applet.Applet;
@@ -47,6 +49,8 @@ public class Context {
private Mouse mouse; private Mouse mouse;
private Keyboard keyboard; private Keyboard keyboard;
private ServerProviderInfo providerInfo; private ServerProviderInfo providerInfo;
private UlirathaClient ulirathaClient;
private JSONParser jsonParser;
private Context(final ServerProvider serverProvider) { private Context(final ServerProvider serverProvider) {
threadGroups.put(Thread.currentThread().getThreadGroup(), this); threadGroups.put(Thread.currentThread().getThreadGroup(), this);
@@ -58,6 +62,8 @@ public class Context {
this.classLoader = new ASMClassLoader(classPath); this.classLoader = new ASMClassLoader(classPath);
this.randomHandler = new RandomHandler(); this.randomHandler = new RandomHandler();
this.jsonParser = new JSONParser();
} }
public static Context getInstance(ServerProvider serverProvider) { public static Context getInstance(ServerProvider serverProvider) {
@@ -325,7 +331,19 @@ public class Context {
return username; return username;
} }
public UlirathaClient getUlirathaClient() {
return ulirathaClient;
}
public void setUlirathaClient(UlirathaClient ulirathaClient) {
this.ulirathaClient = ulirathaClient;
}
public static void setUsername(String username) { public static void setUsername(String username) {
Context.username = username; Context.username = username;
} }
public JSONParser getJsonParser() {
return jsonParser;
}
} }
+1 -2
View File
@@ -9,12 +9,11 @@ import java.nio.file.Paths;
import java.security.DigestInputStream; import java.security.DigestInputStream;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
/** /**
* The core of parabot * The core of parabot
* *
* @author Everel * @author Everel, JKetelaar
*/ */
public class Core { public class Core {
public static boolean mDebug; public static boolean mDebug;
@@ -15,6 +15,7 @@ import java.net.URLEncoder;
public class Account { public class Account {
private String username; private String username;
private String password; private String password;
private String api;
/** /**
* *
@@ -26,7 +27,13 @@ public class Account {
this.password = password; this.password = password;
} }
/** public Account(String username, String password, String api) {
this.username = username;
this.password = password;
this.api = api;
}
/**
* Gets user's parabot account name * Gets user's parabot account name
* @return username. * @return username.
*/ */
@@ -68,4 +75,7 @@ public class Account {
return null; return null;
} }
public String getApi() {
return api;
}
} }
@@ -1,5 +1,6 @@
package org.parabot.core.forum; package org.parabot.core.forum;
import org.json.simple.JSONObject;
import org.parabot.core.Configuration; import org.parabot.core.Configuration;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.parsers.scripts.BDNScripts; import org.parabot.core.parsers.scripts.BDNScripts;
@@ -9,6 +10,8 @@ import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.executers.BDNScriptsExecuter; import org.parabot.environment.scripts.executers.BDNScriptsExecuter;
import org.parabot.environment.servers.executers.PublicServerExecuter; import org.parabot.environment.servers.executers.PublicServerExecuter;
import java.io.BufferedReader;
import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
@@ -61,20 +64,25 @@ public final class AccountManager {
if (account != null) { if (account != null) {
throw new IllegalStateException("Already logged in."); throw new IllegalStateException("Already logged in.");
} }
String contents; JSONObject result;
try { try {
contents = WebUtil.getContents(String.format( BufferedReader contents = WebUtil.getReader(WebUtil.getConnection(
Configuration.LOGIN_SERVER, new URL(Configuration.LOGIN_SERVER),
URLEncoder.encode(user, "UTF-8"), URLEncoder.encode(user, "UTF-8"),
URLEncoder.encode(pass, "UTF-8"))); URLEncoder.encode(pass, "UTF-8")));
result = (JSONObject) WebUtil.getJsonParser().parse(contents);
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
return false; return false;
} }
if (contents.equals("correct")) { if (result != null){
account = new Account(user, pass); if (result.get("complete") != null) {
return true; String api = (String) ((JSONObject) result.get("data")).get("api");
account = new Account(user, pass, api);
return true;
}
} }
return false; return false;
} }
@@ -0,0 +1,67 @@
package org.parabot.core.lib.naga;
import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.build.BuildPath;
import org.parabot.core.lib.Library;
import java.io.File;
import java.net.URL;
/**
* @author JKetelaar
*/
public class Naga extends Library {
private static boolean valid;
@Override
public void init() {
if (!hasJar()) {
System.err.println("Failed to load javafx... [jar missing]");
return;
}
Core.verbose("Adding javafx jar file to build path: "
+ getJarFileURL().getPath());
BuildPath.add(getJarFileURL());
try {
Class.forName("javafx.application.Application");
valid = true;
} catch (ClassNotFoundException e) {
System.err
.println("Failed to add javafx to build path, or incorrupt download");
}
Core.verbose("JavaFX initialized.");
}
@Override
public boolean isAdded() {
return valid;
}
@Override
public File getJarFile() {
return new File(Directories.getCachePath(), "naga.jar");
}
@Override
public URL getDownloadLink() {
try {
return new URL("http://bdn.parabot.org/api/v2/data/dependencies/naga");
} catch (Throwable t) {
t.printStackTrace();
}
return null;
}
@Override
public String getLibraryName() {
return "Naga";
}
public static boolean isValid() {
return valid;
}
}
+174 -163
View File
@@ -15,70 +15,71 @@ import java.awt.event.*;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
*
* The bot user interface * The bot user interface
* *
* @author Dane, Everel, Paradox * @author Dane, Everel, Paradox
*
*/ */
public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener { public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener {
private static final long serialVersionUID = -2126184292879805519L; private static final long serialVersionUID = -2126184292879805519L;
private static BotUI instance; private static BotUI instance;
private static JDialog dialog; private static JDialog dialog;
private JMenuItem run, pause, stop; private JMenuItem run, pause, stop;
private boolean runScript, pauseScript; private boolean runScript, pauseScript;
public BotUI(String username, String password) { public BotUI(String username, String password) {
if (instance != null) { if (instance != null) {
throw new IllegalStateException("BotUI already created"); throw new IllegalStateException("BotUI already created");
} }
instance = this; instance = this;
//WebLookAndFeel.install(); //WebLookAndFeel.install();
JPopupMenu.setDefaultLightWeightPopupEnabled(false); JPopupMenu.setDefaultLightWeightPopupEnabled(false);
setTitle("Parabot"); setTitle("Parabot");
setResizable(false); setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenu(); createMenu();
setLayout(new BorderLayout()); setLayout(new BorderLayout());
addComponentListener(this); addComponentListener(this);
addWindowListener(this); addWindowListener(this);
add(GamePanel.getInstance()); add(GamePanel.getInstance());
GamePanel.getInstance().add(VerboseLoader.get(username, password), BorderLayout.CENTER); GamePanel.getInstance().add(VerboseLoader.get(username, password), BorderLayout.CENTER);
add(Logger.getInstance(), BorderLayout.SOUTH); add(Logger.getInstance(), BorderLayout.SOUTH);
SwingUtil.setParabotIcons(this); SwingUtil.setParabotIcons(this);
pack(); pack();
setLocationRelativeTo(null); setLocationRelativeTo(null);
BotDialog.getInstance(this); BotDialog.getInstance(this);
if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) {
BotDialog.getInstance().setVisible(false); BotDialog.getInstance().setVisible(false);
} }
} }
public static BotUI getInstance() { public static BotUI getInstance() {
return instance; return instance;
} }
private void createMenu() { private void createMenu() {
JMenuBar menuBar = new JMenuBar(); JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File"); JMenu file = new JMenu("File");
JMenu scripts = new JMenu("Script"); JMenu scripts = new JMenu("Script");
JMenuItem screenshot = new JMenuItem("Create screenshot");
JMenuItem proxy = new JMenuItem("Network"); JMenuItem proxy = new JMenuItem("Network");
JMenuItem randoms = new JMenuItem("Randoms"); JMenuItem randoms = new JMenuItem("Randoms");
JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog"); JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog");
if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { JMenuItem api = new JMenuItem("Set API key");
dialog.setSelected(true);
} if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) {
dialog.setSelected(true);
}
JMenuItem explorer = new JMenuItem("Reflection explorer"); JMenuItem explorer = new JMenuItem("Reflection explorer");
JMenuItem exit = new JMenuItem("Exit"); JMenuItem exit = new JMenuItem("Exit");
@@ -94,166 +95,176 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
stop.setEnabled(false); stop.setEnabled(false);
stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png"))); stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png")));
screenshot.addActionListener(this);
proxy.addActionListener(this); proxy.addActionListener(this);
randoms.addActionListener(this); randoms.addActionListener(this);
dialog.addActionListener(this); dialog.addActionListener(this);
explorer.addActionListener(this); explorer.addActionListener(this);
exit.addActionListener(this); exit.addActionListener(this);
run.addActionListener(this); run.addActionListener(this);
pause.addActionListener(this); pause.addActionListener(this);
stop.addActionListener(this); stop.addActionListener(this);
api.addActionListener(this);
file.add(screenshot);
file.add(proxy); file.add(proxy);
file.add(randoms); file.add(randoms);
file.add(dialog); file.add(dialog);
file.add(explorer); file.add(explorer);
file.add(exit); file.add(exit);
scripts.add(run); scripts.add(run);
scripts.add(pause); scripts.add(pause);
scripts.add(stop); scripts.add(stop);
scripts.add(api);
menuBar.add(file); menuBar.add(file);
menuBar.add(scripts); menuBar.add(scripts);
setJMenuBar(menuBar); setJMenuBar(menuBar);
} }
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand(); String command = e.getActionCommand();
switch (command) { switch (command) {
case "Exit": case "Set API key":
System.exit(0); String api = JOptionPane.showInputDialog(this, "You can gather your API key from http://bdn.parabot.org/account/");
break; break;
case "Create screenshot":
JOptionPane.showMessageDialog(this, "We are still working on this...");
break;
case "Exit":
System.exit(0);
break;
case "Network": case "Network":
NetworkUI.getInstance().setVisible(true); NetworkUI.getInstance().setVisible(true);
break; break;
case "Randoms": case "Randoms":
ArrayList<String> randoms = new ArrayList<>(); ArrayList<String> randoms = new ArrayList<>();
for (Random r : Context.getInstance().getRandomHandler().getRandoms()) { for (Random r : Context.getInstance().getRandomHandler().getRandoms()) {
randoms.add(r.getName()); randoms.add(r.getName());
} }
RandomUI.getInstance().openFrame(randoms); RandomUI.getInstance().openFrame(randoms);
break; break;
case "Reflection explorer": case "Reflection explorer":
new ReflectUI().setVisible(true); new ReflectUI().setVisible(true);
break; break;
case "Run": case "Run":
if(pauseScript) { if (pauseScript) {
pauseScript = false; pauseScript = false;
pause.setEnabled(true); pause.setEnabled(true);
run.setEnabled(false); run.setEnabled(false);
setScriptState(Script.STATE_RUNNING); setScriptState(Script.STATE_RUNNING);
break; break;
} }
new ScriptSelector().setVisible(true); new ScriptSelector().setVisible(true);
break; break;
case "Pause": case "Pause":
setScriptState(Script.STATE_PAUSE); setScriptState(Script.STATE_PAUSE);
pause.setEnabled(false); pause.setEnabled(false);
run.setEnabled(true); run.setEnabled(true);
pauseScript = true; pauseScript = true;
break; break;
case "Stop": case "Stop":
setScriptState(Script.STATE_STOPPED); setScriptState(Script.STATE_STOPPED);
break; break;
case "Disable dialog": case "Disable dialog":
BotDialog.getInstance().setVisible(!dialog.isVisible()); BotDialog.getInstance().setVisible(!dialog.isVisible());
break; break;
default: default:
System.out.println("Invalid command: " + command); System.out.println("Invalid command: " + command);
} }
} }
protected void setDialog(JDialog dialog) { protected void setDialog(JDialog dialog) {
BotUI.dialog = dialog; BotUI.dialog = dialog;
} }
@Override @Override
public void componentMoved(ComponentEvent e) { public void componentMoved(ComponentEvent e) {
if(dialog == null || !isVisible()) { if (dialog == null || !isVisible()) {
return; return;
} }
Point gameLocation = GamePanel.getInstance().getLocationOnScreen(); Point gameLocation = GamePanel.getInstance().getLocationOnScreen();
dialog.setLocation(gameLocation.x, gameLocation.y); dialog.setLocation(gameLocation.x, gameLocation.y);
} }
public void toggleRun() { public void toggleRun() {
runScript = !runScript; runScript = !runScript;
if(runScript) { if (runScript) {
scriptRunning(); scriptRunning();
} else { } else {
scriptStopped(); scriptStopped();
} }
} }
private void scriptRunning() { private void scriptRunning() {
run.setEnabled(false); run.setEnabled(false);
pause.setEnabled(true); pause.setEnabled(true);
stop.setEnabled(true); stop.setEnabled(true);
} }
private void scriptStopped() { private void scriptStopped() {
run.setEnabled(true); run.setEnabled(true);
pause.setEnabled(false); pause.setEnabled(false);
stop.setEnabled(false); stop.setEnabled(false);
} }
private void setScriptState(int state) { private void setScriptState(int state) {
if (Context.getInstance().getRunningScript() != null) { if (Context.getInstance().getRunningScript() != null) {
Context.getInstance().getRunningScript().setState(state); Context.getInstance().getRunningScript().setState(state);
} }
} }
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
if(isVisible()) { if (isVisible()) {
BotDialog.getInstance().setSize(getSize()); BotDialog.getInstance().setSize(getSize());
} }
} }
@Override @Override
public void componentShown(ComponentEvent e) { public void componentShown(ComponentEvent e) {
} }
@Override @Override
public void componentHidden(ComponentEvent e) { public void componentHidden(ComponentEvent e) {
} }
@Override @Override
public void windowActivated(WindowEvent arg0) { public void windowActivated(WindowEvent arg0) {
} }
@Override @Override
public void windowClosed(WindowEvent arg0) { public void windowClosed(WindowEvent arg0) {
} }
@Override @Override
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
} }
@Override @Override
public void windowDeactivated(WindowEvent arg0) { public void windowDeactivated(WindowEvent arg0) {
} }
@Override @Override
public void windowDeiconified(WindowEvent arg0) { public void windowDeiconified(WindowEvent arg0) {
if(isVisible()) { if (isVisible()) {
BotDialog.getInstance().setVisible(false); BotDialog.getInstance().setVisible(false);
BotDialog.getInstance().setVisible(true); BotDialog.getInstance().setVisible(true);
} }
} }
@Override @Override
public void windowIconified(WindowEvent arg0) { public void windowIconified(WindowEvent arg0) {
} }
@Override @Override
public void windowOpened(WindowEvent arg0) { public void windowOpened(WindowEvent arg0) {
} }
} }
@@ -1,5 +1,6 @@
package org.parabot.core.ui; package org.parabot.core.ui;
import org.parabot.core.Context;
import org.parabot.core.ui.components.GamePanel; import org.parabot.core.ui.components.GamePanel;
import javax.swing.*; import javax.swing.*;
@@ -46,5 +47,9 @@ public class Logger extends JPanel {
public static void addMessage(String message){ public static void addMessage(String message){
instance.model.addElement(message); instance.model.addElement(message);
if (Context.getInstance().getUlirathaClient() != null) {
Context.getInstance().getUlirathaClient().sendMessage(message);
}
} }
} }
@@ -52,7 +52,7 @@ public class LoginUI extends JFrame {
} else { } else {
Core.verbose("Failed to log in."); Core.verbose("Failed to log in.");
JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null,
"Incorrect username or password.", "Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", "Error",
JOptionPane.ERROR_MESSAGE); JOptionPane.ERROR_MESSAGE);
} }
@@ -4,6 +4,7 @@ import org.parabot.core.Core;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.core.lib.Library; import org.parabot.core.lib.Library;
import org.parabot.core.lib.javafx.JavaFX; import org.parabot.core.lib.javafx.JavaFX;
import org.parabot.core.lib.naga.Naga;
import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.parsers.servers.ServerParser;
import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
@@ -29,6 +30,7 @@ public class Environment {
LinkedList<Library> libs = new LinkedList<>(); LinkedList<Library> libs = new LinkedList<>();
libs.add(new JavaFX()); libs.add(new JavaFX());
libs.add(new Naga());
for(Library lib : libs) { for(Library lib : libs) {
if(!lib.hasJar()) { if(!lib.hasJar()) {
@@ -1,5 +1,6 @@
package org.parabot.environment.api.utils; package org.parabot.environment.api.utils;
import org.json.simple.parser.JSONParser;
import org.parabot.core.io.ProgressListener; import org.parabot.core.io.ProgressListener;
import org.parabot.core.io.SizeInputStream; import org.parabot.core.io.SizeInputStream;
@@ -17,6 +18,9 @@ import java.net.URLEncoder;
* *
*/ */
public class WebUtil { public class WebUtil {
private static JSONParser jsonParser;
private static String agent = "Mozilla/5.0 (Wind0ws NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"; private static String agent = "Mozilla/5.0 (Wind0ws NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1";
/** /**
@@ -267,4 +271,10 @@ public class WebUtil {
return null; return null;
} }
public static JSONParser getJsonParser() {
if (jsonParser == null){
jsonParser = new JSONParser();
}
return jsonParser;
}
} }
@@ -3,6 +3,7 @@ package org.parabot.environment.scripts;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.ui.BotUI; import org.parabot.core.ui.BotUI;
import org.parabot.core.ui.Logger;
import org.parabot.environment.api.utils.Time; import org.parabot.environment.api.utils.Time;
import org.parabot.environment.scripts.framework.*; import org.parabot.environment.scripts.framework.*;
import org.parabot.environment.scripts.framework.Frameworks; import org.parabot.environment.scripts.framework.Frameworks;
@@ -66,14 +67,6 @@ public class Script implements Runnable {
public final void run() { public final void run() {
Context context = Context.getInstance(); Context context = Context.getInstance();
// Core.verbose("Initializing security manager...");
// String previousPolicy = System.getProperty("java.security.policy");
// SecurityManager previousSecurityManager = System.getSecurityManager();
// System.setProperty("java.security.policy", Directories.getSettingsPath() + "/java.policy");
// SecurityManagerDemo sm = new SecurityManagerDemo();
// System.setSecurityManager(sm);
Core.verbose("Initializing script..."); Core.verbose("Initializing script...");
context.getServerProvider().initScript(this); context.getServerProvider().initScript(this);
Core.verbose("Done."); Core.verbose("Done.");
@@ -102,7 +95,7 @@ public class Script implements Runnable {
frameWorkType = TYPE_OTHER; frameWorkType = TYPE_OTHER;
} }
Core.verbose("Running script..."); Core.verbose("Running script...");
System.out.println("Script started."); Logger.addMessage("Script started.");
try { try {
while(this.state != STATE_STOPPED) { while(this.state != STATE_STOPPED) {
if(context.getRandomHandler().checkAndRun()) { if(context.getRandomHandler().checkAndRun()) {
@@ -122,13 +115,17 @@ public class Script implements Runnable {
} }
Core.verbose("Script stopped/finished, unloading and stopping..."); Core.verbose("Script stopped/finished, unloading and stopping...");
onFinish(); onFinish();
System.out.println("Script stopped."); Logger.addMessage("Script stopped.");
context.getServerProvider().unloadScript(this); context.getServerProvider().unloadScript(this);
this.state = STATE_STOPPED; this.state = STATE_STOPPED;
context.setRunningScript(null); context.setRunningScript(null);
if (context.getUlirathaClient() != null) {
context.getUlirathaClient().disconnect();
context.setUlirathaClient(null);
}
BotUI.getInstance().toggleRun(); BotUI.getInstance().toggleRun();
// System.setProperty("java.security.policy", previousPolicy);
// System.setSecurityManager(previousSecurityManager);
Core.verbose("Done."); Core.verbose("Done.");
} }
@@ -167,4 +164,7 @@ public class Script implements Runnable {
Time.sleep(ms); Time.sleep(ms);
} }
public int getState() {
return state;
}
} }
@@ -8,6 +8,7 @@ import org.parabot.core.ui.utils.UILog;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.Script; import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.loader.JavaScriptLoader; import org.parabot.environment.scripts.loader.JavaScriptLoader;
import org.parabot.environment.scripts.uliratha.UlirathaExecuter;
import javax.swing.*; import javax.swing.*;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@@ -47,51 +48,52 @@ public class BDNScriptsExecuter extends ScriptExecuter {
Configuration.GET_SCRIPT + this.id), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); Configuration.GET_SCRIPT + this.id), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword());
final String contentType = urlConnection.getHeaderField("Content-type"); final String contentType = urlConnection.getHeaderField("Content-type");
if(contentType.equals("text/html")) { switch (contentType) {
// failed to fetch script case "text/html":
UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE); // failed to fetch script
} else if(contentType.equals("application/jar")) { UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE);
break;
case "application/jar":
//// JAR LOADING PART ////////
// succesfull request, jar returned
final ClassPath classPath = new ClassPath();
classPath.addJar(urlConnection);
//// JAR LOADING PART //////// final JavaScriptLoader loader = new JavaScriptLoader(classPath);
final String[] scriptClasses = loader.getScriptClassNames();
if (scriptClasses == null || scriptClasses.length == 0) {
UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE);
return;
} else if (scriptClasses.length > 1) {
UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]");
return;
}
final String className = scriptClasses[0];
try {
final Class<?> scriptClass = loader.loadClass(className);
final Constructor<?> con = scriptClass.getConstructor();
final Script script = (Script) con.newInstance();
super.finalize(tg, script);
// succesfull request, jar returned if (manager.getAccount().getApi() != null) {
final ClassPath classPath = new ClassPath(); new UlirathaExecuter(manager.getAccount().getApi()).start(this.id);
classPath.addJar(urlConnection); }
} catch (NoClassDefFoundError | ClassNotFoundException ignored) {
final JavaScriptLoader loader = new JavaScriptLoader(classPath); UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE);
final String[] scriptClasses = loader.getScriptClassNames(); } catch (Throwable t) {
if(scriptClasses == null || scriptClasses.length == 0) { t.printStackTrace();
UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
return; }
} else if(scriptClasses.length > 1) { //// END JAR LOADING ////
UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]"); break;
return; default:
} UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE);
break;
final String className = scriptClasses[0];
try {
final Class<?> scriptClass = loader.loadClass(className);
final Constructor<?> con = scriptClass.getConstructor();
final Script script = (Script) con.newInstance();
super.finalize(tg, script);
} catch (NoClassDefFoundError | ClassNotFoundException ignored) {
UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE);
} catch (Throwable t) {
t.printStackTrace();
UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
}
//// END JAR LOADING ////
} else {
UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE);
} }
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
} }
} }
} }
@@ -1,5 +0,0 @@
package org.parabot.environment.scripts.executers;
public class SecurityManagerDemo extends SecurityManager {
}
@@ -0,0 +1,156 @@
package org.parabot.environment.scripts.uliratha;
import naga.ExceptionObserver;
import naga.NIOService;
import naga.NIOSocket;
import naga.SocketObserver;
import naga.packetreader.RegularPacketReader;
import naga.packetwriter.RegularPacketWriter;
import org.parabot.core.ui.Logger;
import java.io.*;
/**
* @author JKetelaar
*/
public class UlirathaClient extends Thread {
private String host;
private int port;
private NIOSocket socket;
private boolean connected;
private int scriptID;
private String api;
private boolean valid;
public UlirathaClient(String host, int port, int scriptID, String api) {
this.host = host;
this.port = port;
this.scriptID = scriptID;
this.api = api;
}
@Override
public void run() {
connect();
}
private void connect() {
try {
System.out.println("Connecting....");
NIOService service = new NIOService();
service.setExceptionObserver(new ExceptionObserver() {
@Override
public void notifyExceptionThrown(Throwable throwable) {
throwable.printStackTrace();
if (valid) {
reconnect();
connected = false;
}
}
});
socket = service.openSocket(host, port);
socket.setPacketReader(new RegularPacketReader(4, true));
socket.setPacketWriter(new RegularPacketWriter(4, true));
socket.listen(new SocketObserver() {
public void connectionOpened(NIOSocket nioSocket) {
try {
sendObjects(nioSocket, new Object[]{76, scriptID, api});
} catch (IOException e) {
e.printStackTrace();
}
}
public void packetReceived(NIOSocket socket, byte[] packet) {
try {
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(packet));
int packetID = stream.readInt();
switch (packetID){
case 75:
valid = stream.readBoolean();
if (valid) {
Logger.addMessage("We're connected with the Uliratha server!");
connected = true;
}else{
socket.close();
}
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void packetSent(NIOSocket nioSocket, Object o) {
}
public void connectionBroken(NIOSocket nioSocket, Exception exception) {
if (valid) {
reconnect();
connected = false;
}
}
});
while (true) {
service.selectBlocking();
}
} catch (IOException e) {
if (valid) {
reconnect();
connected = false;
}
}
}
private void reconnect() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
connect();
}
public boolean isConnected() {
return connected;
}
public void disconnect(){
valid = false;
socket.close();
}
private void sendObjects(NIOSocket socket, Object[] objects) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
DataOutputStream dataStream = new DataOutputStream(stream);
for (Object o : objects) {
if (o instanceof String) {
dataStream.writeUTF((String) o);
} else if (o instanceof Integer) {
dataStream.writeInt((Integer) o);
} else if (o instanceof byte[]) {
dataStream.write((byte[]) o);
} else if (o instanceof Long) {
dataStream.writeLong((Long) o);
} else if (o instanceof Boolean) {
dataStream.writeBoolean((Boolean) o);
}
}
dataStream.flush();
final byte[] content = stream.toByteArray();
dataStream.close();
socket.write(content);
}
public void sendMessage(String message){
try {
sendObjects(socket, new Object[]{83, message});
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,49 @@
package org.parabot.environment.scripts.uliratha;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.parabot.core.Context;
import org.parabot.environment.api.utils.WebUtil;
import java.io.IOException;
/**
* @author JKetelaar
*/
public class UlirathaExecuter {
private String api;
private static boolean isVip = true;
public UlirathaExecuter(String api){
this.api = api;
}
public void start(int scriptID){
if (UlirathaExecuter.isVip) {
String vipUrl = "http://bdn.parabot.org/api/v2/user/" + api + "/vip";
JSONParser parser = new JSONParser();
try {
JSONObject vipObject = (JSONObject) parser.parse(WebUtil.getReader(vipUrl));
boolean isVip = (boolean) vipObject.get("result");
if (isVip) {
String serverUrl = "http://bdn.parabot.org/api/v2/clients/server";
JSONObject serverObject = (JSONObject) parser.parse(WebUtil.getReader(serverUrl));
JSONObject detailsObject = (JSONObject) serverObject.get("result");
String host = (String) detailsObject.get("host");
long port = (long) detailsObject.get("port");
UlirathaClient client = new UlirathaClient(host, (int) port, scriptID, api);
client.start();
Context.getInstance().setUlirathaClient(client);
}else{
UlirathaExecuter.isVip = false;
}
} catch (IOException | ParseException | ClassCastException e) {
e.printStackTrace();
}
}
}
}
@@ -3,7 +3,6 @@ package org.parabot.environment.servers.executers;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.parsers.randoms.RandomParser; import org.parabot.core.parsers.randoms.RandomParser;
import org.parabot.core.ui.components.PaintComponent; import org.parabot.core.ui.components.PaintComponent;
import org.parabot.environment.scripts.executers.SecurityManagerDemo;
import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.ServerProvider;
/** /**