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; + } }