Leo/Backend #82
@ -14,6 +14,7 @@ import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@ -53,7 +54,16 @@ public class MockController {
 | 
			
		||||
        userRepo.saveAll(mockUsers);
 | 
			
		||||
 | 
			
		||||
        for (User user: mockUsers){
 | 
			
		||||
            tokenService.saveToken(new Token(user,user.getPassword()), null);
 | 
			
		||||
            //Petit test pour être sur de delete les bons tokens
 | 
			
		||||
            if (user.getLastName().equals("brine")){
 | 
			
		||||
                Calendar c = Calendar.getInstance();
 | 
			
		||||
                c.setTime(new Date());
 | 
			
		||||
                c.add(Calendar.DAY_OF_WEEK, 1);
 | 
			
		||||
                tokenService.saveToken(new Token(user,user.getPassword(), c.getTime()));
 | 
			
		||||
            }else{
 | 
			
		||||
                tokenService.saveToken(new Token(user,user.getPassword(), new Date()));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 | 
			||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ public class AuthenticatorService {
 | 
			
		||||
        if (user == null){return null;}
 | 
			
		||||
        if (!userService.checkPassword(user,password)){return null;}
 | 
			
		||||
        String token = tokenService.generateNewToken();
 | 
			
		||||
        tokenService.saveToken(new Token(user, token),expirationDate);
 | 
			
		||||
        tokenService.saveToken(new Token(user, token,expirationDate));
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,15 @@
 | 
			
		||||
package ovh.herisson.Clyde.Services;
 | 
			
		||||
 | 
			
		||||
import org.springframework.scheduling.annotation.Async;
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
import ovh.herisson.Clyde.TokenCleaner;
 | 
			
		||||
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.security.SecureRandom;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.Timer;
 | 
			
		||||
import java.util.TimerTask;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class TokenService {
 | 
			
		||||
@ -37,9 +33,22 @@ public class TokenService {
 | 
			
		||||
        return tokenRepo.getByToken(token).getUser();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void saveToken(Token token, Date expirationDate){
 | 
			
		||||
    public void saveToken(Token token){
 | 
			
		||||
        tokenRepo.save(token);
 | 
			
		||||
        TokenCleaner cleaner = new TokenCleaner(token, tokenRepo);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Tous les jours a minuit
 | 
			
		||||
    @Scheduled(cron = "0 0 0 * * ?")
 | 
			
		||||
    public void autoDeleteToken() {
 | 
			
		||||
        for (Token t: tokenRepo.findAll()){
 | 
			
		||||
            Calendar cal = Calendar.getInstance();
 | 
			
		||||
            cal.setTime(new Date());
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 
				
					
						Maxime
						commented  
			
		ici aussi faudrait un >= ici aussi faudrait un >= 
			
			
		
				
					
						LeoMoulin
						commented  
			
		ban pas vraiment je penses vu que ca s'execute forcément a chaque fois qu'on save un token ! En plus si on permet le >= alors ca casse la limite de 5 ban pas vraiment je penses vu que ca s'execute forcément a chaque fois qu'on save un token ! En plus si on permet le >= alors ca casse la limite de 5 
			
			
		
				
					
						tonitch
						commented  
			
		Ca permet d'éviter les problème, genre imagine à un moment sans faire attention on va dans la db et on ajoute un token. bha du coup ça crée des tokens à l'infini. si tu met >= au moins t'es tranquil et ça casse pas la limite vu que quand ça passe à 5 ça supprimer quand même Ca permet d'éviter les problème, genre imagine à un moment sans faire attention on va dans la db et on ajoute un token. bha du coup ça crée des tokens à l'infini. si tu met >= au moins t'es tranquil et ça casse pas la limite vu que quand ça passe à 5 ça supprimer quand même 
			
			
		
				
					
						LeoMoulin
						commented  
			
		bah alors je peux faire un truc encore plus safe et en delete jusqua ce qu'il en reste 5 comme ca quoi qu'il arrive c'est bon ! De toute manière c'est juste une boucle a ajouter. Ca vous convient ? bah alors je peux faire un truc encore plus safe et en delete jusqua ce qu'il en reste 5 comme ca quoi qu'il arrive c'est bon ! De toute manière c'est juste une boucle a ajouter. Ca vous convient ? 
			
			
		
				
					
						Maxime
						commented  
			
		yup yup 
			
			
		 | 
			||||
 | 
			
		||||
            Calendar cal2 = Calendar.getInstance();
 | 
			
		||||
            cal2.setTime(t.getExpirationDate());
 | 
			
		||||
            if (cal.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)){
 | 
			
		||||
                tokenRepo.delete(t);
 | 
			
		||||
            }
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 
				
					
						tonitch
						commented  
			
		Calendar.getInstance retourne déjà l'instant ou il est crée Calendar.getInstance retourne déjà l'instant ou il est crée
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Calendar.html 
			
			
		
				
					
						LeoMoulin
						commented  
			
		C'est bien vu ca C'est bien vu ca  
			
			
		 | 
			||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
@ -4,6 +4,8 @@ import jakarta.persistence.*;
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class Token {
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
@ -14,10 +16,12 @@ 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){
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 
				
					
						tonitch
						commented  
			
		ça serrait cool de donner une valeur par défault, comme ça on ne doit pas toujours l'envoyer quand on se connecte ça serrait cool de donner une valeur par défault, comme ça on ne doit pas toujours l'envoyer quand on se connecte 
			
			
		
				
					
						Maxime
						commented  
			
		c'est le frontend qui doit nous la donner cette valeur par défaut. (en fct de si leuser veux rester connecté ou non c'est le frontend qui doit nous la donner cette valeur par défaut. (en fct de si leuser veux rester connecté ou non
) 
			
			
		
				
					
						tonitch
						commented  
			
		Cringe... but ok Cringe... but ok 
			
			
		 | 
			||||
        this.user = user;
 | 
			
		||||
        this.token = token;
 | 
			
		||||
        this.expirationDate = expirationDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Token(){}
 | 
			
		||||
@ -40,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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
package ovh.herisson.Clyde;
 | 
			
		||||
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.Timer;
 | 
			
		||||
import java.util.TimerTask;
 | 
			
		||||
 | 
			
		||||
public class TokenCleaner {
 | 
			
		||||
    private Token token;
 | 
			
		||||
    private TokenRepository tokenRepo;
 | 
			
		||||
 | 
			
		||||
    public TokenCleaner(Token token, TokenRepository tokenRepo){
 | 
			
		||||
        this.token = token;
 | 
			
		||||
        this.tokenRepo = tokenRepo;
 | 
			
		||||
        Timer timer = new Timer();
 | 
			
		||||
        timer.schedule(autoDeleteTokenTask, 30000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TimerTask autoDeleteTokenTask = new TimerTask() {
 | 
			
		||||
        public void run() {
 | 
			
		||||
            tokenRepo.delete(token);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
Junit est installé normalement, ça serait mieux de faire ce genre de chose dans les test !
(Et en plus ça peut rester vu que on sera noté dessu)
J'ai essayé et j'avoues galérer un peu a setup les tests unitaires sur la DB, je vais m'y mettre demain a tête reposée en attendant je nettoies les tests et je les referai propres !
en vrai au pire c'est pas grave mais je ne pense pas que ça ai sa place dans le projet final, genre il faut juste pas le commit et le garder ailleur quoi ^^
entiérement d'accord j'aurai du le nettoyer