From 098e98b719496fa513f07263980a4c1e954f99be Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 22 Jan 2025 20:44:18 +0100 Subject: [PATCH 1/5] fix: access to personal pp --- src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java index 46ef260..138cf68 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java @@ -23,6 +23,7 @@ import org.eclipse.microprofile.openapi.annotations.responses.APIResponses; import org.eclipse.microprofile.openapi.annotations.tags.Tag; import java.net.URISyntaxException; +import java.util.Objects; import java.util.function.Consumer; @Tag(name = "Membre", description = "Gestion des membres") @@ -119,7 +120,9 @@ public class MembreEndpoints { @APIResponse(responseCode = "500", description = "Erreur interne du serveur") }) public Uni getPhoto(@PathParam("id") long id) throws URISyntaxException { - return Utils.getMediaFile(id, media, "ppMembre", membreService.getById(id).onItem().invoke(checkPerm)); + return Utils.getMediaFile(id, media, "ppMembre", membreService.getById(id).onItem() + .call(m -> Objects.equals(m.getUserId(), securityCtx.getSubject()) ? + Uni.createFrom().nullItem() : Uni.createFrom().item(m).invoke(checkPerm))); } @GET From c2d602b9bfff46aae8c64ae0892074dbe3410a9f Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 22 Jan 2025 21:04:30 +0100 Subject: [PATCH 2/5] fix: remove double affiliation on new club --- .../fr/titionfire/ffsaf/domain/service/AffiliationService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index 087759f..7c97833 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -21,6 +21,7 @@ import jakarta.inject.Inject; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.hibernate.reactive.mutiny.Mutiny; +import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; @@ -275,7 +276,7 @@ public class AffiliationService { club.setSIRET(form.getSiret()); club.setRNA(form.getRna()); club.setAddress(form.getAddress()); - club.setAffiliations(List.of(new AffiliationModel(null, club, model.getSaison()))); + club.setAffiliations(new ArrayList<>()); return Panache.withTransaction(() -> clubRepository.persist(club) .chain(c -> sequenceRepository.getNextValueInTransaction(SequenceType.Affiliation) .invoke(c::setNo_affiliation) From 254fd0582fb45a8158b3a41ae07fd2696806ea6b Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 22 Jan 2025 21:13:12 +0100 Subject: [PATCH 3/5] fix(membre): null licence number on creation --- src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java | 2 +- .../java/fr/titionfire/ffsaf/domain/service/MembreService.java | 1 + src/main/webapp/src/pages/admin/member/MemberPage.jsx | 2 +- src/main/webapp/src/pages/club/member/MemberPage.jsx | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java index 2e181c2..2aaa12b 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java @@ -48,7 +48,7 @@ public class MembreModel { Genre genre; @Schema(description = "Le numéro de licence du membre.", example = "12345") - int licence; + Integer licence; @Schema(description = "Le pays du membre.", example = "FR") String country; diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java index 02b5ae9..50fe6d8 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -270,6 +270,7 @@ public class MembreService { model.setFname(input.getFname()); model.setLname(input.getLname()); model.setEmail(input.getEmail()); + model.setLicence(null); model.setGenre(input.getGenre()); model.setCountry(input.getCountry()); model.setBirth_date(input.getBirth_date()); diff --git a/src/main/webapp/src/pages/admin/member/MemberPage.jsx b/src/main/webapp/src/pages/admin/member/MemberPage.jsx index 7cf7cad..d64275f 100644 --- a/src/main/webapp/src/pages/admin/member/MemberPage.jsx +++ b/src/main/webapp/src/pages/admin/member/MemberPage.jsx @@ -77,7 +77,7 @@ export function MemberPage() { function PhotoCard({data}) { return
-
Licence n°{data.licence}
+
{data.licence ? "Licence n°"+data.licence : "Pas de licence"}
-
Licence n°{data.licence}
+
{data.licence ? "Licence n°"+data.licence : "Pas de licence"}
Date: Wed, 22 Jan 2025 21:48:39 +0100 Subject: [PATCH 4/5] fix(aff): set auto role after affiliation accepte --- .../ffsaf/domain/service/AffiliationService.java | 16 ++++++++++------ .../ffsaf/domain/service/KeycloakService.java | 5 ++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index 7c97833..dc40d66 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -212,6 +212,7 @@ public class AffiliationService { membreModel.setClub(club); membreModel.setRole(member.getRole()); membreModel.setEmail(member.getEmail()); + membreModel.setCountry("FR"); return Panache.withTransaction(() -> combRepository.persist(membreModel) .chain(m -> sequenceRepository.getNextValueInTransaction(SequenceType.Licence) @@ -236,10 +237,13 @@ public class AffiliationService { }).call(m -> Panache.withTransaction(() -> combRepository.persist(m))); } }) - .call(m -> (m.getUserId() == null) ? keycloakService.initCompte(m.getId()) : - keycloakService.setClubGroupMembre(m, club)) - .call(m -> Panache.withTransaction(() -> licenceRepository.persist( - new LicenceModel(null, m, saison, null, true)))); + .call(m -> ((m.getUserId() == null) ? keycloakService.initCompte(m.getId()) : + keycloakService.setClubGroupMembre(m, club).map(__ -> m.getUserId())) + .call(userId -> keycloakService.setAutoRoleMembre(userId, m.getRole(), m.getGrade_arbitrage()))) + .call(m -> m.getLicences().stream().anyMatch(l -> l.getSaison() == saison) ? + Uni.createFrom().nullItem() : + Panache.withTransaction(() -> licenceRepository.persist( + new LicenceModel(null, m, saison, null, true)))); } public Uni accept(AffiliationRequestSaveForm form) { @@ -272,7 +276,7 @@ public class AffiliationService { .chain(() -> { ClubModel club = new ClubModel(); club.setName(form.getName()); - club.setCountry("fr"); + club.setCountry("FR"); club.setSIRET(form.getSiret()); club.setRNA(form.getRna()); club.setAddress(form.getAddress()); @@ -307,7 +311,7 @@ public class AffiliationService { return Uni.createFrom().nullItem() .chain(() -> { club.setName(form.getName()); - club.setCountry("fr"); + club.setCountry("FR"); club.setSIRET(form.getSiret()); club.setRNA(form.getRna()); club.setAddress(form.getAddress()); diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java index 504e55a..f6af470 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java @@ -207,9 +207,8 @@ public class KeycloakService { throw new KeycloakException("User name is null"); })).chain(membreModel -> creatUser(membreModel).chain(user -> { LOGGER.infof("Set user id %s to membre %s", user.getId(), membreModel.getId()); - return membreService.setUserId(membreModel.getId(), user.getId()); - })) - .map(__ -> "OK"); + return membreService.setUserId(membreModel.getId(), user.getId()).map(__ -> user.getId()); + })); } private Uni creatUser(MembreModel membreModel) { From 071b35f2d4d0ff1ca136bed9d6e16f787f4dee87 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Tue, 4 Feb 2025 16:09:21 +0100 Subject: [PATCH 5/5] wip(utils): mime type fix --- pom.xml | 6 ++++++ src/main/java/fr/titionfire/ffsaf/utils/Utils.java | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c5af523..170a9e4 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,12 @@ io.quarkus quarkus-mailer + + + net.sf.jmimemagic + jmimemagic + 0.1.5 + diff --git a/src/main/java/fr/titionfire/ffsaf/utils/Utils.java b/src/main/java/fr/titionfire/ffsaf/utils/Utils.java index b1a700c..59728dc 100644 --- a/src/main/java/fr/titionfire/ffsaf/utils/Utils.java +++ b/src/main/java/fr/titionfire/ffsaf/utils/Utils.java @@ -5,6 +5,10 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jodd.net.MimeTypes; +import net.sf.jmimemagic.Magic; +import net.sf.jmimemagic.MagicException; +import net.sf.jmimemagic.MagicMatchNotFoundException; +import net.sf.jmimemagic.MagicParseException; import org.jboss.logging.Logger; import java.io.*; @@ -76,7 +80,12 @@ public class Utils { return "OK"; try (InputStream is = new BufferedInputStream(new ByteArrayInputStream(input))) { - String mimeType = URLConnection.guessContentTypeFromStream(is); + String mimeType; + try { + mimeType = Magic.getMagicMatch(input, false).getMimeType(); + } catch (MagicParseException | MagicMatchNotFoundException | MagicException e) { + mimeType = URLConnection.guessContentTypeFromStream(is); + } String[] detectedExtensions = MimeTypes.findExtensionsByMimeTypes(mimeType, false); if (detectedExtensions.length == 0) throw new IOException("Fail to detect file extension for MIME type " + mimeType);