116 lines
4.4 KiB
Java
116 lines
4.4 KiB
Java
package dev.peerat.backend;
|
|
|
|
import static dev.peerat.framework.RequestType.OPTIONS;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.regex.Matcher;
|
|
|
|
import dev.peerat.backend.model.Completion;
|
|
import dev.peerat.backend.model.Group;
|
|
import dev.peerat.backend.model.PeerAtUser;
|
|
import dev.peerat.backend.model.Player;
|
|
import dev.peerat.backend.repository.DatabaseRepository;
|
|
import dev.peerat.backend.routes.BadgeDetails;
|
|
import dev.peerat.backend.routes.ChapterElement;
|
|
import dev.peerat.backend.routes.ChapterList;
|
|
import dev.peerat.backend.routes.DynamicLeaderboard;
|
|
import dev.peerat.backend.routes.Leaderboard;
|
|
import dev.peerat.backend.routes.Login;
|
|
import dev.peerat.backend.routes.MailConfirmation;
|
|
import dev.peerat.backend.routes.PlayerDetails;
|
|
import dev.peerat.backend.routes.PuzzleElement;
|
|
import dev.peerat.backend.routes.PuzzleResponse;
|
|
import dev.peerat.backend.routes.Register;
|
|
import dev.peerat.backend.routes.Result;
|
|
import dev.peerat.backend.routes.groups.GroupCreate;
|
|
import dev.peerat.backend.routes.groups.GroupJoin;
|
|
import dev.peerat.backend.routes.groups.GroupList;
|
|
import dev.peerat.backend.routes.groups.GroupQuit;
|
|
import dev.peerat.backend.utils.Mail;
|
|
import dev.peerat.framework.Context;
|
|
import dev.peerat.framework.HttpReader;
|
|
import dev.peerat.framework.HttpWriter;
|
|
import dev.peerat.framework.Locker;
|
|
import dev.peerat.framework.RequestType;
|
|
import dev.peerat.framework.Response;
|
|
import dev.peerat.framework.Route;
|
|
import dev.peerat.framework.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");
|
|
|
|
DatabaseRepository repo = new DatabaseRepository(config);
|
|
Router<PeerAtUser> router = new Router<PeerAtUser>()
|
|
.configureJwt(
|
|
(builder) -> builder.setExpectedIssuer(config.getTokenIssuer()),
|
|
(claims) -> {
|
|
claims.setIssuer(config.getTokenIssuer()); // who creates the token and signs it
|
|
claims.setExpirationTimeMinutesInTheFuture(config.getTokenExpiration());
|
|
},
|
|
(claims) -> new PeerAtUser(claims));
|
|
|
|
router.addDefaultHeaders(RequestType.GET, "Access-Control-Allow-Origin: *");
|
|
router.addDefaultHeaders(RequestType.POST, "Access-Control-Allow-Origin: *");
|
|
|
|
router.setDefault((matcher, context, reader, writer) -> {
|
|
context.response(404);
|
|
writer.write("404 not Found.\n");
|
|
writer.flush();
|
|
writer.close();
|
|
});
|
|
|
|
router.register(new Response(){
|
|
@Route(path = "^(.*)$", type = OPTIONS)
|
|
public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception {
|
|
context.response(200,
|
|
"Access-Control-Allow-Origin: *",
|
|
"Access-Control-Allow-Methods: *",
|
|
"Access-Control-Allow-Headers: *");
|
|
}
|
|
|
|
});
|
|
|
|
initRoutes(router, repo, config);
|
|
|
|
// RouteExtracter extracter = new RouteExtracter(router);
|
|
// extracter.extract();
|
|
|
|
if(config.useSsl()) router.configureSSL(config.getSslKeystore(), config.getSslKeystorePasswd());
|
|
router.listen(config.getTcpPort(), config.useSsl());
|
|
}
|
|
|
|
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config){
|
|
final Map<Integer, Player> playersWaiting = new HashMap<>();
|
|
router.register(new ChapterElement(repo));
|
|
router.register(new ChapterList(repo));
|
|
router.register(new PuzzleElement(repo));
|
|
router.register(new Register(repo, router, config.getUsersFiles(), playersWaiting));
|
|
router.register(new MailConfirmation(repo, router, config.getUsersFiles(), playersWaiting));
|
|
router.register(new Login(repo, router));
|
|
router.register(new Result(repo));
|
|
router.register(new Leaderboard(repo));
|
|
router.register(new PlayerDetails(repo));
|
|
router.register(new BadgeDetails(repo));
|
|
|
|
Locker<Group> groupLock = new Locker<>();
|
|
router.register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes()));
|
|
|
|
DynamicLeaderboard dlb = new DynamicLeaderboard(repo);
|
|
router.register(dlb);
|
|
|
|
Locker<Completion> leaderboard = dlb.getLocker();
|
|
|
|
router.register(new PuzzleResponse(repo, config.getUsersFiles(), leaderboard));
|
|
router.register(new GroupList(repo));
|
|
router.register(new GroupJoin(repo, config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard));
|
|
router.register(new GroupQuit(repo, config.getGroupJoinMinutes(), leaderboard));
|
|
|
|
// Bot bot = new Bot(config, repo, groupLock);
|
|
// bot.start();
|
|
}
|
|
}
|