Files
DEV/DEV3.2/arbre_suite/Authentification/auth_sans_API/Authentification.java

141 lines
4.6 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.
import java.util.Scanner;
public class Authentification {
private Node root;
// Ajouter un utilisateur
public void addUser(String username, String password) {
root = addUserRec(root, username, password);
System.out.println("Utilisateur \"" + username + "\" ajouté");
}
private Node addUserRec(Node node, String username, String password) {
if (node == null) {
return new Node(username, password);
}
if (username.compareTo(node.username) < 0) {
node.left = addUserRec(node.left, username, password);
} else if (username.compareTo(node.username) > 0) {
node.right = addUserRec(node.right, username, password);
} else {
node.password = password; // Mise à jour du mot de passe si utilisateur existe
}
return node;
}
// Supprimer un utilisateur
public void removeUser(String username) {
root = removeUserRec(root, username);
}
private Node removeUserRec(Node node, String username) {
if (node == null) {
System.out.println("Utilisateur \"" + username + "\" non trouvé.");
return null;
}
if (username.compareTo(node.username) < 0) {
node.left = removeUserRec(node.left, username);
} else if (username.compareTo(node.username) > 0) {
node.right = removeUserRec(node.right, username);
} else {
// Cas où l'utilisateur est trouvé
if (node.left == null){
System.out.println("Utilisateur \"" + username + "\" retiré");
return node.right;
}
if (node.right == null){
System.out.println("Utilisateur \"" + username + "\" retiré");
return node.left;
}
// Remplacer par le successeur in-order
Node minNode = findMin(node.right);
node.username = minNode.username;
node.password = minNode.password;
node.right = removeUserRec(node.right, minNode.username);
}
System.out.println("Utilisateur \"" + username + "\" retiré");
return node;
}
private Node findMin(Node node) {
while (node.left != null) {
node = node.left;
}
return node;
}
// Authentification dun utilisateur
public void authenticate(String username, String password) {
Node user = findUser(root, username);
if (user != null && user.password.equals(password)) {
System.out.println("Utilisateur \"" + username + "\" reconnu");
} else {
System.out.println("Utilisateur \"" + username + "\" non reconnu");
}
}
private Node findUser(Node node, String username) {
if (node == null){
return null;
}
if (username.equals(node.username)){
return node;
}
if (username.compareTo(node.username) < 0) {
return findUser(node.left, username);
}
return findUser(node.right, username);
}
// Main pour le test
public static void main(String[] args) {
Authentification auth = new Authentification();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("> ");
String command = scanner.nextLine();
String[] parts = command.split(" ");
if (parts.length == 0) continue;
switch (parts[0].toLowerCase()) {
case "add":
if (parts.length == 3) {
auth.addUser(parts[1], parts[2]);
} else {
System.out.println("Usage : add <username> <password>");
}
break;
case "del":
if (parts.length == 2) {
auth.removeUser(parts[1]);
} else {
System.out.println("Usage : del <username>");
}
break;
case "auth":
if (parts.length == 3) {
auth.authenticate(parts[1], parts[2]);
} else {
System.out.println("Usage : auth <username> <password>");
}
break;
case "quit":
System.out.println("Au revoir");
scanner.close();
return;
default:
System.out.println("Commande non reconnue.");
}
}
}
}