Leo/Backend (#82)
Ce merge enverra dans main : le timeout des token, la limite de 5 token par user, les nouvelles tables pour les demandes d'inscriptions Co-authored-by: Anthony Debucquoy <debucquoy.anthony@gmail.com> Reviewed-on: PGL/Clyde#82 Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com> Reviewed-by: Maxime <231026@umons.ac.be> Reviewed-by: Wal <karpinskiwal@gmail.com> Co-authored-by: LeoMoulin <leomoulin125@gmail.com> Co-committed-by: LeoMoulin <leomoulin125@gmail.com>
This commit is contained in:
		@ -7,12 +7,14 @@ import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Services.TokenService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@ -23,13 +25,14 @@ public class MockController {
 | 
			
		||||
 | 
			
		||||
    public final UserRepository userRepo;
 | 
			
		||||
    public final TokenRepository tokenRepo;
 | 
			
		||||
 | 
			
		||||
    public final TokenService tokenService;
 | 
			
		||||
    ArrayList<User> mockUsers;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public MockController(UserRepository userRepo, TokenRepository tokenRepo){
 | 
			
		||||
    public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService){
 | 
			
		||||
        this.tokenRepo = tokenRepo;
 | 
			
		||||
        this.userRepo = userRepo;
 | 
			
		||||
        this.tokenService = tokenService;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Saves an example of each user type by :
 | 
			
		||||
@ -41,10 +44,10 @@ public class MockController {
 | 
			
		||||
    @PostMapping("/mock")
 | 
			
		||||
    public void postMock(){
 | 
			
		||||
 | 
			
		||||
        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), "none",Role.Admin,passwordEncoder.encode("admin"));
 | 
			
		||||
        User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), "None",Role.Student,passwordEncoder.encode("student"));
 | 
			
		||||
        User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0),"none", Role.Teacher,passwordEncoder.encode("secretary"));
 | 
			
		||||
        User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), "none",Role.Teacher,passwordEncoder.encode("teacher"));
 | 
			
		||||
        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), null,Role.Admin,passwordEncoder.encode("admin"));
 | 
			
		||||
        User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), null,Role.Student,passwordEncoder.encode("student"));
 | 
			
		||||
        User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), null,Role.Teacher,passwordEncoder.encode("secretary"));
 | 
			
		||||
        User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher"));
 | 
			
		||||
 | 
			
		||||
        mockUsers = new ArrayList<User>(Arrays.asList(herobrine,joe,meh,joke));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,8 +6,10 @@ import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.context.annotation.Profile;
 | 
			
		||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 | 
			
		||||
import org.springframework.scheduling.annotation.EnableScheduling;
 | 
			
		||||
 | 
			
		||||
@Configuration
 | 
			
		||||
@EnableScheduling
 | 
			
		||||
public class JdbcConfig {
 | 
			
		||||
 | 
			
		||||
	@Bean
 | 
			
		||||
 | 
			
		||||
@ -4,10 +4,13 @@ import org.springframework.data.repository.CrudRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
public interface TokenRepository extends CrudRepository<Token,Long> {
 | 
			
		||||
 | 
			
		||||
    Token getByToken(String token);
 | 
			
		||||
 | 
			
		||||
    Iterable<Token> getByUser(User user);
 | 
			
		||||
 | 
			
		||||
    ArrayList <Token> getByUserOrderByExpirationDate(User user);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package ovh.herisson.Clyde.Services;
 | 
			
