diff --git a/.gitignore b/.gitignore index 9092a61..245a7b0 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,4 @@ build/ ### VS Code ### .vscode/ -.env +src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index 8e8d8fd..d221a81 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,15 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-security + + + jakarta.validation + jakarta.validation-api + + diff --git a/src/main/java/local/epul4a/fotosharing/controller/AuthController.java b/src/main/java/local/epul4a/fotosharing/controller/AuthController.java new file mode 100644 index 0000000..bacef49 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/controller/AuthController.java @@ -0,0 +1,57 @@ +package local.epul4a.fotosharing.controller; + +import local.epul4a.fotosharing.model.Utilisateur; +import local.epul4a.fotosharing.repository.UtilisateurRepository; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import jakarta.validation.Valid; + +@Controller +public class AuthController { + + private final UtilisateurRepository utilisateurRepository; + private final PasswordEncoder passwordEncoder; + + public AuthController(UtilisateurRepository utilisateurRepository, PasswordEncoder passwordEncoder) { + this.utilisateurRepository = utilisateurRepository; + this.passwordEncoder = passwordEncoder; + } + + @GetMapping("/login") + public String loginPage(@RequestParam(value = "error", required = false) String error, + @RequestParam(value = "logout", required = false) String logout, + Model model) { + model.addAttribute("error", error != null); + model.addAttribute("logout", logout != null); + return "login"; + } + + @GetMapping("/register") + public String registerForm(Model model) { + model.addAttribute("utilisateur", new Utilisateur()); + return "register"; + } + + @PostMapping("/register") + public String doRegister(@ModelAttribute("utilisateur") @Valid Utilisateur utilisateur, + BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + return "register"; + } + + if (utilisateurRepository.findByEmail(utilisateur.getEmail()).isPresent()) { + model.addAttribute("error", "Email déjà utilisé"); + return "register"; + } + + // encoder le mot de passe puis sauvegarder + utilisateur.setMotDePasse(passwordEncoder.encode(utilisateur.getMotDePasse())); + utilisateur.setActif(true); + utilisateurRepository.save(utilisateur); + return "redirect:/login?registered"; + } +} \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java new file mode 100644 index 0000000..44902e5 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/controller/PhotoController.java @@ -0,0 +1,72 @@ +package local.epul4a.fotosharing.controller; + +import local.epul4a.fotosharing.model.Photo; +import local.epul4a.fotosharing.security.CustomUserDetails; +import local.epul4a.fotosharing.service.PhotoService; +import org.springframework.core.io.Resource; +import org.springframework.core.io.PathResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.nio.file.Path; + +@Controller +public class PhotoController { + + private final PhotoService photoService; + + public PhotoController(PhotoService photoService) { + this.photoService = photoService; + } + + @GetMapping("/") + public String home() { + return "home"; // créer une page home.html simple + } + + @GetMapping("/upload") + public String uploadForm() { + return "upload"; + } + + @PostMapping("/upload") + public String doUpload(@RequestParam("file") MultipartFile file, + @RequestParam(value="visibilite", defaultValue = "PRIVATE") String visibilite, + @AuthenticationPrincipal CustomUserDetails user, + Model model) { + try { + Photo p = photoService.store(file, visibilite, user.getUsername()); + model.addAttribute("message", "Upload OK : " + p.getId()); + return "redirect:/"; // ou page d'affichage + } catch (Exception e) { + model.addAttribute("error", e.getMessage()); + return "upload"; + } + } + + @GetMapping("/photo/{id}/raw") + public ResponseEntity rawPhoto(@PathVariable("id") String idOrUuid) { + // idOrUuid peut être uuid stocké ou id numeric ; ici on assume uuid + Path p = photoService.loadAsPath(idOrUuid); + Resource r = new PathResource(p); + if (!r.exists()) { + return ResponseEntity.notFound().build(); + } + String contentType = "application/octet-stream"; + try { + // tentative de détection basique + contentType = java.nio.file.Files.probeContentType(p); + } catch (Exception ignored) {} + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType(contentType != null ? contentType : "application/octet-stream")) + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"" + p.getFileName().toString() + "\"") + .body(r); + } +} + diff --git a/src/main/java/local/epul4a/fotosharing/model/Commentaire.java b/src/main/java/local/epul4a/fotosharing/model/Commentaire.java new file mode 100644 index 0000000..6784c90 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/model/Commentaire.java @@ -0,0 +1,31 @@ +package local.epul4a.fotosharing.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Setter +public class Commentaire { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String contenu; + + private LocalDateTime dateCommentaire; + + @ManyToOne + @JoinColumn(name = "id_photo") + private Photo photo; + + @ManyToOne + @JoinColumn(name = "id_utilisateur") + private Utilisateur auteur; + + // Getters & Setters +} diff --git a/src/main/java/local/epul4a/fotosharing/model/Partage.java b/src/main/java/local/epul4a/fotosharing/model/Partage.java new file mode 100644 index 0000000..9f6aef2 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/model/Partage.java @@ -0,0 +1,25 @@ +package local.epul4a.fotosharing.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Getter +@Setter +public class Partage { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne + @JoinColumn(name = "id_photo") + private Photo photo; + + @ManyToOne + @JoinColumn(name = "id_utilisateur") + private Utilisateur utilisateur; + + // Getters & Setters +} diff --git a/src/main/java/local/epul4a/fotosharing/model/Photo.java b/src/main/java/local/epul4a/fotosharing/model/Photo.java new file mode 100644 index 0000000..5871074 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/model/Photo.java @@ -0,0 +1,32 @@ +package local.epul4a.fotosharing.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.List; + +@Entity +@Getter +@Setter +public class Photo { + public enum Visibilite { PRIVATE, PUBLIC, SHARED } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String nomFichierOriginal; + private String uuidFichier; + private LocalDateTime dateUpload; + + @Enumerated(EnumType.STRING) + private Visibilite visibilite; + + @ManyToOne + @JoinColumn(name = "id_utilisateur") + private Utilisateur proprietaire; + + // getters & setters +} diff --git a/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java b/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java new file mode 100644 index 0000000..4e2836e --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/model/Utilisateur.java @@ -0,0 +1,34 @@ +package local.epul4a.fotosharing.model; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Entity +@Getter +@Setter +public class Utilisateur { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String email; + + private String motDePasse; + + private String nom; + + private String prenom; + + private boolean actif = true; + + @OneToMany(mappedBy = "proprietaire") + private List< + Photo> photos; + + // Getters & Setters avec lombok + +} \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java b/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java new file mode 100644 index 0000000..ad2074e --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/repository/PhotoRepository.java @@ -0,0 +1,7 @@ +package local.epul4a.fotosharing.repository; + +import local.epul4a.fotosharing.model.Photo; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PhotoRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/repository/UtilisateurRepository.java b/src/main/java/local/epul4a/fotosharing/repository/UtilisateurRepository.java new file mode 100644 index 0000000..5da6862 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/repository/UtilisateurRepository.java @@ -0,0 +1,10 @@ +package local.epul4a.fotosharing.repository; + +import local.epul4a.fotosharing.model.Utilisateur; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UtilisateurRepository extends JpaRepository { + Optional findByEmail(String email); +} \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/security/CustomUserDetails.java b/src/main/java/local/epul4a/fotosharing/security/CustomUserDetails.java new file mode 100644 index 0000000..34917c6 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/security/CustomUserDetails.java @@ -0,0 +1,43 @@ +package local.epul4a.fotosharing.security; + +import local.epul4a.fotosharing.model.Utilisateur; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.Collections; + +public class CustomUserDetails implements UserDetails { + + private final Utilisateur user; + + public CustomUserDetails(Utilisateur user) { + this.user = user; + } + + public Utilisateur getUtilisateur() { + return user; + } + + @Override + public Collection getAuthorities() { + // Si tu veux ajouter des rôles, adapte ici. + return Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")); + } + + @Override + public String getPassword() { + return user.getMotDePasse(); + } + + @Override + public String getUsername() { + return user.getEmail(); + } + + @Override public boolean isAccountNonExpired() { return true; } + @Override public boolean isAccountNonLocked() { return true; } + @Override public boolean isCredentialsNonExpired() { return true; } + @Override public boolean isEnabled() { return user.isActif(); } +} diff --git a/src/main/java/local/epul4a/fotosharing/security/CustomUserDetailsService.java b/src/main/java/local/epul4a/fotosharing/security/CustomUserDetailsService.java new file mode 100644 index 0000000..77cb8f8 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/security/CustomUserDetailsService.java @@ -0,0 +1,24 @@ +package local.epul4a.fotosharing.security; + +import local.epul4a.fotosharing.model.Utilisateur; +import local.epul4a.fotosharing.repository.UtilisateurRepository; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Service; + +@Service +public class CustomUserDetailsService implements UserDetailsService { + + private final UtilisateurRepository utilisateurRepository; + + public CustomUserDetailsService(UtilisateurRepository utilisateurRepository) { + this.utilisateurRepository = utilisateurRepository; + } + + @Override + public CustomUserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Utilisateur u = utilisateurRepository.findByEmail(username) + .orElseThrow(() -> new UsernameNotFoundException("Utilisateur introuvable: " + username)); + return new CustomUserDetails(u); + } +} \ No newline at end of file diff --git a/src/main/java/local/epul4a/fotosharing/security/SecurityConfig.java b/src/main/java/local/epul4a/fotosharing/security/SecurityConfig.java new file mode 100644 index 0000000..254b9db --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/security/SecurityConfig.java @@ -0,0 +1,63 @@ +package local.epul4a.fotosharing.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableMethodSecurity +public class SecurityConfig { + + private final CustomUserDetailsService customUserDetailsService; + + public SecurityConfig(CustomUserDetailsService customUserDetailsService) { + this.customUserDetailsService = customUserDetailsService; + } + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + + http + .authorizeHttpRequests(auth -> auth + .requestMatchers("/login", "/register", "/css/**", "/js/**").permitAll() + .anyRequest().authenticated() + ) + .formLogin(form -> form + .loginPage("/login") + .defaultSuccessUrl("/", true) + .permitAll() + ) + .logout(logout -> logout + .logoutSuccessUrl("/login?logout=true") + .permitAll() + ) + .csrf(csrf -> csrf.disable()); + + return http.build(); + } + + @Bean + public UserDetailsService userDetailsService() { + // Spring Security 6.2 utilise ce bean automatiquement + return customUserDetailsService; + } + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception { + // Spring Boot crée automatiquement un DaoAuthenticationProvider interne + return config.getAuthenticationManager(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/local/epul4a/fotosharing/security/SecurityService.java b/src/main/java/local/epul4a/fotosharing/security/SecurityService.java new file mode 100644 index 0000000..ceb6f8d --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/security/SecurityService.java @@ -0,0 +1,30 @@ +package local.epul4a.fotosharing.security; + +import local.epul4a.fotosharing.model.Photo; +import local.epul4a.fotosharing.repository.PhotoRepository; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service("securityService") +public class SecurityService { + + private final PhotoRepository photoRepository; + + public SecurityService(PhotoRepository photoRepository) { + this.photoRepository = photoRepository; + } + + public boolean canAccessPhoto(org.springframework.security.core.Authentication authentication, Long photoId) { + if (authentication == null || !authentication.isAuthenticated()) return false; + String username = authentication.getName(); // email + Optional p = photoRepository.findById(photoId); + if (p.isEmpty()) return false; + Photo photo = p.get(); + if (photo.getVisibilite() == Photo.Visibilite.PUBLIC) return true; + if (photo.getProprietaire() != null && photo.getProprietaire().getEmail().equals(username)) return true; + // TODO: vérifier table partage + return false; + } +} + diff --git a/src/main/java/local/epul4a/fotosharing/service/PhotoService.java b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java new file mode 100644 index 0000000..d6ba100 --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/service/PhotoService.java @@ -0,0 +1,11 @@ +package local.epul4a.fotosharing.service; + +import local.epul4a.fotosharing.model.Photo; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.nio.file.Path; + +public interface PhotoService { + Photo store(MultipartFile file, String visibilite, String ownerEmail) throws IOException; + Path loadAsPath(String uuidFile); +} diff --git a/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java b/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java new file mode 100644 index 0000000..f63168f --- /dev/null +++ b/src/main/java/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.java @@ -0,0 +1,61 @@ +package local.epul4a.fotosharing.service.impl; + +import local.epul4a.fotosharing.model.Photo; +import local.epul4a.fotosharing.model.Utilisateur; +import local.epul4a.fotosharing.repository.PhotoRepository; +import local.epul4a.fotosharing.repository.UtilisateurRepository; +import local.epul4a.fotosharing.service.PhotoService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.*; +import java.time.LocalDateTime; +import java.util.UUID; + +@Service +public class PhotoServiceImpl implements PhotoService { + + @Value("${file.upload-dir}") + private String uploadDir; + + private final PhotoRepository photoRepository; + private final UtilisateurRepository utilisateurRepository; + + public PhotoServiceImpl(PhotoRepository photoRepository, UtilisateurRepository utilisateurRepository) { + this.photoRepository = photoRepository; + this.utilisateurRepository = utilisateurRepository; + } + + @Override + public Photo store(MultipartFile file, String visibilite, String ownerEmail) throws IOException { + if (file.isEmpty()) throw new IOException("Fichier vide"); + + // Vérifier taille / type si besoin (ici basique) + String original = StringUtils.cleanPath(file.getOriginalFilename()); + String uuid = UUID.randomUUID().toString() + "-" + original; + + Path uploadPath = Paths.get(uploadDir); + if (!Files.exists(uploadPath)) Files.createDirectories(uploadPath); + + Path target = uploadPath.resolve(uuid); + Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING); + + Photo p = new Photo(); + p.setNomFichierOriginal(original); + p.setUuidFichier(uuid); + p.setDateUpload(LocalDateTime.now()); + p.setVisibilite(Photo.Visibilite.valueOf(visibilite)); + Utilisateur u = utilisateurRepository.findByEmail(ownerEmail).orElseThrow(() -> new IOException("Utilisateur introuvable")); + p.setProprietaire(u); + + return photoRepository.save(p); + } + + @Override + public Path loadAsPath(String uuidFile) { + return Paths.get(uploadDir).resolve(uuidFile); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a5a0b68..e4ec83b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.application.name=FotoSharing # =============================== # DATABASE # =============================== -spring.datasource.url=jdbc:mariadb://192.168.124.171:3306/fotoshareDB +spring.datasource.url=jdbc:mariadb://192.168.112.10:3306/fotoshareDB spring.datasource.username=ufoto spring.datasource.password=4AinfoRep-25 # =============================== @@ -12,6 +12,14 @@ spring.datasource.password=4AinfoRep-25 spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML +spring.jpa.properties.hibernate.jdbc.time_zone=UTC +# =============================== +# EMPLACEMENT DE STICKAGE +# =============================== +file.upload-dir=/opt/photo-app/uploads +spring.servlet.multipart.max-file-size=20MB +spring.servlet.multipart.max-request-size=20MB \ No newline at end of file diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html new file mode 100644 index 0000000..576f6b6 --- /dev/null +++ b/src/main/resources/templates/home.html @@ -0,0 +1,9 @@ + + +Accueil + +

