This commit is contained in:
jeffcheasey88 2023-04-26 16:48:14 +02:00
parent 0b18622add
commit 901c6f1512
3 changed files with 36 additions and 8 deletions

View file

@ -5,6 +5,8 @@ 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;
@ -64,14 +66,14 @@ public class Main{
} }
}); });
initRoutes(router, config);
// RouteExtracter extracter = new RouteExtracter(router); // RouteExtracter extracter = new RouteExtracter(router);
// extracter.extract(); // extracter.extract();
startWebServer(config, router); startWebServer(config, router, initRoutes(router, config));
} }
private static void initRoutes(Router router, Configuration config){ private static List<Locker<?>> initRoutes(Router router, Configuration config){
List<Locker<?>> list = new ArrayList<>();
router.register(new ChapterElement(router.getDataBase())); router.register(new ChapterElement(router.getDataBase()));
router.register(new ChapterList(router.getDataBase())); router.register(new ChapterList(router.getDataBase()));
router.register(new PuzzleElement(router.getDataBase())); router.register(new PuzzleElement(router.getDataBase()));
@ -83,12 +85,14 @@ public class Main{
router.register(new BadgeDetails(router.getDataBase())); router.register(new BadgeDetails(router.getDataBase()));
Locker<Group> groupLock = new Locker<>(); Locker<Group> groupLock = new Locker<>();
list.add(groupLock);
router.register(new GroupCreate(router.getDataBase(), groupLock, config.getGroupJoinMinutes())); router.register(new GroupCreate(router.getDataBase(), groupLock, config.getGroupJoinMinutes()));
DynamicLeaderboard dlb = new DynamicLeaderboard(router.getDataBase()); DynamicLeaderboard dlb = new DynamicLeaderboard(router.getDataBase());
router.register(dlb); router.register(dlb);
Locker<Completion> leaderboard = dlb.getLocker(); Locker<Completion> leaderboard = dlb.getLocker();
list.add(leaderboard);
router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), leaderboard)); router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), leaderboard));
router.register(new GroupList(router.getDataBase())); router.register(new GroupList(router.getDataBase()));
@ -97,9 +101,11 @@ public class Main{
// Bot bot = new Bot(config, router.getDataBase(), groupLock); // Bot bot = new Bot(config, router.getDataBase(), groupLock);
// bot.start(); // bot.start();
return list;
} }
private static void startWebServer(Configuration config, Router router) throws IOException { private static void startWebServer(Configuration config, Router router, List<Locker<?>> lockers) throws IOException {
if (config.useSsl()) { // Not needed with the use of a proxy if (config.useSsl()) { // Not needed with the use of a proxy
SSLServerSocket server = null; SSLServerSocket server = null;
try { try {
@ -111,7 +117,7 @@ public class Main{
while (!server.isClosed()) { while (!server.isClosed()) {
Socket socket = server.accept(); Socket socket = server.accept();
Client client = new Client(socket, router); Client client = new Client(socket, router, lockers);
client.start(); client.start();
} }
} catch (Exception e) { } catch (Exception e) {
@ -125,7 +131,7 @@ public class Main{
try (ServerSocket server = new ServerSocket(config.getTcpPort())) { try (ServerSocket server = new ServerSocket(config.getTcpPort())) {
while (!server.isClosed()) { while (!server.isClosed()) {
Socket socket = server.accept(); Socket socket = server.accept();
Client client = new Client(socket, router); Client client = new Client(socket, router, lockers);
client.start(); client.start();
} }
} catch (Exception e) { } catch (Exception e) {

View file

@ -2,6 +2,7 @@ package be.jeffcheasey88.peeratcode.framework;
import java.net.Socket; import java.net.Socket;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import org.jose4j.jwa.AlgorithmConstraints.ConstraintType; import org.jose4j.jwa.AlgorithmConstraints.ConstraintType;
import org.jose4j.jws.AlgorithmIdentifiers; import org.jose4j.jws.AlgorithmIdentifiers;
@ -14,26 +15,36 @@ public class Client extends Thread{
private HttpReader reader; private HttpReader reader;
private HttpWriter writer; private HttpWriter writer;
private Router router; private Router router;
private List<Locker<?>> lockers;
public Client(Socket socket, Router router) throws Exception{ public Client(Socket socket, Router router, List<Locker<?>> lockers) throws Exception{
this.reader = new HttpReader(socket); this.reader = new HttpReader(socket);
this.writer = new HttpWriter(socket); this.writer = new HttpWriter(socket);
this.router = router; this.router = router;
this.lockers = lockers;
} }
@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], isLogin(reader), reader, writer); router.exec(RequestType.valueOf(headers[0]), headers[1], user = isLogin(reader), reader, writer);
writer.flush(); writer.flush();
writer.close(); writer.close();
}catch(Exception e){ }catch(Exception e){
e.printStackTrace(); e.printStackTrace();
} }
if(user != null){
if(user.getKey() != null){
for(Locker<?> locker : this.lockers){
locker.remove(user.getKey());
}
}
}
} }
private User isLogin(HttpReader reader) throws Exception{ private User isLogin(HttpReader reader) throws Exception{

View file

@ -2,14 +2,25 @@ package be.jeffcheasey88.peeratcode.framework;
import org.jose4j.jwt.JwtClaims; import org.jose4j.jwt.JwtClaims;
import be.jeffcheasey88.peeratcode.framework.Locker.Key;
public class User{ public class User{
private int id; private int id;
private Key key;
public User(JwtClaims jwtClaims){ public User(JwtClaims jwtClaims){
this.id = ((Long) jwtClaims.getClaimValue("id")).intValue(); this.id = ((Long) jwtClaims.getClaimValue("id")).intValue();
} }
public void setKey(Key key){
this.key = key;
}
public Key getKey(){
return this.key;
}
public int getId(){ public int getId(){
return this.id; return this.id;
} }