package fr.iutfbleau.papillon; import java.io.*; import java.util.UUID; /** * La classe UserKey permet de gérer une clé d'identification locale * unique pour un utilisateur du logiciel Papillon. * *

* Cette clé est stockée dans un fichier caché nommé .papillon_id * 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. *

* *

* 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. *

* * @version 1.0 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL */ public class UserKey { /** * Lit la clé stockée dans le fichier ~/.papillon_id * ou en génère une nouvelle si le fichier n'existe pas ou est vide. * *

Cette méthode est utilisée par {@link GestionRappel} pour associer * chaque utilisateur à ses données locales.

* * @return une chaîne de caractères représentant la clé unique de l'utilisateur */ protected static String lireOuCreerCle() { // 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()) { 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é."); } 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); } // Sinon, on génère une nouvelle clé et on l’écrit dans le fichier else { cle = genererCle(); ecrireCle(fichier, cle); 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; } /** * Génère une nouvelle clé unique sous la forme d'un identifiant universel (UUID). * *

Cette méthode utilise la classe {@link java.util.UUID} pour générer * une chaîne aléatoire unique et pratiquement impossible à deviner.

* * @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. * *

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.

* * @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(); } }