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>
76 lines
2.3 KiB
Java
76 lines
2.3 KiB
Java
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.security.SecureRandom;
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
|
|
@Service
|
|
public class TokenService {
|
|
TokenRepository tokenRepo;
|
|
|
|
public TokenService(TokenRepository tokenRepo){
|
|
this.tokenRepo = tokenRepo;
|
|
}
|
|
|
|
public Iterable<Token> getAllTokens() {
|
|
return tokenRepo.findAll();
|
|
}
|
|
|
|
|
|
public String generateNewToken(){
|
|
byte[] bytes = new byte[64];
|
|
new SecureRandom().nextBytes(bytes);
|
|
for (int i = 0; i < bytes.length; i++) {
|
|
bytes[i] = (byte) (((bytes[i]+256)%256 %95+ 32));
|
|
while ((char)bytes[i] == ';'){
|
|
bytes[i] = new SecureRandom().generateSeed(1)[0];
|
|
}
|
|
}
|
|
// will never end up in the catch because of the way that SecureRandom.nextBytes is implemented
|
|
try {
|
|
return new String(bytes,"ISO_8859_1");
|
|
} catch (UnsupportedEncodingException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
public User getUserFromToken(String token) {
|
|
Token tokenRep = tokenRepo.getByToken(token);
|
|
if (tokenRep == null) return null;
|
|
return tokenRep.getUser();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
};
|
|
}
|