diff --git a/pom.xml b/pom.xml
index cf94101..10cbb47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -134,6 +134,11 @@
fop
2.6
+
+
+ io.quarkus
+ quarkus-mailer
+
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 30c300a..abf831e 100644
--- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java
+++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java
@@ -12,6 +12,8 @@ import fr.titionfire.ffsaf.utils.SequenceType;
import fr.titionfire.ffsaf.utils.Utils;
import io.quarkus.hibernate.reactive.panache.Panache;
import io.quarkus.hibernate.reactive.panache.common.WithSession;
+import io.quarkus.mailer.Mail;
+import io.quarkus.mailer.reactive.ReactiveMailer;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.unchecked.Unchecked;
import jakarta.enterprise.context.ApplicationScoped;
@@ -47,6 +49,9 @@ public class AffiliationService {
@Inject
LicenceRepository licenceRepository;
+ @Inject
+ ReactiveMailer reactiveMailer;
+
@ConfigProperty(name = "upload_dir")
String media;
@@ -279,7 +284,22 @@ public class AffiliationService {
)
.chain(() -> repository.persist(new AffiliationModel(null, club, model.getSaison())))
.map(c -> club));
- });
+ })
+ .call(club -> reactiveMailer.send(
+ Mail.withText(form.getM1_email(),
+ "FFSAF - Acceptation de votre demande d'affiliation",
+ String.format(
+ """
+ Bonjour,
+
+ Votre demande d'affiliation pour le club %s a été acceptée.
+ Le numéro d'affiliation de votre club est le %d.
+
+ Cordialement,
+ L'équipe de la FFSAF
+ """, club.getName(), club.getNo_affiliation())
+ ).setFrom("no-reply@ffsaf.fr").setReplyTo("contact@ffsaf.fr").addTo(form.getM2_email(), form.getM3_email())
+ ));
}
private Uni acceptOld(AffiliationRequestSaveForm form, AffiliationRequestModel model, ClubModel club) {
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 d6ef94b..641f28f 100644
--- a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java
+++ b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java
@@ -4,6 +4,8 @@ import fr.titionfire.ffsaf.data.model.ClubModel;
import fr.titionfire.ffsaf.data.model.MembreModel;
import fr.titionfire.ffsaf.rest.exception.DInternalError;
import fr.titionfire.ffsaf.utils.*;
+import io.quarkus.mailer.Mail;
+import io.quarkus.mailer.reactive.ReactiveMailer;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.unchecked.Unchecked;
@@ -45,6 +47,9 @@ public class KeycloakService {
@ConfigProperty(name = "email.enabled")
boolean enabled_email;
+ @Inject
+ ReactiveMailer reactiveMailer;
+
@Inject
Vertx vertx;
@@ -115,13 +120,36 @@ public class KeycloakService {
return vertx.getOrCreateContext().executeBlocking(() -> {
UserResource user = keycloak.realm(realm).users().get(userId);
UserRepresentation user2 = user.toRepresentation();
+ String oldEmail = user2.getEmail();
if (email.equals(user2.getEmail()))
return "";
user2.setEmail(email);
user2.setRequiredActions(List.of(RequiredAction.VERIFY_EMAIL.name()));
user.update(user2);
- return "";
- });
+ if (enabled_email)
+ user.sendVerifyEmail();
+ return oldEmail;
+ }).call(oldEmail -> oldEmail == null || !enabled_email ? Uni.createFrom().item("") :
+ reactiveMailer.send(
+ Mail.withText(oldEmail,
+ "FFSAF - Changement de votre adresse email",
+ String.format(
+ """
+ Bonjour,
+
+ Suite à la modification de votre adresse email fournie lors de votre (ré)inscription à la FFSAF,
+ vous allez recevoir dans les prochaines minutes un email de vérification de votre nouvelle adresse sur celle-ci.
+
+ Ancienne adresse email : %s
+ Nouvelle adresse email : %s
+
+ Si vous n'avez pas demandé cette modification, veuillez contacter le support à l'adresse support@ffsaf.fr.
+
+ Cordialement,
+ L'équipe de la FFSAF
+ """, oldEmail, email)
+ ).setFrom("no-reply@ffsaf.fr").setReplyTo("support@ffsaf.fr")
+ ));
}
public Uni> setAutoRoleMembre(String id, RoleAsso role, GradeArbitrage gradeArbitrage) {
@@ -226,6 +254,29 @@ public class KeycloakService {
return null;
}) : Uni.createFrom().nullItem())
.invoke(user -> membreModel.setUserId(user.getId()))
+ .call(user -> enabled_email ? reactiveMailer.send(
+ Mail.withText(user.getEmail(),
+ "FFSAF - Creation de votre compte sur l'intranet",
+ String.format(
+ """
+ Bonjour,
+
+ Suite à votre première inscription à la Fédération Française de Soft Armored Fighting (FFSAF), votre compte pour accéder à l'intranet a été créé.
+ Ce compte vous permettra de consulter vos informations, de vous inscrire aux compétitions et de consulter vos résultats.
+
+ Vous allez recevoir dans les prochaines minutes un email vous demandant de vérifier votre email et de définir un mot de passe.
+
+ L'intranet est accessible à l'adresse suivante : https://intra.ffsaf.fr
+ Votre nom d'utilisateur est : %s
+
+ Si vous n'avez pas demandé cette inscription, veuillez contacter le support à l'adresse support@ffsaf.fr.
+ (Pas de panique, nous ne vous enverrons pas de message autre que ce concernant votre compte)
+
+ Cordialement,
+ L'équipe de la FFSAF
+ """, user.getUsername())
+ ).setFrom("no-reply@ffsaf.fr").setReplyTo("support@ffsaf.fr")
+ ) : Uni.createFrom().nullItem())
.call(user -> membreService.setUserId(membreModel.getId(), user.getId()))
.call(user -> setClubGroupMembre(membreModel, membreModel.getClub()));
}