Files
SAE31_2025/src/fr/iutfbleau/papillon/UserKey.java
T
2025-10-26 02:45:02 +01:00

105 lines
3.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package fr.iutfbleau.papillon;
import java.io.*;
import java.util.UUID;
/**
* 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 nexiste 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
* @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
*/
public class UserKey {
/**
* 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
*/
protected static String lireOuCreerCle() {
// Récupère le dossier personnel de lutilisateur
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).
*
* <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 sil nexiste 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();
}
}