diff --git a/.classpath b/.classpath
index bd694ba..a657be2 100644
--- a/.classpath
+++ b/.classpath
@@ -3,5 +3,6 @@
+
diff --git a/.gitignore b/.gitignore
index 29295b4..9d49d56 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.settings/
bin/
-.project
\ No newline at end of file
+.project
+config.txt
\ No newline at end of file
diff --git a/mysql-connector-java-8.0.28.jar b/mysql-connector-java-8.0.28.jar
new file mode 100644
index 0000000..ac8904e
Binary files /dev/null and b/mysql-connector-java-8.0.28.jar differ
diff --git a/src/be/jeffcheasey88/peeratcode/Configuration.java b/src/be/jeffcheasey88/peeratcode/Configuration.java
new file mode 100644
index 0000000..bad96e0
--- /dev/null
+++ b/src/be/jeffcheasey88/peeratcode/Configuration.java
@@ -0,0 +1,76 @@
+package be.jeffcheasey88.peeratcode;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.lang.reflect.Field;
+
+public class Configuration {
+
+ private String db_host;
+ private String db_port;
+ private String db_user;
+ private String db_database;
+ private String db_password;
+
+ private File _file;
+
+ public Configuration(String path){
+ this._file = new File(path);
+ System.out.println("Config on "+_file.getAbsolutePath());
+ }
+
+ public void load() throws Exception{
+ if(!this._file.exists()) return;
+ BufferedReader reader = new BufferedReader(new FileReader(this._file));
+ String line;
+ while((line = reader.readLine()) != null){
+ String[] split = line.split("=");
+ Field field = getClass().getDeclaredField(split[0]);
+ if(field == null) continue;
+ field.setAccessible(true);
+ field.set(this, split[1]);
+ }
+ reader.close();
+ }
+
+ public void save() throws Exception{
+ if(!_file.exists()){
+ File parent = _file.getParentFile();
+ if(!parent.exists()) parent.mkdirs();
+ _file.createNewFile();
+ }
+ Field[] fields = getClass().getDeclaredFields();
+ BufferedWriter writer = new BufferedWriter(new FileWriter(_file));
+ for(Field field : fields){
+ field.setAccessible(true);
+ if(field.getName().startsWith("_")) continue;
+ Object value = field.get(this);
+ writer.write(field.getName()+"="+value);
+ }
+ writer.flush();
+ writer.close();
+ }
+
+ public String getDbHost(){
+ return this.db_host;
+ }
+
+ public String getDbPort(){
+ return this.db_port;
+ }
+
+ public String getDbUser(){
+ return this.db_user;
+ }
+
+ public String getDbDatabase(){
+ return this.db_database;
+ }
+
+ public String getDbPassword(){
+ return this.db_password;
+ }
+}
\ No newline at end of file
diff --git a/src/be/jeffcheasey88/peeratcode/Main.java b/src/be/jeffcheasey88/peeratcode/Main.java
index b67722c..e1e16d2 100644
--- a/src/be/jeffcheasey88/peeratcode/Main.java
+++ b/src/be/jeffcheasey88/peeratcode/Main.java
@@ -2,6 +2,8 @@ package be.jeffcheasey88.peeratcode;
import java.net.ServerSocket;
import java.net.Socket;
+import java.sql.Connection;
+import java.sql.DriverManager;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -16,6 +18,12 @@ import be.jeffcheasey88.peeratcode.webserver.Router;
public class Main {
public static void main(String[] args) throws Exception {
+ Configuration config = new Configuration("config.txt");
+ config.load();
+
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ Connection con = DriverManager.getConnection("jdbc:mysql://"+config.getDbHost()+":"+config.getDbPort()+"/"+config.getDbDatabase()+"",config.getDbUser(), config.getDbPassword());
+
Router router = new Router();
router.setDefault(new Response(){
@@ -32,7 +40,8 @@ public class Main {
}
});
- initRoutes(router);
+ initRoutes(router, con);
+
ServerSocket server = new ServerSocket(80);
@@ -41,10 +50,10 @@ public class Main {
Client client = new Client(socket, router);
client.start();
}
- }
-
- private static void initRoutes(Router router){
- router.register(new PuzzleList());
+
+ }
+ private static void initRoutes(Router router, Connection con){
+ router.register(new PuzzleList(con));
}
}
diff --git a/src/be/jeffcheasey88/peeratcode/webserver/Client.java b/src/be/jeffcheasey88/peeratcode/webserver/Client.java
index e6ff537..e3da39f 100644
--- a/src/be/jeffcheasey88/peeratcode/webserver/Client.java
+++ b/src/be/jeffcheasey88/peeratcode/webserver/Client.java
@@ -20,7 +20,7 @@ public class Client extends Thread{
@Override
public void run(){
try {
- String[] headers = reader.readLine().split("\s");
+ String[] headers = reader.readLine().split("\\s");
System.out.println(Arrays.toString(headers));
router.exec(headers[0], headers[1], reader, writer);
} catch (Exception e) {
diff --git a/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java b/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java
index 7375f4c..ddcf466 100644
--- a/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java
+++ b/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java
@@ -4,8 +4,6 @@ import java.security.MessageDigest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.xml.bind.DatatypeConverter;
-
import org.json.simple.parser.JSONParser;
public class HttpUtil {
@@ -32,7 +30,7 @@ public class HttpUtil {
writer.write("Connection: Upgrade\n");
writer.write("Upgrade: websocket\n");
writer.write("Sec-WebSocket-Accept: "+
- DatatypeConverter.printBase64Binary(
+ printBase64Binary(
MessageDigest.getInstance("SHA-1").
digest((key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").getBytes("UTF-8")))+"\n");
writer.write("\n");
@@ -257,4 +255,56 @@ public class HttpUtil {
return " ";
}
+
+ //From javax.xml.bind.DatatypeConverter
+ private static String printBase64Binary(byte[] array){
+ char[] arrayOfChar = new char[(array.length + 2) / 3 * 4];
+ int i = _printBase64Binary(array, 0, array.length, arrayOfChar, 0);
+ assert i == arrayOfChar.length;
+ return new String(arrayOfChar);
+ }
+
+ private static int _printBase64Binary(byte[] paramArrayOfbyte, int paramInt1, int paramInt2, char[] paramArrayOfchar, int paramInt3) {
+ int i = paramInt2;
+ int j;
+ for (j = paramInt1; i >= 3; j += 3) {
+ paramArrayOfchar[paramInt3++] = encode(paramArrayOfbyte[j] >> 2);
+ paramArrayOfchar[paramInt3++] = encode((paramArrayOfbyte[j] & 0x3) << 4 | paramArrayOfbyte[j + 1] >> 4 & 0xF);
+ paramArrayOfchar[paramInt3++] = encode((paramArrayOfbyte[j + 1] & 0xF) << 2 | paramArrayOfbyte[j + 2] >> 6 & 0x3);
+ paramArrayOfchar[paramInt3++] = encode(paramArrayOfbyte[j + 2] & 0x3F);
+ i -= 3;
+ }
+ if (i == 1) {
+ paramArrayOfchar[paramInt3++] = encode(paramArrayOfbyte[j] >> 2);
+ paramArrayOfchar[paramInt3++] = encode((paramArrayOfbyte[j] & 0x3) << 4);
+ paramArrayOfchar[paramInt3++] = '=';
+ paramArrayOfchar[paramInt3++] = '=';
+ }
+ if (i == 2) {
+ paramArrayOfchar[paramInt3++] = encode(paramArrayOfbyte[j] >> 2);
+ paramArrayOfchar[paramInt3++] = encode((paramArrayOfbyte[j] & 0x3) << 4 | paramArrayOfbyte[j + 1] >> 4 & 0xF);
+ paramArrayOfchar[paramInt3++] = encode((paramArrayOfbyte[j + 1] & 0xF) << 2);
+ paramArrayOfchar[paramInt3++] = '=';
+ }
+ return paramInt3;
+ }
+
+ private static char encode(int paramInt) {
+ return encodeMap[paramInt & 0x3F];
+ }
+ private static final char[] encodeMap = initEncodeMap();
+
+ private static char[] initEncodeMap() {
+ char[] arrayOfChar = new char[64];
+ byte b;
+ for (b = 0; b < 26; b++)
+ arrayOfChar[b] = (char)(65 + b);
+ for (b = 26; b < 52; b++)
+ arrayOfChar[b] = (char)(97 + b - 26);
+ for (b = 52; b < 62; b++)
+ arrayOfChar[b] = (char)(48 + b - 52);
+ arrayOfChar[62] = '+';
+ arrayOfChar[63] = '/';
+ return arrayOfChar;
+ }
}