		||||
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
@ -26,7 +27,7 @@ public class AuthenticatorService {
 | 
			
		||||
        if (user == null){return null;}
 | 
			
		||||
        if (!userService.checkPassword(user,password)){return null;}
 | 
			
		||||
        String token = tokenService.generateNewToken();
 | 
			
		||||
        tokenService.saveToken(token,user,expirationDate);
 | 
			
		||||
        tokenService.saveToken(new Token(user, token,expirationDate));
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,19 @@
 | 
			
		||||
package ovh.herisson.Clyde.Services;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.io.UnsupportedEncodingException;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.security.SecureRandom;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class TokenService {
 | 
			
		||||
 | 
			
		||||
    TokenRepository tokenRepo;
 | 
			
		||||
 | 
			
		||||
    public TokenService(TokenRepository tokenRepo){
 | 
			
		||||
@ -48,7 +48,28 @@ public class TokenService {
 | 
			
		||||
        return tokenRep.getUser();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void saveToken(String token, User user, Date expirationDate){// todo faire qlq chose de l'expDate
 | 
			
		||||
        tokenRepo.save(new Token(user,token));
 | 
			
		||||
    public void saveToken(Token token){
 | 
			
		||||
        //Si l'utilisateur a déja 5 token delete celui qui devait expirer le plus vite
 | 
			
		||||
        ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser());
 | 
			
		||||
        while(tokenList.size() >= 5){
 | 
			
		||||
            tokenRepo.delete(tokenList.get(0));
 | 
			
		||||
            tokenList.remove(tokenList.get(0));
 | 
			
		||||
        }
 | 
			
		||||
        tokenRepo.save(token);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Tous les jours a minuit
 | 
			
		||||
    @Scheduled(cron = "0 0 0 * * ?")
 | 
			
		||||
    public void autoDeleteToken() {
 | 
			
		||||
        for (Token t: tokenRepo.findAll()){
 | 
			
		||||
            Calendar cal = Calendar.getInstance();
 | 
			
		||||
 | 
			
		||||
            Calendar cal2 = Calendar.getInstance();
 | 
			
		||||
            cal2.setTime(t.getExpirationDate());
 | 
			
		||||
 | 
			
		||||
            if (cal.compareTo(cal2) >= 0){
 | 
			
		||||
                tokenRepo.delete(t);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,108 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
public class InscriptionRequest {
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private int id;
 | 
			
		||||
    private String firstName;
 | 
			
		||||
    private String lastName;
 | 
			
		||||
    private String adress;
 | 
			
		||||
    private String email;
 | 
			
		||||
    private String country;
 | 
			
		||||
    private Date birthDate;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name="Cursus")
 | 
			
		||||
    private Cursus cursus;
 | 
			
		||||
    private RequestState state;
 | 
			
		||||
    private String profilePicture;
 | 
			
		||||
    public InscriptionRequest(){}
 | 
			
		||||
    public InscriptionRequest(String lastName, String firstName, String adress, String email, String country, Date birthDate, RequestState state, String profilePicture){
 | 
			
		||||
        this.lastName = lastName;
 | 
			
		||||
        this.firstName = firstName;
 | 
			
		||||
        this.adress = adress;
 | 
			
		||||
        this.email = email;
 | 
			
		||||
        this.country = country;
 | 
			
		||||
        this.birthDate = birthDate;
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirstName() {
 | 
			
		||||
        return firstName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirstName(String firstName) {
 | 
			
		||||
        this.firstName = firstName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLastName() {
 | 
			
		||||
        return lastName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLastName(String lastName) {
 | 
			
		||||
        this.lastName = lastName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getAdress() {
 | 
			
		||||
        return adress;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAdress(String adress) {
 | 
			
		||||
        this.adress = adress;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getEmail() {
 | 
			
		||||
        return email;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEmail(String email) {
 | 
			
		||||
        this.email = email;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountry() {
 | 
			
		||||
        return country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCountry(String country) {
 | 
			
		||||
        this.country = country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getBirthDate() {
 | 
			
		||||
        return birthDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBirthDate(Date birthDate) {
 | 
			
		||||
        this.birthDate = birthDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Cursus getCursus() {
 | 
			
		||||
        return cursus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCursus(Cursus cursus) {
 | 
			
		||||
        this.cursus = cursus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public RequestState getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setState(RequestState state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getProfilePicture() {
 | 
			
		||||
        return profilePicture;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setProfilePicture(String profilePicture) {
 | 
			
		||||
        this.profilePicture = profilePicture;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,69 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.GeneratedValue;
 | 
			
		||||
import jakarta.persistence.GenerationType;
 | 
			
		||||
import jakarta.persistence.JoinColumn;
 | 
			
		||||
import jakarta.persistence.ManyToOne;
 | 
			
		||||
 | 
			
		||||
public class ReinscriptionRequest {
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private int id;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name = "User")
 | 
			
		||||
    private User user;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name = "Cursus")
 | 
			
		||||
    private Cursus newCursus;
 | 
			
		||||
    private RequestState state;
 | 
			
		||||
 | 
			
		||||
    //Permet de différencier les demandes de changement et une réinscription dans le même cursus
 | 
			
		||||
    //Pour la réinscription on va le mettre a 0
 | 
			
		||||
    private boolean type;
 | 
			
		||||
 | 
			
		||||
    public ReinscriptionRequest(){}
 | 
			
		||||
 | 
			
		||||
    public ReinscriptionRequest(User user, Cursus newCursus, RequestState state, boolean type){
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.newCursus = newCursus;
 | 
			
		||||
        this.state = state;
 | 
			
		||||
        this.type = type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public User getUser() {
 | 
			
		||||
        return user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUser(User user) {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Cursus getNewCursus() {
 | 
			
		||||
        return newCursus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setNewCursus(Cursus newCursus) {
 | 
			
		||||
        this.newCursus = newCursus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public RequestState getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setState(RequestState state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isType() {
 | 
			
		||||
        return type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setType(boolean type) {
 | 
			
		||||
        this.type = type;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
public enum RequestState {
 | 
			
		||||
    Accepted,
 | 
			
		||||
    Refused,
 | 
			
		||||
    Pending;
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,10 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class Token {
 | 
			
		||||
@ -12,13 +16,16 @@ public class Token {
 | 
			
		||||
    @JoinColumn(name ="Users")
 | 
			
		||||
    private User user;
 | 
			
		||||
    private String token;
 | 
			
		||||
    private Date expirationDate;
 | 
			
		||||
 | 
			
		||||
    public Token(User user, String token){
 | 
			
		||||
    public Token(User user, String token, Date expirationDate){
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.token = token;
 | 
			
		||||
        this.expirationDate = expirationDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Token(){}
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
@ -37,4 +44,12 @@ public class Token {
 | 
			
		||||
    public void setToken(String data) {
 | 
			
		||||
        this.token = data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setExpirationDate(Date date){
 | 
			
		||||
        this.expirationDate = date;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getExpirationDate(){
 | 
			
		||||
        return expirationDate;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ public class User {
 | 
			
		||||
    private int regNo;
 | 
			
		||||
    private String lastName;
 | 
			
		||||
    private String firstName;
 | 
			
		||||
    @Column(unique = true)
 | 
			
		||||
    private String email;
 | 
			
		||||
    private String address;
 | 
			
		||||
    private String country;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user