Compare commits
No commits in common. "d89a11fba0d4290b0fe9acb2d561126d0621dc0d" and "6550cf03f19e37251aad5122d3f8f42ba22c446e" have entirely different histories.
d89a11fba0
...
6550cf03f1
16 changed files with 84 additions and 203 deletions
Binary file not shown.
|
@ -51,7 +51,6 @@ import dev.peerat.backend.routes.users.ProfileSettings;
|
||||||
import dev.peerat.backend.routes.users.Register;
|
import dev.peerat.backend.routes.users.Register;
|
||||||
import dev.peerat.backend.utils.Mail;
|
import dev.peerat.backend.utils.Mail;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.DependencyInjector;
|
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
|
@ -178,18 +177,44 @@ public class Main{
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{
|
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{
|
||||||
router.registerPackages(new DependencyInjector()
|
Map<String, Integer> playersWaiting = new HashMap<>();
|
||||||
.of(repo, router, config.getMail(), new RouteExtracter(router))
|
Mail mail = config.getMail();
|
||||||
.of("waitting", new HashMap<>())
|
Locker<Group> groupLock = new Locker<>();
|
||||||
.of("leaderboard", new Locker<>())
|
Locker<Completion> leaderboard = new Locker<>();
|
||||||
.of("log", router.getLogger())
|
|
||||||
.of("exception", router.getExceptionLogger())
|
if(config.isProduction())
|
||||||
.of("groups", new Locker<>())
|
router.
|
||||||
.of("groupDelay", config.getGroupJoinMinutes())
|
register(new Register(repo, playersWaiting, mail)).
|
||||||
.of("waitTime", config.getGroupQuitMinutes())
|
register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting, mail));
|
||||||
.of("usersFiles", config.getUsersFiles())
|
|
||||||
.of("gitToken", config.getGitToken())
|
router.
|
||||||
.of("issuer", config.getTokenIssuer()));
|
register(new Login(repo, router)).
|
||||||
|
register(new ProfileSettings(repo)).
|
||||||
|
register(new ChangePassword(repo)).
|
||||||
|
// register(new ForgotPassword(router, repo, mail)).
|
||||||
|
|
||||||
|
register(new DynamicLogs(router.getLogger(), repo)).
|
||||||
|
register(new ExceptionLogs(router.getExceptionLogger())).
|
||||||
|
|
||||||
|
register(new WebHookLeaderboard(leaderboard)).
|
||||||
|
|
||||||
|
register(new ChapterElement(repo)).
|
||||||
|
register(new ChapterList(repo)).
|
||||||
|
register(new PuzzleElement(repo)).
|
||||||
|
register(new Result(repo)).
|
||||||
|
register(new Leaderboard(repo)).
|
||||||
|
register(new PlayerDetails(repo)).
|
||||||
|
register(new BadgeDetails(repo)).
|
||||||
|
|
||||||
|
register(new DynamicLeaderboard(repo, leaderboard)).
|
||||||
|
register(new PuzzleResponse(repo, config.getUsersFiles(), leaderboard)).
|
||||||
|
|
||||||
|
register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes())).
|
||||||
|
register(new GroupList(repo)).
|
||||||
|
register(new GroupJoin(repo, config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard)).
|
||||||
|
register(new GroupQuit(repo, config.getGroupJoinMinutes(), leaderboard))
|
||||||
|
|
||||||
|
.register(new Swagger(new RouteExtracter(router),config.getTokenIssuer()));
|
||||||
|
|
||||||
// Bot bot = new Bot(config, repo, groupLock);
|
// Bot bot = new Bot(config, repo, groupLock);
|
||||||
// bot.start();
|
// bot.start();
|
||||||
|
|
|
@ -8,9 +8,7 @@ import java.sql.ResultSetMetaData;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
@ -35,56 +33,6 @@ public class DatabaseRepository {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hotfix() throws Exception{
|
|
||||||
ensureConnection();
|
|
||||||
|
|
||||||
PreparedStatement stmt = con.prepareStatement("SELECT c.*, g.* FROM completions c JOIN puzzles p ON c.fk_puzzle = p.id_puzzle JOIN containsGroups cg ON cg.fk_player = c.fk_player JOIN groups g ON g.id_group = cg.fk_group WHERE g.fk_chapter = 12 AND p.fk_chapter = 12;");
|
|
||||||
ResultSet results = stmt.executeQuery();
|
|
||||||
List<Completionz> list = new ArrayList<>();
|
|
||||||
while(results.next()){
|
|
||||||
Completionz complete = new Completionz(results);
|
|
||||||
list.add(complete);
|
|
||||||
}
|
|
||||||
Map<Integer, Map<Integer, Completionz>> map = new HashMap<>();
|
|
||||||
for(Completionz comp : list){
|
|
||||||
Map<Integer,Completionz> puz = map.get(comp.puzzle);
|
|
||||||
if(puz == null){
|
|
||||||
puz = new HashMap<>();
|
|
||||||
map.put(comp.puzzle, puz);
|
|
||||||
}
|
|
||||||
Completionz c = puz.get(comp.groups);
|
|
||||||
if(c == null){
|
|
||||||
puz.put(comp.groups, comp);
|
|
||||||
}else{
|
|
||||||
if(comp.score >= c.score){
|
|
||||||
puz.put(comp.groups, comp);
|
|
||||||
System.out.println("remove compl "+c.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Completionz{
|
|
||||||
|
|
||||||
public int id;
|
|
||||||
public int puzzle;
|
|
||||||
public int player;
|
|
||||||
public int tries;
|
|
||||||
public int score;
|
|
||||||
public int groups;
|
|
||||||
|
|
||||||
public Completionz(ResultSet result) throws Exception{
|
|
||||||
id = result.getInt("id_completion");
|
|
||||||
puzzle = result.getInt("fk_puzzle");
|
|
||||||
player = result.getInt("fk_player");
|
|
||||||
tries = result.getInt("tries");
|
|
||||||
score = result.getInt("score");
|
|
||||||
groups = result.getInt("id_group");
|
|
||||||
System.out.println(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ensureConnection() throws SQLException {
|
private void ensureConnection() throws SQLException {
|
||||||
if (con == null || (!con.isValid(5))) {
|
if (con == null || (!con.isValid(5))) {
|
||||||
this.con = DriverManager.getConnection(
|
this.con = DriverManager.getConnection(
|
||||||
|
|
|
@ -8,7 +8,6 @@ import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Locker.Key;
|
import dev.peerat.framework.Locker.Key;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -17,7 +16,7 @@ public class DynamicLeaderboard extends Leaderboard{
|
||||||
|
|
||||||
private Locker<Completion> locker;
|
private Locker<Completion> locker;
|
||||||
|
|
||||||
public DynamicLeaderboard(DatabaseRepository databaseRepo, @Injection("leaderboard") Locker<Completion> locker){
|
public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker<Completion> locker){
|
||||||
super(databaseRepo);
|
super(databaseRepo);
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package dev.peerat.backend.routes;
|
package dev.peerat.backend.routes;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import dev.peerat.backend.bonus.extract.RouteDoc;
|
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||||
|
|
|
@ -22,7 +22,6 @@ import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -34,7 +33,7 @@ public class PuzzleResponse implements Response {
|
||||||
|
|
||||||
private final Locker<Completion> leaderboard;
|
private final Locker<Completion> leaderboard;
|
||||||
|
|
||||||
public PuzzleResponse(DatabaseRepository databaseRepo, @Injection("usersFiles") String initUsersFilesPath, @Injection("leaderboard") Locker<Completion> locker){
|
public PuzzleResponse(DatabaseRepository databaseRepo, String initUsersFilesPath, Locker<Completion> locker){
|
||||||
this.databaseRepo = databaseRepo;
|
this.databaseRepo = databaseRepo;
|
||||||
usersFilesPath = initUsersFilesPath;
|
usersFilesPath = initUsersFilesPath;
|
||||||
this.leaderboard = locker;
|
this.leaderboard = locker;
|
||||||
|
|
|
@ -6,7 +6,6 @@ import dev.peerat.backend.bonus.extract.RouteExtracter;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
|
||||||
|
@ -14,7 +13,7 @@ public class Swagger implements Response{
|
||||||
|
|
||||||
private String json;
|
private String json;
|
||||||
|
|
||||||
public Swagger(RouteExtracter extracter, @Injection("issuer") String host){
|
public Swagger(RouteExtracter extracter, String host){
|
||||||
try{
|
try{
|
||||||
this.json = extracter.swagger(host).toString();
|
this.json = extracter.swagger(host).toString();
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
|
|
@ -9,7 +9,6 @@ import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Locker.Key;
|
import dev.peerat.framework.Locker.Key;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
|
@ -21,7 +20,7 @@ public class DynamicLogs implements Response{
|
||||||
private Locker<Context> locker; //Context
|
private Locker<Context> locker; //Context
|
||||||
private DatabaseRepository repo;
|
private DatabaseRepository repo;
|
||||||
|
|
||||||
public DynamicLogs(@Injection("log") Locker<Context> locker, DatabaseRepository repo){
|
public DynamicLogs(Locker<Context> locker, DatabaseRepository repo){
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
this.repo = repo;
|
this.repo = repo;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.regex.Matcher;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Locker.Key;
|
import dev.peerat.framework.Locker.Key;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
|
@ -17,7 +16,7 @@ public class ExceptionLogs implements Response{
|
||||||
|
|
||||||
private Locker<Exception> locker;
|
private Locker<Exception> locker;
|
||||||
|
|
||||||
public ExceptionLogs(@Injection("exception") Locker<Exception> locker){
|
public ExceptionLogs(Locker<Exception> locker){
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import dev.peerat.backend.model.Completion;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -15,7 +14,7 @@ public class WebHookLeaderboard implements Response{
|
||||||
|
|
||||||
private Locker<Completion> locker;
|
private Locker<Completion> locker;
|
||||||
|
|
||||||
public WebHookLeaderboard(@Injection("leaderboard") Locker<Completion> locker){
|
public WebHookLeaderboard(Locker<Completion> locker){
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ import dev.peerat.backend.utils.FormResponse;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -26,7 +25,7 @@ public class GroupCreate extends FormResponse {
|
||||||
private DatabaseRepository repo;
|
private DatabaseRepository repo;
|
||||||
private int groupDelay;
|
private int groupDelay;
|
||||||
|
|
||||||
public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker<Group> locker, @Injection("groupDelay") int groupDelay){
|
public GroupCreate(DatabaseRepository repo, Locker<Group> locker, int groupDelay){
|
||||||
this.repo = repo;
|
this.repo = repo;
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
this.groupDelay = groupDelay;
|
this.groupDelay = groupDelay;
|
||||||
|
|
|
@ -14,7 +14,6 @@ import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -27,7 +26,7 @@ public class GroupJoin implements Response{
|
||||||
|
|
||||||
private final Locker<Completion> leaderboard;
|
private final Locker<Completion> leaderboard;
|
||||||
|
|
||||||
public GroupJoin(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("waitTime") String waitTime, @Injection("leaderboard") Locker<Completion> locker){
|
public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime, Locker<Completion> locker){
|
||||||
this.repo = repo;
|
this.repo = repo;
|
||||||
this.groupDelay = groupDelay;
|
this.groupDelay = groupDelay;
|
||||||
this.waitTime = waitTime;
|
this.waitTime = waitTime;
|
||||||
|
|
|
@ -14,7 +14,6 @@ import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Locker;
|
import dev.peerat.framework.Locker;
|
||||||
import dev.peerat.framework.Response;
|
import dev.peerat.framework.Response;
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
|
@ -26,7 +25,7 @@ public class GroupQuit implements Response{
|
||||||
|
|
||||||
private final Locker<Completion> leaderboard;
|
private final Locker<Completion> leaderboard;
|
||||||
|
|
||||||
public GroupQuit(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("leaderboard") Locker<Completion> locker){
|
public GroupQuit(DatabaseRepository repo, int groupDelay, Locker<Completion> locker){
|
||||||
this.repo = repo;
|
this.repo = repo;
|
||||||
this.groupDelay = groupDelay;
|
this.groupDelay = groupDelay;
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,9 @@ package dev.peerat.backend.routes.users;
|
||||||
|
|
||||||
import static dev.peerat.framework.RequestType.POST;
|
import static dev.peerat.framework.RequestType.POST;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
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.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import dev.peerat.backend.model.PeerAtUser;
|
import dev.peerat.backend.model.PeerAtUser;
|
||||||
|
@ -28,28 +23,13 @@ public class ForgotPassword extends FormResponse{
|
||||||
private Router<PeerAtUser> router;
|
private Router<PeerAtUser> router;
|
||||||
private DatabaseRepository repo;
|
private DatabaseRepository repo;
|
||||||
private Mail mail;
|
private Mail mail;
|
||||||
private Map<String, String> codes;
|
private Map<String, Integer> codes;
|
||||||
private List<Random> randoms;
|
|
||||||
|
|
||||||
public ForgotPassword(Router<PeerAtUser> router, DatabaseRepository repo, Mail mail){
|
public ForgotPassword(Router<PeerAtUser> router, DatabaseRepository repo, Mail mail){
|
||||||
this.router = router;
|
this.router = router;
|
||||||
this.repo = repo;
|
this.repo = repo;
|
||||||
this.mail = mail;
|
this.mail = mail;
|
||||||
this.codes = new HashMap<>();
|
this.codes = new HashMap<>();
|
||||||
|
|
||||||
this.randoms = new ArrayList<>();
|
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
int randoms = random.nextInt(10)+3;
|
|
||||||
for(int i = 0; i < randoms; i++) this.randoms.add(new SecureRandom());
|
|
||||||
|
|
||||||
try {
|
|
||||||
Constructor<?> constructor = UUID.class.getDeclaredConstructor(byte[].class);
|
|
||||||
constructor.setAccessible(true);
|
|
||||||
this.uuidBuilder = constructor;
|
|
||||||
} catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Route(path = "^/user/fpw$", type = POST)
|
@Route(path = "^/user/fpw$", type = POST)
|
||||||
|
@ -74,16 +54,16 @@ public class ForgotPassword extends FormResponse{
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasFields("code") && areValids("password")){
|
if(hasFields("code") && areValids("password")){
|
||||||
String checkCode = codes.get(email);
|
Integer checkCode = codes.get(email);
|
||||||
if(checkCode == null){
|
if(checkCode == null){
|
||||||
context.response(400);
|
context.response(400);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String code = json.<String>get("code");
|
int code = json.<Number>get("code").intValue();
|
||||||
String password = json.get("password");
|
String password = json.get("password");
|
||||||
|
|
||||||
if(checkCode.equals(code)){
|
if(code == checkCode.intValue()){
|
||||||
codes.remove(email);
|
codes.remove(email);
|
||||||
|
|
||||||
repo.updatePassword(player, password);
|
repo.updatePassword(player, password);
|
||||||
|
@ -94,25 +74,18 @@ public class ForgotPassword extends FormResponse{
|
||||||
context.response(400);
|
context.response(400);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
String code = codeGenerator();
|
int code = codeGenerator();
|
||||||
codes.put(email, code);
|
codes.put(email, code);
|
||||||
mail.send(email, "Forgot your Peer @ Code password ?", "Your check code is "+code+" !");
|
mail.send(email, "Forgot your Peer @ Code password ?", "Your check code is "+code+" !");
|
||||||
context.response(200);
|
context.response(200);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Constructor<?> uuidBuilder;
|
private int codeGenerator(){
|
||||||
|
int min = 1000;
|
||||||
|
int max = 9999;
|
||||||
|
return new Random().nextInt((max-min)) + min;
|
||||||
|
|
||||||
private String codeGenerator() throws Exception{
|
|
||||||
Random random = new Random();
|
|
||||||
Random target = this.randoms.get(random.nextInt(this.randoms.size()));
|
|
||||||
byte[] arrayOfByte = new byte[16];
|
|
||||||
target.nextBytes(arrayOfByte);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] & 0xF);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] | 0x40);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] & 0x3F);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] | 0x80);
|
|
||||||
return uuidBuilder.newInstance(arrayOfByte).toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import static dev.peerat.framework.RequestType.POST;
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
@ -13,15 +12,11 @@ import java.nio.file.Paths;
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.security.KeyPairGenerator;
|
import java.security.KeyPairGenerator;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.security.interfaces.RSAPublicKey;
|
import java.security.interfaces.RSAPublicKey;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.Base64.Encoder;
|
import java.util.Base64.Encoder;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
@ -37,12 +32,11 @@ import dev.peerat.backend.utils.Mail;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
import dev.peerat.framework.Router;
|
import dev.peerat.framework.Router;
|
||||||
import dev.peerat.framework.utils.json.JsonMap;
|
import dev.peerat.framework.utils.json.JsonMap;
|
||||||
|
|
||||||
public class MailConfirmation extends FormResponse{
|
public class MailConfirmation extends FormResponse {
|
||||||
|
|
||||||
private DatabaseRepository databaseRepo;
|
private DatabaseRepository databaseRepo;
|
||||||
private Router<PeerAtUser> router;
|
private Router<PeerAtUser> router;
|
||||||
|
@ -50,16 +44,15 @@ public class MailConfirmation extends FormResponse{
|
||||||
private KeyPairGenerator generator;
|
private KeyPairGenerator generator;
|
||||||
private Encoder encoder;
|
private Encoder encoder;
|
||||||
private String gitToken;
|
private String gitToken;
|
||||||
private Map<String, String> playersWaiting;
|
private Map<String, Integer> playersWaiting;
|
||||||
private Mail mail;
|
private Mail mail;
|
||||||
private List<Random> randoms;
|
|
||||||
|
|
||||||
public MailConfirmation(
|
public MailConfirmation(
|
||||||
DatabaseRepository databaseRepo,
|
DatabaseRepository databaseRepo,
|
||||||
Router<PeerAtUser> router,
|
Router<PeerAtUser> router,
|
||||||
@Injection("usersFiles") String initUsersFilesPath,
|
String initUsersFilesPath,
|
||||||
@Injection("gitToken") String gitToken,
|
String gitToken,
|
||||||
@Injection("waitting") Map<String, String> playersWaiting,
|
Map<String, Integer> playersWaiting,
|
||||||
Mail mail) throws NoSuchAlgorithmException{
|
Mail mail) throws NoSuchAlgorithmException{
|
||||||
|
|
||||||
this.databaseRepo = databaseRepo;
|
this.databaseRepo = databaseRepo;
|
||||||
|
@ -73,20 +66,6 @@ public class MailConfirmation extends FormResponse{
|
||||||
generator.initialize(4096);
|
generator.initialize(4096);
|
||||||
encoder = Base64.getEncoder();
|
encoder = Base64.getEncoder();
|
||||||
|
|
||||||
this.randoms = new ArrayList<>();
|
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
int randoms = random.nextInt(10)+3;
|
|
||||||
for(int i = 0; i < randoms; i++) this.randoms.add(new SecureRandom());
|
|
||||||
|
|
||||||
try {
|
|
||||||
Constructor<?> constructor = UUID.class.getDeclaredConstructor(byte[].class);
|
|
||||||
constructor.setAccessible(true);
|
|
||||||
this.uuidBuilder = constructor;
|
|
||||||
} catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
validator("pseudo", "[a-zA-Z0-9&|!?{}\\[\\]%/*\\-+=:;,_#@ ]{3,100}");
|
validator("pseudo", "[a-zA-Z0-9&|!?{}\\[\\]%/*\\-+=:;,_#@ ]{3,100}");
|
||||||
validator("firstname", "^(?>[a-zA-Z]+ ?)+$");
|
validator("firstname", "^(?>[a-zA-Z]+ ?)+$");
|
||||||
validator("lastname", "^(?>[a-zA-Z]+ ?)+$");
|
validator("lastname", "^(?>[a-zA-Z]+ ?)+$");
|
||||||
|
@ -108,13 +87,13 @@ public class MailConfirmation extends FormResponse{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String email = json.get("email");
|
String email = json.get("email");
|
||||||
String code = json.<String>get("code");
|
int code = json.<Number>get("code").intValue();
|
||||||
String pseudo = json.get("pseudo");
|
String pseudo = json.get("pseudo");
|
||||||
String firstname = json.get("firstname");
|
String firstname = json.get("firstname");
|
||||||
String lastname = json.get("lastname");
|
String lastname = json.get("lastname");
|
||||||
String password = json.get("passwd");
|
String password = json.get("passwd");
|
||||||
|
|
||||||
String checkCode = playersWaiting.get(email);
|
Integer checkCode = playersWaiting.get(email);
|
||||||
if(checkCode == null){
|
if(checkCode == null){
|
||||||
context.response(400);
|
context.response(400);
|
||||||
return;
|
return;
|
||||||
|
@ -123,7 +102,7 @@ public class MailConfirmation extends FormResponse{
|
||||||
boolean pseudoAvailable = databaseRepo.checkPseudoAvailability(pseudo);
|
boolean pseudoAvailable = databaseRepo.checkPseudoAvailability(pseudo);
|
||||||
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
||||||
if(pseudoAvailable && emailAvailable){
|
if(pseudoAvailable && emailAvailable){
|
||||||
if(code.equals(checkCode)){
|
if(code == checkCode.intValue()){
|
||||||
playersWaiting.remove(email);
|
playersWaiting.remove(email);
|
||||||
int id = databaseRepo.register(pseudo, email, password, firstname, lastname, "", "", "");
|
int id = databaseRepo.register(pseudo, email, password, firstname, lastname, "", "", "");
|
||||||
if(id >= 0){
|
if(id >= 0){
|
||||||
|
@ -138,7 +117,7 @@ public class MailConfirmation extends FormResponse{
|
||||||
error.set("username_valid", pseudo);
|
error.set("username_valid", pseudo);
|
||||||
error.set("email_valid", email);
|
error.set("email_valid", email);
|
||||||
writer.write(error.toString());
|
writer.write(error.toString());
|
||||||
String ncode = codeGenerator()+codeGenerator();
|
int ncode = codeGenerator();
|
||||||
playersWaiting.put(email, ncode);
|
playersWaiting.put(email, ncode);
|
||||||
mail.send(email, "Welcome @ Peer @ Code", "Your check code is "+ncode+" !");
|
mail.send(email, "Welcome @ Peer @ Code", "Your check code is "+ncode+" !");
|
||||||
}
|
}
|
||||||
|
@ -154,18 +133,11 @@ public class MailConfirmation extends FormResponse{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Constructor<?> uuidBuilder;
|
private int codeGenerator(){
|
||||||
|
int min = 1000;
|
||||||
|
int max = 9999;
|
||||||
|
return new Random().nextInt((max-min)) + min;
|
||||||
|
|
||||||
private String codeGenerator() throws Exception{
|
|
||||||
Random random = new Random();
|
|
||||||
Random target = this.randoms.get(random.nextInt(this.randoms.size()));
|
|
||||||
byte[] arrayOfByte = new byte[16];
|
|
||||||
target.nextBytes(arrayOfByte);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] & 0xF);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] | 0x40);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] & 0x3F);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] | 0x80);
|
|
||||||
return uuidBuilder.newInstance(arrayOfByte).toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
||||||
|
|
|
@ -2,13 +2,8 @@ package dev.peerat.backend.routes.users;
|
||||||
|
|
||||||
import static dev.peerat.framework.RequestType.POST;
|
import static dev.peerat.framework.RequestType.POST;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
import dev.peerat.backend.bonus.extract.RouteDoc;
|
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||||
|
@ -18,36 +13,19 @@ import dev.peerat.backend.utils.Mail;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
import dev.peerat.framework.HttpReader;
|
import dev.peerat.framework.HttpReader;
|
||||||
import dev.peerat.framework.HttpWriter;
|
import dev.peerat.framework.HttpWriter;
|
||||||
import dev.peerat.framework.Injection;
|
|
||||||
import dev.peerat.framework.Route;
|
import dev.peerat.framework.Route;
|
||||||
import dev.peerat.framework.utils.json.JsonMap;
|
import dev.peerat.framework.utils.json.JsonMap;
|
||||||
|
|
||||||
public class Register extends FormResponse{
|
public class Register extends FormResponse {
|
||||||
|
|
||||||
private DatabaseRepository databaseRepo;
|
private DatabaseRepository databaseRepo;
|
||||||
private Map<String, String> playersWaiting;
|
private Map<String, Integer> playersWaiting;
|
||||||
private Mail mail;
|
private Mail mail;
|
||||||
private String host;
|
|
||||||
private List<Random> randoms;
|
|
||||||
|
|
||||||
public Register(DatabaseRepository databaseRepo, @Injection("waitting") Map<String, String> playersWaiting, Mail mail, @Injection("issuer") String host){
|
public Register(DatabaseRepository databaseRepo, Map<String, Integer> playersWaiting, Mail mail){
|
||||||
this.databaseRepo = databaseRepo;
|
this.databaseRepo = databaseRepo;
|
||||||
this.playersWaiting = playersWaiting;
|
this.playersWaiting = playersWaiting;
|
||||||
this.mail = mail;
|
this.mail = mail;
|
||||||
this.host = host;
|
|
||||||
this.randoms = new ArrayList<>();
|
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
int randoms = random.nextInt(10)+3;
|
|
||||||
for(int i = 0; i < randoms; i++) this.randoms.add(new SecureRandom());
|
|
||||||
|
|
||||||
try {
|
|
||||||
Constructor<?> constructor = UUID.class.getDeclaredConstructor(byte[].class);
|
|
||||||
constructor.setAccessible(true);
|
|
||||||
this.uuidBuilder = constructor;
|
|
||||||
} catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@RouteDoc(path = "/register", responseCode = 200, responseDescription = "L'utilisateur est inscrit")
|
@RouteDoc(path = "/register", responseCode = 200, responseDescription = "L'utilisateur est inscrit")
|
||||||
|
@ -70,9 +48,9 @@ public class Register extends FormResponse{
|
||||||
|
|
||||||
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
||||||
if(emailAvailable){
|
if(emailAvailable){
|
||||||
String code = codeGenerator()+codeGenerator();
|
int code = codeGenerator();
|
||||||
playersWaiting.put(email, code);
|
playersWaiting.put(email, code);
|
||||||
mail.send(email, "Welcome @ Peer @ Code", "Please, confirm your code on "+host+"/?code="+code+" !");
|
mail.send(email, "Welcome @ Peer @ Code", "Your check code is "+code+" !");
|
||||||
context.response(200);
|
context.response(200);
|
||||||
}else{
|
}else{
|
||||||
context.response(400);
|
context.response(400);
|
||||||
|
@ -82,18 +60,11 @@ public class Register extends FormResponse{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Constructor<?> uuidBuilder;
|
private int codeGenerator(){
|
||||||
|
int min = 1000;
|
||||||
|
int max = 9999;
|
||||||
|
return new Random().nextInt((max-min)) + min;
|
||||||
|
|
||||||
private String codeGenerator() throws Exception{
|
|
||||||
Random random = new Random();
|
|
||||||
Random target = this.randoms.get(random.nextInt(this.randoms.size()));
|
|
||||||
byte[] arrayOfByte = new byte[16];
|
|
||||||
target.nextBytes(arrayOfByte);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] & 0xF);
|
|
||||||
arrayOfByte[6] = (byte)(arrayOfByte[6] | 0x40);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] & 0x3F);
|
|
||||||
arrayOfByte[8] = (byte)(arrayOfByte[8] | 0x80);
|
|
||||||
return uuidBuilder.newInstance(arrayOfByte).toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue