Skip to content
Snippets Groups Projects
Commit ca7f82f5 authored by Jessie Ragot's avatar Jessie Ragot
Browse files

Merge branch 'main' into refactor/models-change

# Conflicts:
#	src/main/java/com/projet/projetIndu/config/SecurityConfig.java
#	src/main/java/com/projet/projetIndu/controllers/LoginController.java
#	src/main/java/com/projet/projetIndu/services/UserService.java
#	src/main/resources/application.properties
#	src/main/resources/templates/login.html
#	src/main/resources/templates/register.html
parents d564df30 440689bb
Branches
No related tags found
1 merge request!19[feature]models-change+authentification+registration
package com.projet.projetIndu;
import com.projet.projetIndu.entities.Role;
import com.projet.projetIndu.entities.User;
import com.projet.projetIndu.services.UserService;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProjetInduApplication {
@Autowired
private UserService userService;
@PostConstruct
public void init() {
User aichatou = userService.registerUser("aichatou", "test", Role.ADMIN);
System.out.println(aichatou);
}
public static void main(String[] args) {
SpringApplication.run(ProjetInduApplication.class, args);
......
package com.projet.projetIndu.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable()) // Désactiver CSRF pour les tests (à activer en prod)
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/register", "/login", "/css/**", "/js/**").permitAll() // Pages publiques
.requestMatchers("/dashboard/patient").hasAuthority("PATIENT") // Tableau de bord patient
.requestMatchers("/dashboard/doctor").hasAuthority("DOCTOR") // Tableau de bord médecin
.requestMatchers("/medical-files/**").authenticated() // Tout utilisateur connecté peut voir ses dossiers médicaux
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true) // Redirection après connexion
.permitAll()
)
.logout(logout -> logout
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.permitAll()
);
return http.build();
}
}
package com.projet.projetIndu.controllers;
import com.projet.projetIndu.entities.Role;
import com.projet.projetIndu.entities.User;
import com.projet.projetIndu.services.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
public class AuthController {
private final UserService userService;
public AuthController(UserService userService) {
this.userService = userService;
}
// Affiche le formulaire d'inscription
@GetMapping("/register")
public String showRegisterForm() {
return "register";
}
// Traite l'inscription
@PostMapping("/register")
public String registerUser(
@RequestParam String username,
@RequestParam String password,
@RequestParam Role role,
Model model) {
if (userService.getUserByUsername(username).isPresent()) {
model.addAttribute("error", "L'utilisateur existe déjà !");
return "register";
}
// Enregistrer l'utilisateur
User newUser = userService.registerUser(username, password, role);
// Redirection selon le rôle
if (newUser.getRole() == Role.DOCTOR) {
return "redirect:/doctor-dashboard";
} else {
return "redirect:/patient-dashboard";
}
}
}
package com.projet.projetIndu.controllers;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/dashboard")
public class DashboardController {
@GetMapping
public String redirectDashboard(Authentication authentication) {
System.out.println("Roles de l'utilisateur: " + authentication.getAuthorities());
if (authentication.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_DOCTOR"))) {
return "redirect:/dashboard/doctor";
} else if (authentication.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_PATIENT"))) {
return "redirect:/dashboard/patient";
}
return "redirect:/login";
}
@GetMapping("/patient")
public String patientDashboard() {
System.out.println("Redirection vers le dashboard patient...");
return "patient-dashboard";
}
@GetMapping("/doctor")
public String doctorDashboard() {
return "doctor-dashboard"; // Vue pour le médecin
}
}
......@@ -5,9 +5,9 @@ import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String loginPage() {
public String login() {
return "login";
}
}
package com.projet.projetIndu.dto;
import com.projet.projetIndu.entities.Role;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RegisterRequest {
private String username;
private String password;
private Role role;
}
<!DOCTYPE html>
<html lang="en">
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>$Title$</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tableau de Bord Patient</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
$END$
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
<header class="bg-white shadow-md">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
<h1 class="text-2xl font-semibold text-gray-900">Tableau de Bord Patient</h1>
<a href="/" class="text-blue-500 hover:text-blue-700">Retour à l'accueil</a>
</div>
</header>
<main class="mt-12 max-w-7xl mx-auto px-4">
<h2 class="text-3xl font-bold text-center text-gray-800">Bienvenue</h2>
<p class="mt-4 text-lg text-center text-gray-600">Accédez à vos informations médicales.</p>
<div class="mt-8 grid grid-cols-1 md:grid-cols-2 gap-6">
<a href="#" class="p-6 bg-white shadow-md rounded-lg hover:shadow-lg transition">
<h3 class="text-xl font-semibold text-gray-800">Mon Médecin</h3>
<p class="mt-2 text-gray-600">Voir les informations de votre médecin.</p>
</a>
<a href="/medical-files" class="p-6 bg-white shadow-md rounded-lg hover:shadow-lg transition">
<h3 class="text-xl font-semibold text-gray-800">Mes Dossiers Médicaux</h3>
<p class="mt-2 text-gray-600">Consulter vos dossiers médicaux.</p>
</a>
<a href="/appointments" class="p-6 bg-white shadow-md rounded-lg hover:shadow-lg transition">
<h3 class="text-xl font-semibold text-gray-800">Mes Rendez-vous</h3>
<p class="mt-2 text-gray-600">Voir et gérer vos rendez-vous.</p>
</a>
</div>
</main>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment