Refractor FrameWork : remove HttpUtil
This commit is contained in:
parent
0249a7641f
commit
01f9aef845
24 changed files with 264 additions and 324 deletions
|
@ -5,8 +5,6 @@ import static be.jeffcheasey88.peeratcode.framework.RequestType.OPTIONS;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import javax.net.ssl.SSLServerSocket;
|
import javax.net.ssl.SSLServerSocket;
|
||||||
|
@ -14,7 +12,6 @@ import javax.net.ssl.SSLServerSocketFactory;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.Client;
|
import be.jeffcheasey88.peeratcode.framework.Client;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
|
@ -51,7 +48,7 @@ public class Main{
|
||||||
config.getTokenExpiration());
|
config.getTokenExpiration());
|
||||||
|
|
||||||
router.setDefault((matcher, user, reader, writer) -> {
|
router.setDefault((matcher, user, reader, writer) -> {
|
||||||
HttpUtil.responseHeaders(writer, 404, "Access-Control-Allow-Origin: *");
|
writer.response(404, "Access-Control-Allow-Origin: *");
|
||||||
writer.write("404 not Found.\n");
|
writer.write("404 not Found.\n");
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
@ -61,7 +58,7 @@ public class Main{
|
||||||
@Route(path = "^(.*)$", type = OPTIONS)
|
@Route(path = "^(.*)$", type = OPTIONS)
|
||||||
@Override
|
@Override
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *",
|
writer.response(200, "Access-Control-Allow-Origin: *",
|
||||||
"Access-Control-Allow-Methods: *", "Access-Control-Allow-Headers: *");
|
"Access-Control-Allow-Methods: *", "Access-Control-Allow-Headers: *");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -23,13 +23,12 @@ public class Client extends Thread{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(){
|
public void run(){
|
||||||
User user = null;
|
try{
|
||||||
try {
|
|
||||||
String[] headers = reader.readLine().split("\\s");
|
String[] headers = reader.readLine().split("\\s");
|
||||||
System.out.println(Arrays.toString(headers));
|
System.out.println(Arrays.toString(headers));
|
||||||
reader.readHeaders();
|
reader.readHeaders();
|
||||||
|
|
||||||
router.exec(RequestType.valueOf(headers[0]), headers[1], user = isLogin(reader), reader, writer);
|
router.exec(RequestType.valueOf(headers[0]), headers[1], isLogin(reader), reader, writer);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
@ -52,7 +51,7 @@ public class Client extends Thread{
|
||||||
JwtClaims jwtClaims = jwtConsumer.processToClaims(auth);
|
JwtClaims jwtClaims = jwtConsumer.processToClaims(auth);
|
||||||
return new User(jwtClaims);
|
return new User(jwtClaims);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
HttpUtil.responseHeaders(writer, 401, "Access-Control-Allow-Origin: *");
|
writer.response(401, "Access-Control-Allow-Origin: *");
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
throw e;
|
throw e;
|
||||||
|
|
|
@ -5,13 +5,16 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class HttpReader {
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
|
public class HttpReader{
|
||||||
|
|
||||||
private static Pattern HEADER_PATTERN = Pattern.compile("^([^:]*):\\s+(.*)$");
|
private static Pattern HEADER_PATTERN = Pattern.compile("^([^:]*):\\s+(.*)$");
|
||||||
|
|
||||||
|
@ -34,7 +37,7 @@ public class HttpReader {
|
||||||
this.reader = origin.reader;
|
this.reader = origin.reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isClosed() {
|
public boolean isClosed(){
|
||||||
return this.socket.isClosed();
|
return this.socket.isClosed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,23 +54,23 @@ public class HttpReader {
|
||||||
return this.headers.get(key.toLowerCase());
|
return this.headers.get(key.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int read(byte[] buffer) throws IOException {
|
public int read(byte[] buffer) throws IOException{
|
||||||
return this.in.read(buffer);
|
return this.in.read(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int read(char[] buffer) throws IOException {
|
public int read(char[] buffer) throws IOException{
|
||||||
return this.reader.read(buffer);
|
return this.reader.read(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String readLine() throws IOException {
|
public String readLine() throws IOException{
|
||||||
return this.reader.readLine();
|
return this.reader.readLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean ready() throws IOException {
|
public boolean ready() throws IOException{
|
||||||
return this.reader.ready();
|
return this.reader.ready();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int readInt() throws Exception {
|
public int readInt() throws Exception{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
result += this.in.read() << 24;
|
result += this.in.read() << 24;
|
||||||
result += this.in.read() << 16;
|
result += this.in.read() << 16;
|
||||||
|
@ -75,4 +78,61 @@ public class HttpReader {
|
||||||
result += this.in.read();
|
result += this.in.read();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> T readJson() throws Exception{
|
||||||
|
String line = "";
|
||||||
|
while (ready()){
|
||||||
|
char[] c = new char[1];
|
||||||
|
read(c);
|
||||||
|
line += c[0];
|
||||||
|
if (c[0] == '}'){
|
||||||
|
Object parse;
|
||||||
|
try {
|
||||||
|
parse = new JSONParser().parse(line);
|
||||||
|
if (parse != null)
|
||||||
|
return (T) parse;
|
||||||
|
}catch(Exception e){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
||||||
|
Content-Disposition: form-data; name="answer"
|
||||||
|
|
||||||
|
12
|
||||||
|
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
||||||
|
Content-Disposition: form-data; name="filename"
|
||||||
|
|
||||||
|
webpack.js
|
||||||
|
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
||||||
|
Content-Disposition: form-data; name="code_file"; filename="webpack.js"
|
||||||
|
Content-Type: text/javascript
|
||||||
|
|
||||||
|
|
||||||
|
------WebKitFormBoundaryNUjiLBAMuX2dhxU7--
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public List<String> readMultiPartData() throws Exception{
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
String boundary = getHeader("content-type");
|
||||||
|
if(boundary == null) return list;
|
||||||
|
boundary = boundary.split(";")[1].split("=")[1];
|
||||||
|
readLine();
|
||||||
|
|
||||||
|
while(ready()){
|
||||||
|
String line;
|
||||||
|
while (((line = readLine()) != null) && (line.length() > 0));
|
||||||
|
String buffer = "";
|
||||||
|
while (((line = readLine()) != null) && (!line.startsWith("--"+boundary))){
|
||||||
|
buffer += line;
|
||||||
|
}
|
||||||
|
list.add(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,228 +0,0 @@
|
||||||
package be.jeffcheasey88.peeratcode.framework;
|
|
||||||
|
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.json.simple.parser.JSONParser;
|
|
||||||
|
|
||||||
public class HttpUtil{
|
|
||||||
|
|
||||||
private HttpUtil(){}
|
|
||||||
|
|
||||||
public static void responseHeaders(HttpWriter writer, int code, String... headers) throws Exception{
|
|
||||||
writer.write("HTTP/1.1 "+code+codeMessage(code)+"\n");
|
|
||||||
for(String header : headers) writer.write(header+"\n");
|
|
||||||
writer.write("\n");
|
|
||||||
writer.flush();
|
|
||||||
StackTraceElement[] e = Thread.currentThread().getStackTrace();
|
|
||||||
System.out.println(e[2]+" -> response "+code);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<String> readMultiPartData(HttpReader reader) throws Exception{
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
System.out.println("read it");
|
|
||||||
String boundary = reader.getHeader("content-type");
|
|
||||||
if(boundary == null) return list;
|
|
||||||
boundary = boundary.split(";")[1].split("=")[1];
|
|
||||||
System.out.println("boundary "+boundary);
|
|
||||||
reader.readLine();
|
|
||||||
|
|
||||||
while(reader.ready()){
|
|
||||||
String line;
|
|
||||||
while (((line = reader.readLine()) != null) && (line.length() > 0));
|
|
||||||
String buffer = "";
|
|
||||||
while (((line = reader.readLine()) != null) && (!line.startsWith("--"+boundary))){
|
|
||||||
buffer += line;
|
|
||||||
}
|
|
||||||
list.add(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
|
||||||
Content-Disposition: form-data; name="answer"
|
|
||||||
|
|
||||||
12
|
|
||||||
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
|
||||||
Content-Disposition: form-data; name="filename"
|
|
||||||
|
|
||||||
webpack.js
|
|
||||||
------WebKitFormBoundaryNUjiLBAMuX2dhxU7
|
|
||||||
Content-Disposition: form-data; name="code_file"; filename="webpack.js"
|
|
||||||
Content-Type: text/javascript
|
|
||||||
|
|
||||||
|
|
||||||
------WebKitFormBoundaryNUjiLBAMuX2dhxU7--
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public static void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{
|
|
||||||
String key = reader.getHeader("Sec-WebSocket-Key");
|
|
||||||
if (key == null) throw new IllegalArgumentException();
|
|
||||||
|
|
||||||
writer.write("HTTP/1.1 101 Switching Protocols\n");
|
|
||||||
writer.write("Connection: Upgrade\n");
|
|
||||||
writer.write("Upgrade: websocket\n");
|
|
||||||
writer.write("Sec-WebSocket-Accept: " + printBase64Binary(MessageDigest.getInstance("SHA-1")
|
|
||||||
.digest((key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").getBytes("UTF-8"))) + "\n");
|
|
||||||
writer.write("\n");
|
|
||||||
writer.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object readJson(HttpReader reader) throws Exception{
|
|
||||||
String line = "";
|
|
||||||
while (reader.ready()){
|
|
||||||
char[] c = new char[1];
|
|
||||||
reader.read(c);
|
|
||||||
line += c[0];
|
|
||||||
if (c[0] == '}'){
|
|
||||||
Object parse;
|
|
||||||
try {
|
|
||||||
parse = new JSONParser().parse(line);
|
|
||||||
if (parse != null)
|
|
||||||
return parse;
|
|
||||||
}catch(Exception e){}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String codeMessage(int paramInt){
|
|
||||||
switch (paramInt){
|
|
||||||
case 200:
|
|
||||||
return " OK";
|
|
||||||
case 100:
|
|
||||||
return " Continue";
|
|
||||||
case 201:
|
|
||||||
return " Created";
|
|
||||||
case 202:
|
|
||||||
return " Accepted";
|
|
||||||
case 203:
|
|
||||||
return " Non-Authoritative Information";
|
|
||||||
case 204:
|
|
||||||
return " No Content";
|
|
||||||
case 205:
|
|
||||||
return " Reset Content";
|
|
||||||
case 206:
|
|
||||||
return " Partial Content";
|
|
||||||
case 300:
|
|
||||||
return " Multiple Choices";
|
|
||||||
case 301:
|
|
||||||
return " Moved Permanently";
|
|
||||||
case 302:
|
|
||||||
return " Temporary Redirect";
|
|
||||||
case 303:
|
|
||||||
return " See Other";
|
|
||||||
case 304:
|
|
||||||
return " Not Modified";
|
|
||||||
case 305:
|
|
||||||
return " Use Proxy";
|
|
||||||
case 400:
|
|
||||||
return " Bad Request";
|
|
||||||
case 401:
|
|
||||||
return " Unauthorized";
|
|
||||||
case 402:
|
|
||||||
return " Payment Required";
|
|
||||||
case 403:
|
|
||||||
return " Forbidden";
|
|
||||||
case 404:
|
|
||||||
return " Not Found";
|
|
||||||
case 405:
|
|
||||||
return " Method Not Allowed";
|
|
||||||
case 406:
|
|
||||||
return " Not Acceptable";
|
|
||||||
case 407:
|
|
||||||
return " Proxy Authentication Required";
|
|
||||||
case 408:
|
|
||||||
return " Request Time-Out";
|
|
||||||
case 409:
|
|
||||||
return " Conflict";
|
|
||||||
case 410:
|
|
||||||
return " Gone";
|
|
||||||
case 411:
|
|
||||||
return " Length Required";
|
|
||||||
case 412:
|
|
||||||
return " Precondition Failed";
|
|
||||||
case 413:
|
|
||||||
return " Request Entity Too Large";
|
|
||||||
case 414:
|
|
||||||
return " Request-URI Too Large";
|
|
||||||
case 415:
|
|
||||||
return " Unsupported Media Type";
|
|
||||||
case 500:
|
|
||||||
return " Internal Server Error";
|
|
||||||
case 501:
|
|
||||||
return " Not Implemented";
|
|
||||||
case 502:
|
|
||||||
return " Bad Gateway";
|
|
||||||
case 503:
|
|
||||||
return " Service Unavailable";
|
|
||||||
case 504:
|
|
||||||
return " Gateway Timeout";
|
|
||||||
case 505:
|
|
||||||
return " HTTP Version Not Supported";
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -38,4 +38,64 @@ public class HttpWriter{
|
||||||
public void close() throws IOException{
|
public void close() throws IOException{
|
||||||
this.writer.close();
|
this.writer.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void response(int code, String... headers) throws Exception{
|
||||||
|
write("HTTP/1.1 "+code+codeMessage(code)+"\n");
|
||||||
|
for(String header : headers) write(header+"\n");
|
||||||
|
write("\n");
|
||||||
|
flush();
|
||||||
|
StackTraceElement[] e = Thread.currentThread().getStackTrace();
|
||||||
|
System.out.println(e[2]+" -> response "+code);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] HEIGHTBITS = new String[7];
|
||||||
|
private static String[] NINEBITS = new String[206];
|
||||||
|
|
||||||
|
static {
|
||||||
|
HEIGHTBITS[0] = " OK";
|
||||||
|
HEIGHTBITS[1] = " Created";
|
||||||
|
HEIGHTBITS[2] = " Accepted";
|
||||||
|
HEIGHTBITS[3] = " Non-Authoritative Information";
|
||||||
|
HEIGHTBITS[4] = " No Content";
|
||||||
|
HEIGHTBITS[5] = " Reset Content";
|
||||||
|
HEIGHTBITS[6] = " Partial Content";
|
||||||
|
|
||||||
|
NINEBITS[0] = " Multiple Choices";
|
||||||
|
NINEBITS[1] = " Moved Permanently";
|
||||||
|
NINEBITS[2] = " Temporary Redirect";
|
||||||
|
NINEBITS[3] = " See Other";
|
||||||
|
NINEBITS[4] = " Not Modified";
|
||||||
|
NINEBITS[5] = " Use Proxy";
|
||||||
|
|
||||||
|
NINEBITS[100] = " Bad Request";
|
||||||
|
NINEBITS[101] = " Unauthorized";
|
||||||
|
NINEBITS[102] = " Payment Required";
|
||||||
|
NINEBITS[103] = " Forbidden";
|
||||||
|
NINEBITS[104] = " Not Found";
|
||||||
|
NINEBITS[105] = " Method Not Allowed";
|
||||||
|
NINEBITS[106] = " Not Acceptable";
|
||||||
|
NINEBITS[107] = " Proxy Authentication Required";
|
||||||
|
NINEBITS[108] = " Request Time-Out";
|
||||||
|
NINEBITS[109] = " Conflict";
|
||||||
|
NINEBITS[110] = " Gone";
|
||||||
|
NINEBITS[111] = " Length Required";
|
||||||
|
NINEBITS[112] = " Precondition Failed";
|
||||||
|
NINEBITS[113] = " Request Entity Too Large";
|
||||||
|
NINEBITS[114] = " Request-URI Too Large";
|
||||||
|
NINEBITS[115] = " Unsupported Media Type";
|
||||||
|
|
||||||
|
NINEBITS[200] = " Internal Server Error";
|
||||||
|
NINEBITS[201] = " Not Implemented";
|
||||||
|
NINEBITS[202] = " Bad Gateway";
|
||||||
|
NINEBITS[203] = " Service Unavailable";
|
||||||
|
NINEBITS[204] = " Gateway Timeout";
|
||||||
|
NINEBITS[205] = " HTTP Version Not Supported";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String codeMessage(int code){
|
||||||
|
if(code == 100) return " Continue";
|
||||||
|
if(code >> 8 == 0) return HEIGHTBITS[code-200];
|
||||||
|
return NINEBITS[code-300];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
package be.jeffcheasey88.peeratcode.framework;
|
package be.jeffcheasey88.peeratcode.framework;
|
||||||
|
|
||||||
public enum RequestType {
|
public enum RequestType{
|
||||||
|
|
||||||
GET, POST, OPTIONS;
|
GET, POST, OPTIONS;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ package be.jeffcheasey88.peeratcode.framework;
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
public interface Response {
|
public interface Response{
|
||||||
|
|
||||||
void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception;
|
void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package be.jeffcheasey88.peeratcode.framework;
|
package be.jeffcheasey88.peeratcode.framework;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.security.MessageDigest;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
@ -63,11 +64,11 @@ public class Router{
|
||||||
Matcher matcher = this.patterns.get(routes.getKey()).matcher(path);
|
Matcher matcher = this.patterns.get(routes.getKey()).matcher(path);
|
||||||
if(matcher.matches()){
|
if(matcher.matches()){
|
||||||
if(user == null && routes.getValue().needLogin()){
|
if(user == null && routes.getValue().needLogin()){
|
||||||
HttpUtil.responseHeaders(writer, 401, "Access-Control-Allow-Origin: *");
|
writer.response(401, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(routes.getValue().websocket()){
|
if(routes.getValue().websocket()){
|
||||||
HttpUtil.switchToWebSocket(reader, writer);
|
switchToWebSocket(reader, writer);
|
||||||
reader = new WebSocketReader(reader);
|
reader = new WebSocketReader(reader);
|
||||||
writer = new WebSocketWriter(writer);
|
writer = new WebSocketWriter(writer);
|
||||||
}
|
}
|
||||||
|
@ -103,4 +104,75 @@ public class Router{
|
||||||
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
|
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
|
||||||
return jws.getCompactSerialization();
|
return jws.getCompactSerialization();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
|
String key = reader.getHeader("Sec-WebSocket-Key");
|
||||||
|
if (key == null) throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
writer.write("HTTP/1.1 101 Switching Protocols\n");
|
||||||
|
writer.write("Connection: Upgrade\n");
|
||||||
|
writer.write("Upgrade: websocket\n");
|
||||||
|
writer.write("Sec-WebSocket-Accept: " + printBase64Binary(MessageDigest.getInstance("SHA-1")
|
||||||
|
.digest((key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").getBytes("UTF-8"))) + "\n");
|
||||||
|
writer.write("\n");
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// From javax.xml.bind.DatatypeConverter
|
||||||
|
private 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 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 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;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@ import java.io.IOException;
|
||||||
|
|
||||||
public class WebSocketReader extends HttpReader{
|
public class WebSocketReader extends HttpReader{
|
||||||
|
|
||||||
public WebSocketReader(HttpReader origin) throws Exception {
|
public WebSocketReader(HttpReader origin) throws Exception{
|
||||||
super(origin);
|
super(origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import java.io.IOException;
|
||||||
|
|
||||||
public class WebSocketWriter extends HttpWriter{
|
public class WebSocketWriter extends HttpWriter{
|
||||||
|
|
||||||
public WebSocketWriter(HttpWriter origin) throws Exception {
|
public WebSocketWriter(HttpWriter origin) throws Exception{
|
||||||
super(origin);
|
super(origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -38,10 +37,10 @@ public class BadgeDetails implements Response {
|
||||||
badgeJSON.put("logo", Base64.getEncoder().encodeToString(badge.getLogo()));
|
badgeJSON.put("logo", Base64.getEncoder().encodeToString(badge.getLogo()));
|
||||||
badgeJSON.put("level", badge.getLevel());
|
badgeJSON.put("level", badge.getLevel());
|
||||||
}
|
}
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(badgeJSON.toJSONString().replace("\\", ""));
|
writer.write(badgeJSON.toJSONString().replace("\\", ""));
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -50,10 +49,10 @@ public class ChapterElement implements Response {
|
||||||
puzzles.add(puzzleJSON);
|
puzzles.add(puzzleJSON);
|
||||||
}
|
}
|
||||||
chapterJSON.put("puzzles", puzzles);
|
chapterJSON.put("puzzles", puzzles);
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(chapterJSON.toJSONString());
|
writer.write(chapterJSON.toJSONString());
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -42,10 +41,10 @@ public class ChapterList implements Response {
|
||||||
chapterJSON.put("endDate", chapter.getEndDate().toString());
|
chapterJSON.put("endDate", chapter.getEndDate().toString());
|
||||||
chaptersJSON.add(chapterJSON);
|
chaptersJSON.add(chapterJSON);
|
||||||
}
|
}
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(chaptersJSON.toJSONString());
|
writer.write(chaptersJSON.toJSONString());
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -31,7 +30,7 @@ public class Leaderboard implements Response {
|
||||||
|
|
||||||
@Route(path = "^\\/leaderboard\\/?(\\d+)?$")
|
@Route(path = "^\\/leaderboard\\/?(\\d+)?$")
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
if (matcher.group(1) != null) {
|
if (matcher.group(1) != null) {
|
||||||
groupsLeaderboard(Integer.parseInt(matcher.group(1)), writer);
|
groupsLeaderboard(Integer.parseInt(matcher.group(1)), writer);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -33,22 +32,22 @@ public class Login implements Response {
|
||||||
@Route(path = "^\\/login$", type = POST)
|
@Route(path = "^\\/login$", type = POST)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JSONObject informations = (JSONObject) HttpUtil.readJson(reader);
|
JSONObject informations = reader.readJson();
|
||||||
if (informations != null) {
|
if (informations != null) {
|
||||||
String pseudo = (String) informations.get("pseudo");
|
String pseudo = (String) informations.get("pseudo");
|
||||||
String password = (String) informations.get("passwd");
|
String password = (String) informations.get("passwd");
|
||||||
int id;
|
int id;
|
||||||
if ((id = databaseRepo.login(pseudo, password)) >= 0) {
|
if ((id = databaseRepo.login(pseudo, password)) >= 0) {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *",
|
writer.response(200, "Access-Control-Allow-Origin: *",
|
||||||
"Access-Control-Expose-Headers: Authorization",
|
"Access-Control-Expose-Headers: Authorization",
|
||||||
"Authorization: Bearer " + this.router.createAuthUser(id));
|
"Authorization: Bearer " + this.router.createAuthUser(id));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -52,10 +51,10 @@ public class PlayerDetails implements Response {
|
||||||
playerJSON.put("badges", player.getJsonBadges());
|
playerJSON.put("badges", player.getJsonBadges());
|
||||||
if (player.getAvatar() != null)
|
if (player.getAvatar() != null)
|
||||||
playerJSON.put("avatar", Base64.getEncoder().encodeToString(player.getAvatar()));
|
playerJSON.put("avatar", Base64.getEncoder().encodeToString(player.getAvatar()));
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(playerJSON.toJSONString().replace("\\", ""));
|
writer.write(playerJSON.toJSONString().replace("\\", ""));
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -36,13 +35,13 @@ public class PuzzleElement implements Response {
|
||||||
Chapter chapter = this.databaseRepo.getChapter(puzzle);
|
Chapter chapter = this.databaseRepo.getChapter(puzzle);
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if(chapter.getEndDate() != null){
|
// if(chapter.getEndDate() != null){
|
||||||
// if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
// if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
||||||
// HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
// writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -59,11 +58,11 @@ public class PuzzleElement implements Response {
|
||||||
puzzleJSON.put("tries", completion.getTries());
|
puzzleJSON.put("tries", completion.getTries());
|
||||||
}
|
}
|
||||||
if(puzzle.getDepend() > 0) puzzleJSON.put("depend", puzzle.getDepend());
|
if(puzzle.getDepend() > 0) puzzleJSON.put("depend", puzzle.getDepend());
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
writer.response(200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
||||||
writer.write(puzzleJSON.toJSONString());
|
writer.write(puzzleJSON.toJSONString());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
|
@ -50,13 +49,13 @@ public class PuzzleResponse implements Response {
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
ReceivedResponse received = new ReceivedResponse(matcher, reader);
|
ReceivedResponse received = new ReceivedResponse(matcher, reader);
|
||||||
if (received.getResponse() == null){
|
if (received.getResponse() == null){
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//saveSourceCode(received, databaseRepo.getPlayer(user.getId()));
|
//saveSourceCode(received, databaseRepo.getPlayer(user.getId()));
|
||||||
JSONObject responseJSON = new JSONObject();
|
JSONObject responseJSON = new JSONObject();
|
||||||
if(this.databaseRepo.getScore(user.getId(), received.getPuzzleId()) > 0){
|
if(this.databaseRepo.getScore(user.getId(), received.getPuzzleId()) > 0){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,25 +63,25 @@ public class PuzzleResponse implements Response {
|
||||||
Chapter chapter = this.databaseRepo.getChapter(currentPuzzle);
|
Chapter chapter = this.databaseRepo.getChapter(currentPuzzle);
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(chapter.getEndDate() != null){
|
if(chapter.getEndDate() != null){
|
||||||
if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
||||||
if(Arrays.equals(currentPuzzle.getSoluce(), received.getResponse())){
|
if(Arrays.equals(currentPuzzle.getSoluce(), received.getResponse())){
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
writer.response(200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
||||||
JSONObject theoSaisPasJusteRecevoir200 = new JSONObject();
|
JSONObject theoSaisPasJusteRecevoir200 = new JSONObject();
|
||||||
theoSaisPasJusteRecevoir200.put("success", true);
|
theoSaisPasJusteRecevoir200.put("success", true);
|
||||||
writer.write(theoSaisPasJusteRecevoir200.toJSONString());
|
writer.write(theoSaisPasJusteRecevoir200.toJSONString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Group group = this.databaseRepo.getPlayerGroup(user.getId(), chapter.getId());
|
Group group = this.databaseRepo.getPlayerGroup(user.getId(), chapter.getId());
|
||||||
if(group == null){
|
if(group == null){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,16 +90,16 @@ public class PuzzleResponse implements Response {
|
||||||
Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(),
|
Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(),
|
||||||
received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle);
|
received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle);
|
||||||
if(completion == null){
|
if(completion == null){
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(completion.getScore() > 0){
|
if(completion.getScore() > 0){
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
writer.response(200, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
||||||
responseJSON.put("score", completion.getScore());
|
responseJSON.put("score", completion.getScore());
|
||||||
responseJSON.put("tries", completion.getTries());
|
responseJSON.put("tries", completion.getTries());
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
HttpUtil.responseHeaders(writer, 406, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
writer.response(406, "Access-Control-Allow-Origin: *", "Content-Type: application/json");
|
||||||
responseJSON.put("tries", completion.getTries());
|
responseJSON.put("tries", completion.getTries());
|
||||||
}
|
}
|
||||||
writer.write(responseJSON.toJSONString());
|
writer.write(responseJSON.toJSONString());
|
||||||
|
@ -132,7 +131,7 @@ class ReceivedResponse {
|
||||||
public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception {
|
public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception {
|
||||||
puzzleId = Integer.parseInt(matcher.group(1));
|
puzzleId = Integer.parseInt(matcher.group(1));
|
||||||
|
|
||||||
List<String> multiPartData = HttpUtil.readMultiPartData(reader);
|
List<String> multiPartData = reader.readMultiPartData();
|
||||||
if (multiPartData != null && multiPartData.size() > 0) {
|
if (multiPartData != null && multiPartData.size() > 0) {
|
||||||
this.response = multiPartData.get(0).getBytes();
|
this.response = multiPartData.get(0).getBytes();
|
||||||
if (multiPartData.size() == 3) {
|
if (multiPartData.size() == 3) {
|
||||||
|
|
|
@ -11,7 +11,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -38,17 +37,17 @@ public class Register implements Response {
|
||||||
@Route(path = "^\\/register$", type = POST)
|
@Route(path = "^\\/register$", type = POST)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
if (user != null){
|
if (user != null){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JSONObject informations = (JSONObject) HttpUtil.readJson(reader);
|
JSONObject informations = reader.readJson();
|
||||||
if (informations != null) {
|
if (informations != null) {
|
||||||
boolean allFieldsFilled = informations.containsKey("pseudo") && informations.containsKey("email")
|
boolean allFieldsFilled = informations.containsKey("pseudo") && informations.containsKey("email")
|
||||||
&& informations.containsKey("passwd") && informations.containsKey("firstname")
|
&& informations.containsKey("passwd") && informations.containsKey("firstname")
|
||||||
&& informations.containsKey("lastname") && informations.containsKey("description")
|
&& informations.containsKey("lastname") && informations.containsKey("description")
|
||||||
&& informations.containsKey("sgroup") && informations.containsKey("avatar");
|
&& informations.containsKey("sgroup") && informations.containsKey("avatar");
|
||||||
if (!allFieldsFilled) {
|
if (!allFieldsFilled) {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String pseudo = (String) informations.get("pseudo");
|
String pseudo = (String) informations.get("pseudo");
|
||||||
|
@ -66,14 +65,14 @@ public class Register implements Response {
|
||||||
int id;
|
int id;
|
||||||
if ((id = databaseRepo.register(pseudo, email, password, firstname, lastname, description, group,
|
if ((id = databaseRepo.register(pseudo, email, password, firstname, lastname, description, group,
|
||||||
avatar)) >= 0) {
|
avatar)) >= 0) {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *",
|
writer.response(200, "Access-Control-Allow-Origin: *",
|
||||||
"Access-Control-Expose-Headers: Authorization",
|
"Access-Control-Expose-Headers: Authorization",
|
||||||
"Authorization: Bearer " + this.router.createAuthUser(id));
|
"Authorization: Bearer " + this.router.createAuthUser(id));
|
||||||
createFolderToSaveSourceCode(pseudo);
|
createFolderToSaveSourceCode(pseudo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
JSONObject error = new JSONObject();
|
JSONObject error = new JSONObject();
|
||||||
error.put("username_valid", pseudoAvailable);
|
error.put("username_valid", pseudoAvailable);
|
||||||
error.put("email_valid", emailAvailable);
|
error.put("email_valid", emailAvailable);
|
||||||
|
@ -81,7 +80,7 @@ public class Register implements Response {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
writer.response(400, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.regex.Matcher;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -28,9 +27,9 @@ public class Result implements Response {
|
||||||
|
|
||||||
int score = this.repo.getScore(user.getId(), puzzle);
|
int score = this.repo.getScore(user.getId(), puzzle);
|
||||||
if (score < 0) {
|
if (score < 0) {
|
||||||
HttpUtil.responseHeaders(writer, 425, "Access-Control-Allow-Origin: *");
|
writer.response(425, "Access-Control-Allow-Origin: *");
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(score + "");
|
writer.write(score + "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,8 @@ import static be.jeffcheasey88.peeratcode.framework.RequestType.POST;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
|
@ -37,12 +34,12 @@ public class GroupCreate implements Response {
|
||||||
|
|
||||||
@Route(path = "^\\/groupCreate$", type = POST, needLogin = true)
|
@Route(path = "^\\/groupCreate$", type = POST, needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group newGroup = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group newGroup = new Group(reader.readJson());
|
||||||
|
|
||||||
if (this.repo.getPlayerGroup(user.getId(), newGroup.getLinkToChapter()) == null) {
|
if (this.repo.getPlayerGroup(user.getId(), newGroup.getLinkToChapter()) == null) {
|
||||||
try {
|
try {
|
||||||
if(this.repo.getGroupId(newGroup) == null) throw new NullPointerException();
|
if(this.repo.getGroupId(newGroup) == null) throw new NullPointerException();
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}catch(NullPointerException e){
|
}catch(NullPointerException e){
|
||||||
if(newGroup.getLinkToChapter() != null){
|
if(newGroup.getLinkToChapter() != null){
|
||||||
|
@ -50,21 +47,21 @@ public class GroupCreate implements Response {
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(LocalDateTime.now().isAfter(start)){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.repo.insertGroup(newGroup, user)) {
|
if (this.repo.insertGroup(newGroup, user)) {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
|
|
||||||
locker.setValue(newGroup);
|
locker.setValue(newGroup);
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,8 @@ import static be.jeffcheasey88.peeratcode.framework.RequestType.POST;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
|
@ -42,16 +39,16 @@ public class GroupJoin implements Response{
|
||||||
|
|
||||||
@Route(path = "^\\/groupJoin$", type = POST, needLogin = true)
|
@Route(path = "^\\/groupJoin$", type = POST, needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group group = new Group(reader.readJson());
|
||||||
|
|
||||||
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
||||||
if(group.equals(userGroup)){
|
if(group.equals(userGroup)){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(group.getLinkToChapter() == null){
|
if(group.getLinkToChapter() == null){
|
||||||
HttpUtil.responseHeaders(writer, 409, "Access-Control-Allow-Origin: *");
|
writer.response(409, "Access-Control-Allow-Origin: *");
|
||||||
writer.write(waitTime);
|
writer.write(waitTime);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -61,18 +58,18 @@ public class GroupJoin implements Response{
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(LocalDateTime.now().isAfter(start)){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.repo.insertUserInGroup(group, user)) {
|
if (this.repo.insertUserInGroup(group, user)) {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
|
|
||||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import org.json.simple.JSONArray;
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Route;
|
import be.jeffcheasey88.peeratcode.framework.Route;
|
||||||
|
@ -26,7 +25,7 @@ public class GroupList implements Response {
|
||||||
|
|
||||||
@Route(path = "^\\/groups$", needLogin = true)
|
@Route(path = "^\\/groups$", needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
JSONArray result = new JSONArray();
|
JSONArray result = new JSONArray();
|
||||||
for(Group group : this.repo.getAllGroups()) result.add(group.toJson());
|
for(Group group : this.repo.getAllGroups()) result.add(group.toJson());
|
||||||
writer.write(result.toJSONString());
|
writer.write(result.toJSONString());
|
||||||
|
|
|
@ -5,11 +5,8 @@ import static be.jeffcheasey88.peeratcode.framework.RequestType.POST;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
|
|
||||||
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
import be.jeffcheasey88.peeratcode.framework.HttpReader;
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpUtil;
|
|
||||||
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Locker;
|
import be.jeffcheasey88.peeratcode.framework.Locker;
|
||||||
import be.jeffcheasey88.peeratcode.framework.Response;
|
import be.jeffcheasey88.peeratcode.framework.Response;
|
||||||
|
@ -40,11 +37,11 @@ public class GroupQuit implements Response{
|
||||||
|
|
||||||
@Route(path = "^\\/groupQuit$", type = POST, needLogin = true)
|
@Route(path = "^\\/groupQuit$", type = POST, needLogin = true)
|
||||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||||
Group group = new Group((JSONObject) HttpUtil.readJson(reader));
|
Group group = new Group(reader.readJson());
|
||||||
|
|
||||||
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter());
|
||||||
if(!group.equals(userGroup)){
|
if(!group.equals(userGroup)){
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,18 +50,18 @@ public class GroupQuit implements Response{
|
||||||
if(chapter.getStartDate() != null){
|
if(chapter.getStartDate() != null){
|
||||||
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
LocalDateTime start = chapter.getStartDate().toLocalDateTime().plusMinutes(this.groupDelay);
|
||||||
if(LocalDateTime.now().isAfter(start)){
|
if(LocalDateTime.now().isAfter(start)){
|
||||||
HttpUtil.responseHeaders(writer, 423, "Access-Control-Allow-Origin: *");
|
writer.response(423, "Access-Control-Allow-Origin: *");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.repo.leaveGroup(group, user)) {
|
if (this.repo.leaveGroup(group, user)) {
|
||||||
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
|
writer.response(200, "Access-Control-Allow-Origin: *");
|
||||||
|
|
||||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||||
} else {
|
} else {
|
||||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
writer.response(403, "Access-Control-Allow-Origin: *");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue