2025-10-26 02:45:02 +01:00
|
|
|
|
package fr.iutfbleau.papillon;
|
|
|
|
|
|
|
2025-10-23 23:42:25 +02:00
|
|
|
|
import java.io.*;
|
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
2025-10-26 02:17:41 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* La classe <code>UserKey</code> permet de gérer une clé d'identification locale
|
|
|
|
|
|
* unique pour un utilisateur du logiciel <b>Papillon</b>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>
|
|
|
|
|
|
* Cette clé est stockée dans un fichier caché nommé <code>.papillon_id</code>
|
|
|
|
|
|
* dans le répertoire personnel de l'utilisateur.
|
|
|
|
|
|
* Elle sert à identifier l'utilisateur sans avoir besoin de système de connexion
|
|
|
|
|
|
* ou d'authentification centralisée.
|
|
|
|
|
|
* </p>
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>
|
|
|
|
|
|
* Lors du premier lancement du programme, si le fichier n’existe pas ou est vide,
|
|
|
|
|
|
* une clé unique (UUID) est automatiquement générée, enregistrée dans ce fichier
|
|
|
|
|
|
* et réutilisée pour les prochaines exécutions.
|
|
|
|
|
|
* </p>
|
|
|
|
|
|
*
|
|
|
|
|
|
* @version 1.0
|
2025-10-26 02:45:02 +01:00
|
|
|
|
* @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
|
2025-10-26 02:17:41 +01:00
|
|
|
|
*/
|
2025-10-23 23:42:25 +02:00
|
|
|
|
public class UserKey {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-10-26 02:17:41 +01:00
|
|
|
|
* Lit la clé stockée dans le fichier <code>~/.papillon_id</code>
|
|
|
|
|
|
* ou en génère une nouvelle si le fichier n'existe pas ou est vide.
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>Cette méthode est utilisée par {@link GestionRappel} pour associer
|
|
|
|
|
|
* chaque utilisateur à ses données locales.</p>
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return une chaîne de caractères représentant la clé unique de l'utilisateur
|
2025-10-23 23:42:25 +02:00
|
|
|
|
*/
|
2025-10-26 02:17:41 +01:00
|
|
|
|
protected static String lireOuCreerCle() {
|
2025-10-23 23:42:25 +02:00
|
|
|
|
// Récupère le dossier personnel de l’utilisateur
|
|
|
|
|
|
String home = System.getProperty("user.home");
|
|
|
|
|
|
File fichier = new File(home, ".papillon_id");
|
|
|
|
|
|
String cle = "";
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
// Si le fichier existe déjà on lit son contenu
|
|
|
|
|
|
if (fichier.exists()) {
|
2025-10-26 02:17:41 +01:00
|
|
|
|
if (fichier.length() == 0) {
|
|
|
|
|
|
cle = genererCle(); // Génère une clé unique
|
|
|
|
|
|
ecrireCle(fichier, cle);
|
|
|
|
|
|
System.out.println("Le fichier de clé est vide. Génération d'une nouvelle clé.");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-23 23:42:25 +02:00
|
|
|
|
FileReader fr = new FileReader(fichier);
|
|
|
|
|
|
BufferedReader br = new BufferedReader(fr);
|
|
|
|
|
|
cle = br.readLine(); // lit la première ligne (la clé)
|
|
|
|
|
|
br.close();
|
|
|
|
|
|
fr.close();
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println("Clé existante trouvée : " + cle);
|
2025-10-26 02:17:41 +01:00
|
|
|
|
}
|
2025-10-23 23:42:25 +02:00
|
|
|
|
// Sinon, on génère une nouvelle clé et on l’écrit dans le fichier
|
|
|
|
|
|
else {
|
2025-10-26 02:17:41 +01:00
|
|
|
|
cle = genererCle();
|
|
|
|
|
|
ecrireCle(fichier, cle);
|
2025-10-23 23:42:25 +02:00
|
|
|
|
System.out.println("Nouvelle clé générée et enregistrée : " + cle);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
System.err.println("Erreur lors de la lecture/écriture du fichier de clé : " + e.getMessage());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return cle;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-26 02:17:41 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Génère une nouvelle clé unique sous la forme d'un identifiant universel (UUID).
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>Cette méthode utilise la classe {@link java.util.UUID} pour générer
|
|
|
|
|
|
* une chaîne aléatoire unique et pratiquement impossible à deviner.</p>
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return une chaîne aléatoire unique représentant une clé utilisateur
|
|
|
|
|
|
*/
|
|
|
|
|
|
private static String genererCle() {
|
|
|
|
|
|
return UUID.randomUUID().toString();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Écrit une clé donnée dans un fichier texte.
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>Cette méthode crée le fichier s’il n’existe pas, puis enregistre
|
|
|
|
|
|
* la clé passée en paramètre sur la première ligne du fichier.</p>
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param fichier le fichier dans lequel écrire la clé
|
|
|
|
|
|
* @param cle la clé à sauvegarder dans le fichier
|
|
|
|
|
|
* @throws IOException si une erreur survient lors de l’écriture
|
|
|
|
|
|
*/
|
|
|
|
|
|
private static void ecrireCle(File fichier, String cle) throws IOException {
|
|
|
|
|
|
FileWriter fw = new FileWriter(fichier);
|
|
|
|
|
|
BufferedWriter bw = new BufferedWriter(fw);
|
|
|
|
|
|
bw.write(cle);
|
|
|
|
|
|
bw.newLine();
|
|
|
|
|
|
bw.close();
|
|
|
|
|
|
fw.close();
|
|
|
|
|
|
}
|
2025-10-23 23:42:25 +02:00
|
|
|
|
}
|