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
+
+
+
+
+