Bienvenue sur FotoSharing

+

Uploader une photo

+

Se déconnecter

+ + diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..7bc3838 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,23 @@ + + + + + Login - FotoSharing + + +

Connexion

+
+
+
+ +
+ +
+ Déconnecté avec succès. +
+
+ Erreur d'authentification. +
+

Créer un compte

+ + diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html new file mode 100644 index 0000000..1e0c7b8 --- /dev/null +++ b/src/main/resources/templates/register.html @@ -0,0 +1,17 @@ + + + + + Inscription - FotoSharing + + +

Inscription

+
+
+
+
+
+ +
+ + diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html new file mode 100644 index 0000000..09153da --- /dev/null +++ b/src/main/resources/templates/upload.html @@ -0,0 +1,23 @@ + + + + + Upload - FotoSharing + + +

Uploader une photo

+
+
+
+ +
+
+
+ + diff --git a/target/classes/application.properties b/target/classes/application.properties index a5a0b68..e4ec83b 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -3,7 +3,7 @@ spring.application.name=FotoSharing # =============================== # DATABASE # =============================== -spring.datasource.url=jdbc:mariadb://192.168.124.171:3306/fotoshareDB +spring.datasource.url=jdbc:mariadb://192.168.112.10:3306/fotoshareDB spring.datasource.username=ufoto spring.datasource.password=4AinfoRep-25 # =============================== @@ -12,6 +12,14 @@ spring.datasource.password=4AinfoRep-25 spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML +spring.jpa.properties.hibernate.jdbc.time_zone=UTC +# =============================== +# EMPLACEMENT DE STICKAGE +# =============================== +file.upload-dir=/opt/photo-app/uploads +spring.servlet.multipart.max-file-size=20MB +spring.servlet.multipart.max-request-size=20MB \ No newline at end of file diff --git a/target/classes/local/epul4a/fotosharing/controller/AuthController.class b/target/classes/local/epul4a/fotosharing/controller/AuthController.class new file mode 100644 index 0000000..97793d6 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/controller/AuthController.class differ diff --git a/target/classes/local/epul4a/fotosharing/controller/PhotoController.class b/target/classes/local/epul4a/fotosharing/controller/PhotoController.class new file mode 100644 index 0000000..ab0a469 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/controller/PhotoController.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Commentaire.class b/target/classes/local/epul4a/fotosharing/model/Commentaire.class new file mode 100644 index 0000000..5cd2897 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/model/Commentaire.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Partage.class b/target/classes/local/epul4a/fotosharing/model/Partage.class new file mode 100644 index 0000000..a31deba Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/model/Partage.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Photo$Visibilite.class b/target/classes/local/epul4a/fotosharing/model/Photo$Visibilite.class new file mode 100644 index 0000000..5f8d68f Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/model/Photo$Visibilite.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Photo.class b/target/classes/local/epul4a/fotosharing/model/Photo.class new file mode 100644 index 0000000..dda4a88 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/model/Photo.class differ diff --git a/target/classes/local/epul4a/fotosharing/model/Utilisateur.class b/target/classes/local/epul4a/fotosharing/model/Utilisateur.class new file mode 100644 index 0000000..39fa0c2 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/model/Utilisateur.class differ diff --git a/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class b/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class new file mode 100644 index 0000000..537485a Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/repository/PhotoRepository.class differ diff --git a/target/classes/local/epul4a/fotosharing/repository/UtilisateurRepository.class b/target/classes/local/epul4a/fotosharing/repository/UtilisateurRepository.class new file mode 100644 index 0000000..7e7cb19 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/repository/UtilisateurRepository.class differ diff --git a/target/classes/local/epul4a/fotosharing/security/CustomUserDetails.class b/target/classes/local/epul4a/fotosharing/security/CustomUserDetails.class new file mode 100644 index 0000000..c166fb7 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/security/CustomUserDetails.class differ diff --git a/target/classes/local/epul4a/fotosharing/security/CustomUserDetailsService.class b/target/classes/local/epul4a/fotosharing/security/CustomUserDetailsService.class new file mode 100644 index 0000000..b9e9184 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/security/CustomUserDetailsService.class differ diff --git a/target/classes/local/epul4a/fotosharing/security/SecurityConfig.class b/target/classes/local/epul4a/fotosharing/security/SecurityConfig.class new file mode 100644 index 0000000..1bdaef2 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/security/SecurityConfig.class differ diff --git a/target/classes/local/epul4a/fotosharing/security/SecurityService.class b/target/classes/local/epul4a/fotosharing/security/SecurityService.class new file mode 100644 index 0000000..5aaecf9 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/security/SecurityService.class differ diff --git a/target/classes/local/epul4a/fotosharing/service/PhotoService.class b/target/classes/local/epul4a/fotosharing/service/PhotoService.class new file mode 100644 index 0000000..1fdb6cc Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/service/PhotoService.class differ diff --git a/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class b/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class new file mode 100644 index 0000000..85216b0 Binary files /dev/null and b/target/classes/local/epul4a/fotosharing/service/impl/PhotoServiceImpl.class differ diff --git a/target/classes/templates/home.html b/target/classes/templates/home.html new file mode 100644 index 0000000..576f6b6 --- /dev/null +++ b/target/classes/templates/home.html @@ -0,0 +1,9 @@ + + +Accueil + +

Bienvenue sur FotoSharing

+

Uploader une photo

+

Se déconnecter

+ + diff --git a/target/classes/templates/login.html b/target/classes/templates/login.html new file mode 100644 index 0000000..7bc3838 --- /dev/null +++ b/target/classes/templates/login.html @@ -0,0 +1,23 @@ + + + + + Login - FotoSharing + + +

Connexion

+
+
+
+ +
+ +
+ Déconnecté avec succès. +
+
+ Erreur d'authentification. +
+

Créer un compte

+ + diff --git a/target/classes/templates/register.html b/target/classes/templates/register.html new file mode 100644 index 0000000..1e0c7b8 --- /dev/null +++ b/target/classes/templates/register.html @@ -0,0 +1,17 @@ + + + + + Inscription - FotoSharing + + +

Inscription

+
+
+
+
+
+ +
+ + diff --git a/target/classes/templates/upload.html b/target/classes/templates/upload.html new file mode 100644 index 0000000..09153da --- /dev/null +++ b/target/classes/templates/upload.html @@ -0,0 +1,23 @@ + + + + + Upload - FotoSharing + + +

Uploader une photo

+
+
+
+ +
+
+
+ +