Compare commits
2 commits
1f2e30a7d1
...
26eea355f1
Author | SHA1 | Date | |
---|---|---|---|
26eea355f1 | |||
e2cf4f8542 |
6 changed files with 51 additions and 59 deletions
|
@ -47,16 +47,22 @@ public class Configuration {
|
||||||
System.out.println("Config on " + _file.getAbsolutePath());
|
System.out.println("Config on " + _file.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load() throws Exception {
|
public <T> Configuration addDefaultValue(String name, T value) throws Exception{
|
||||||
if (!this._file.exists())
|
if(value == null) throw new IllegalArgumentException("Value cannot be null");
|
||||||
return;
|
Field field = getClass().getDeclaredField(name);
|
||||||
|
field.setAccessible(true);
|
||||||
|
field.set(this, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load() throws Exception{
|
||||||
|
if(!this._file.exists()) return;
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(this._file));
|
BufferedReader reader = new BufferedReader(new FileReader(this._file));
|
||||||
String line;
|
String line;
|
||||||
while ((line = reader.readLine()) != null) {
|
while((line = reader.readLine()) != null){
|
||||||
String[] split = line.split("=");
|
String[] split = line.split("=");
|
||||||
Field field = getClass().getDeclaredField(split[0]);
|
Field field = getClass().getDeclaredField(split[0]);
|
||||||
if (field == null)
|
if(field == null) continue;
|
||||||
continue;
|
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
injectValue(field, split[1]);
|
injectValue(field, split[1]);
|
||||||
}
|
}
|
||||||
|
@ -110,10 +116,9 @@ public class Configuration {
|
||||||
}
|
}
|
||||||
Field[] fields = getClass().getDeclaredFields();
|
Field[] fields = getClass().getDeclaredFields();
|
||||||
BufferedWriter writer = new BufferedWriter(new FileWriter(_file));
|
BufferedWriter writer = new BufferedWriter(new FileWriter(_file));
|
||||||
for (Field field : fields) {
|
for(Field field : fields){
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
if (field.getName().startsWith("_"))
|
if(field.getName().startsWith("_")) continue;
|
||||||
continue;
|
|
||||||
Object value = field.get(this);
|
Object value = field.get(this);
|
||||||
writer.write(field.getName() + "=" + value);
|
writer.write(field.getName() + "=" + value);
|
||||||
}
|
}
|
||||||
|
@ -165,9 +170,7 @@ public class Configuration {
|
||||||
return this.use_ssl;
|
return this.use_ssl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUsersFiles() {
|
public String getUsersFiles(){
|
||||||
if (users_files == null || users_files.trim().isEmpty())
|
|
||||||
users_files = "/tmp/users_files";
|
|
||||||
return users_files;
|
return users_files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import java.util.regex.Matcher;
|
||||||
import dev.peerat.backend.model.Completion;
|
import dev.peerat.backend.model.Completion;
|
||||||
import dev.peerat.backend.model.Group;
|
import dev.peerat.backend.model.Group;
|
||||||
import dev.peerat.backend.model.PeerAtUser;
|
import dev.peerat.backend.model.PeerAtUser;
|
||||||
import dev.peerat.backend.model.Player;
|
|
||||||
import dev.peerat.backend.repository.DatabaseRepository;
|
import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.backend.routes.BadgeDetails;
|
import dev.peerat.backend.routes.BadgeDetails;
|
||||||
import dev.peerat.backend.routes.ChapterElement;
|
import dev.peerat.backend.routes.ChapterElement;
|
||||||
|
@ -42,7 +41,8 @@ import dev.peerat.framework.Router;
|
||||||
|
|
||||||
public class Main{
|
public class Main{
|
||||||
public static void main(String[] args) throws Exception{
|
public static void main(String[] args) throws Exception{
|
||||||
Configuration config = new Configuration("config.txt");
|
Configuration config = new Configuration("config.txt")
|
||||||
|
.addDefaultValue("users_files", "/tmp/users_files");
|
||||||
config.load();
|
config.load();
|
||||||
|
|
||||||
Class.forName("com.mysql.cj.jdbc.Driver");
|
Class.forName("com.mysql.cj.jdbc.Driver");
|
||||||
|
@ -87,7 +87,7 @@ public class Main{
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config){
|
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config){
|
||||||
Map<Player, Integer> playersWaiting = new HashMap<>();
|
Map<String, Integer> playersWaiting = new HashMap<>();
|
||||||
router.register(new Register(repo, playersWaiting));
|
router.register(new Register(repo, playersWaiting));
|
||||||
router.register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting));
|
router.register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting));
|
||||||
router.register(new Login(repo, router));
|
router.register(new Login(repo, router));
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.regex.Matcher;
|
||||||
|
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||||
import dev.peerat.backend.model.PeerAtUser;
|
import dev.peerat.backend.model.PeerAtUser;
|
||||||
import dev.peerat.backend.repository.DatabaseRepository;
|
import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
|
@ -24,7 +25,10 @@ public class DynamicLogs implements Response{
|
||||||
this.locker = locker;
|
this.locker = locker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Route(path = "^/admin/logs$", needLogin = true, websocket = true)
|
@RouteDoc(path = "/admin/logs", responseCode = 200, responseDescription = "L'utilisateur peux voir les logs en directe")
|
||||||
|
@RouteDoc(responseCode = 401, responseDescription = "L'utilisateur n'a pas accès à cette ressource")
|
||||||
|
|
||||||
|
@Route(path = "^/admin/logs$", websocket = true)
|
||||||
public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception {
|
public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception {
|
||||||
//check if admin
|
//check if admin
|
||||||
|
|
||||||
|
@ -33,6 +37,7 @@ public class DynamicLogs implements Response{
|
||||||
locker.init(key);
|
locker.init(key);
|
||||||
try {
|
try {
|
||||||
while(!reader.isClosed()){
|
while(!reader.isClosed()){
|
||||||
|
locker.lock(key);
|
||||||
Context instance = locker.getValue(key);
|
Context instance = locker.getValue(key);
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("logged", instance.isLogged());
|
json.put("logged", instance.isLogged());
|
||||||
|
@ -43,7 +48,6 @@ public class DynamicLogs implements Response{
|
||||||
|
|
||||||
writer.write(json.toJSONString());
|
writer.write(json.toJSONString());
|
||||||
writer.flush();
|
writer.flush();
|
||||||
locker.lock(key);
|
|
||||||
}
|
}
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import dev.peerat.backend.bonus.extract.RouteDoc;
|
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||||
import dev.peerat.backend.model.PeerAtUser;
|
import dev.peerat.backend.model.PeerAtUser;
|
||||||
import dev.peerat.backend.model.Player;
|
|
||||||
import dev.peerat.backend.repository.DatabaseRepository;
|
import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.backend.utils.FormResponse;
|
import dev.peerat.backend.utils.FormResponse;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
|
@ -40,14 +39,14 @@ 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<Player, Integer> playersWaiting;
|
private Map<String, Integer> playersWaiting;
|
||||||
|
|
||||||
public MailConfirmation(
|
public MailConfirmation(
|
||||||
DatabaseRepository databaseRepo,
|
DatabaseRepository databaseRepo,
|
||||||
Router<PeerAtUser> router,
|
Router<PeerAtUser> router,
|
||||||
String initUsersFilesPath,
|
String initUsersFilesPath,
|
||||||
String gitToken,
|
String gitToken,
|
||||||
Map<Player, Integer> playersWaiting){
|
Map<String, Integer> playersWaiting){
|
||||||
this.databaseRepo = databaseRepo;
|
this.databaseRepo = databaseRepo;
|
||||||
this.router = router;
|
this.router = router;
|
||||||
usersFilesPath = initUsersFilesPath;
|
usersFilesPath = initUsersFilesPath;
|
||||||
|
@ -72,36 +71,41 @@ public class MailConfirmation extends FormResponse {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JSONObject json = json(reader);
|
JSONObject json = json(reader);
|
||||||
if(!areValids("email","code","passwd")){
|
if(!areValids("email","code","pseudo","firstname","lastname","passwd")){
|
||||||
context.response(400);
|
context.response(400);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String email = (String) json.get("email");
|
String email = (String) json.get("email");
|
||||||
String password = (String) json.get("passwd");
|
|
||||||
int code = (int) json.get("code");
|
int code = (int) json.get("code");
|
||||||
|
String pseudo = (String) json.get("pseudo");
|
||||||
|
String firstname = (String) json.get("firstname");
|
||||||
|
String lastname = (String) json.get("lastnae");
|
||||||
|
String password = (String) json.get("passwd");
|
||||||
|
|
||||||
Player newPlayer = getPlayerFromEmail(email);
|
Integer checkCode = playersWaiting.get(email);
|
||||||
if (newPlayer != null && code == playersWaiting.get(newPlayer)){
|
if(checkCode == null){
|
||||||
playersWaiting.remove(newPlayer);
|
context.response(400);
|
||||||
String pseudo = newPlayer.getPseudo();
|
return;
|
||||||
int id;
|
}
|
||||||
if ((id = databaseRepo.register(pseudo, email, password, newPlayer.getFirstname(), newPlayer.getLastname(), "", "", "")) >= 0) {
|
if(code == checkCode.intValue()){
|
||||||
|
playersWaiting.remove(email);
|
||||||
|
int id = databaseRepo.register(pseudo, email, password, firstname, lastname, "", "", "");
|
||||||
|
if(id >= 0){
|
||||||
|
createFolderToSaveSourceCode(pseudo);
|
||||||
|
generateGitKey(email, pseudo, password);
|
||||||
context.response(200,
|
context.response(200,
|
||||||
"Access-Control-Expose-Headers: Authorization",
|
"Access-Control-Expose-Headers: Authorization",
|
||||||
"Authorization: Bearer " + this.router.createAuthUser(new PeerAtUser(id)));
|
"Authorization: Bearer " + this.router.createAuthUser(new PeerAtUser(id)));
|
||||||
createFolderToSaveSourceCode(pseudo);
|
}else{
|
||||||
generateGitKey(email, pseudo, password);
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
context.response(400);
|
context.response(400);
|
||||||
JSONObject error = new JSONObject();
|
JSONObject error = new JSONObject();
|
||||||
error.put("username_valid", pseudo);
|
error.put("username_valid", pseudo);
|
||||||
error.put("email_valid", email);
|
error.put("email_valid", email);
|
||||||
writer.write(error.toJSONString());
|
writer.write(error.toJSONString());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
context.response(400);
|
||||||
}
|
}
|
||||||
context.response(400);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
private void createFolderToSaveSourceCode(String pseudo) throws IOException {
|
||||||
|
@ -109,16 +113,6 @@ public class MailConfirmation extends FormResponse {
|
||||||
Files.createDirectories(Paths.get(String.format("%s/%s", usersFilesPath, pseudo)));
|
Files.createDirectories(Paths.get(String.format("%s/%s", usersFilesPath, pseudo)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Player getPlayerFromEmail(String email) {
|
|
||||||
Player toMatch = new Player(email);
|
|
||||||
for (Player p: playersWaiting.keySet()) {
|
|
||||||
if (p.equals(toMatch)) {
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateGitKey(String email, String pseudo, String password) throws Exception{
|
private String generateGitKey(String email, String pseudo, String password) throws Exception{
|
||||||
KeyPair pair = generator.generateKeyPair(); //doit être unique ???
|
KeyPair pair = generator.generateKeyPair(); //doit être unique ???
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,6 @@ import java.util.regex.Matcher;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
import dev.peerat.backend.bonus.extract.RouteDoc;
|
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||||
import dev.peerat.backend.model.PeerAtUser;
|
|
||||||
import dev.peerat.backend.model.Player;
|
|
||||||
import dev.peerat.backend.repository.DatabaseRepository;
|
import dev.peerat.backend.repository.DatabaseRepository;
|
||||||
import dev.peerat.backend.utils.FormResponse;
|
import dev.peerat.backend.utils.FormResponse;
|
||||||
import dev.peerat.framework.Context;
|
import dev.peerat.framework.Context;
|
||||||
|
@ -21,9 +19,9 @@ import dev.peerat.framework.Route;
|
||||||
public class Register extends FormResponse {
|
public class Register extends FormResponse {
|
||||||
|
|
||||||
private DatabaseRepository databaseRepo;
|
private DatabaseRepository databaseRepo;
|
||||||
private Map<Player, Integer> playersWaiting;
|
private Map<String, Integer> playersWaiting;
|
||||||
|
|
||||||
public Register(DatabaseRepository databaseRepo, Map<Player, Integer> playersWaiting){
|
public Register(DatabaseRepository databaseRepo, Map<String, Integer> playersWaiting){
|
||||||
this.databaseRepo = databaseRepo;
|
this.databaseRepo = databaseRepo;
|
||||||
this.playersWaiting = playersWaiting;
|
this.playersWaiting = playersWaiting;
|
||||||
}
|
}
|
||||||
|
@ -39,32 +37,26 @@ public class Register extends FormResponse {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JSONObject json = json(reader);
|
JSONObject json = json(reader);
|
||||||
if(!areValids("pseudo","email","firstname","lastname")){
|
if(!areValids("email")){
|
||||||
context.response(400);
|
context.response(400);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String pseudo = (String) json.get("pseudo");
|
|
||||||
String email = (String) json.get("email");
|
String email = (String) json.get("email");
|
||||||
String firstname = (String) json.get("firstname");
|
|
||||||
String lastname = (String) json.get("lastname");
|
|
||||||
|
|
||||||
boolean pseudoAvailable = databaseRepo.checkPseudoAvailability(pseudo);
|
|
||||||
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
boolean emailAvailable = databaseRepo.checkEmailAvailability(email);
|
||||||
if(pseudoAvailable && emailAvailable){
|
if(emailAvailable){
|
||||||
Player player = new Player(pseudo, email, firstname, lastname);
|
playersWaiting.put(email, codeGenerator());
|
||||||
playersWaiting.put(player, codeGenerator());
|
|
||||||
context.response(200);
|
context.response(200);
|
||||||
}else{
|
}else{
|
||||||
context.response(400);
|
context.response(400);
|
||||||
JSONObject error = new JSONObject();
|
JSONObject error = new JSONObject();
|
||||||
error.put("username_valid", pseudoAvailable);
|
|
||||||
error.put("email_valid", emailAvailable);
|
error.put("email_valid", emailAvailable);
|
||||||
writer.write(error.toJSONString());
|
writer.write(error.toJSONString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int codeGenerator() {
|
private int codeGenerator(){
|
||||||
int min = 1000;
|
int min = 1000;
|
||||||
int max = 9999;
|
int max = 9999;
|
||||||
return new Random().nextInt((max-min)) + min;
|
return new Random().nextInt((max-min)) + min;
|
||||||
|
|
|
@ -24,7 +24,6 @@ public class Mail {
|
||||||
props.put("mail.smtp.starttls.enable", "true");
|
props.put("mail.smtp.starttls.enable", "true");
|
||||||
|
|
||||||
Authenticator auth = new Authenticator() {
|
Authenticator auth = new Authenticator() {
|
||||||
//override the getPasswordAuthentication method
|
|
||||||
protected PasswordAuthentication getPasswordAuthentication() {
|
protected PasswordAuthentication getPasswordAuthentication() {
|
||||||
return new PasswordAuthentication(initUsername, initPassword);
|
return new PasswordAuthentication(initUsername, initPassword);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue