package com.covas.Resources; import java.util.Arrays; import java.util.UUID; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import com.covas.Entity.UsersEntity; import io.quarkus.mailer.MailTemplate; import io.quarkus.redis.client.RedisClient; import org.jboss.logging.Logger; @Path("mail") public class MailRessource { @Inject private MailTemplate mailer; @Inject RedisClient redisClient; @GET public Response sendMail(UsersEntity usersEntity){ UsersEntity users = UsersEntity.findByPseudo(usersEntity.pseudo); if(users == null){ return Response.status(Response.Status.NOT_FOUND).build(); } String randomKey=UUID.randomUUID().toString(); redisClient.set(Arrays.asList(users.id.toString(),randomKey)); mailer.to(users.email).subject(String.format("Compte %s créée", users.email)).data("name", users.pseudo).data("id",users.id).data("key",randomKey).send().subscribeAsCompletionStage(); return Response.ok().build(); } @GET @Path("{id}") @Consumes(MediaType.APPLICATION_JSON) public Response activateUsers(@PathParam("id") String id, @QueryParam("key") String key){ UsersEntity users = UsersEntity.findById(UUID.fromString(id)); if(users == null){ return Response.status(Response.Status.NOT_FOUND).build(); } io.vertx.redis.client.Response singleKey = redisClient.get(id); if(singleKey == null){ return Response.status(Response.Status.FORBIDDEN).build(); } String redisKey = singleKey.toString(); if(!redisKey.equals(key)){ return Response.status(Response.Status.NOT_ACCEPTABLE).build(); } redisClient.del(Arrays.asList(id)); if(users.active_mail){ return Response.status(Response.Status.NOT_MODIFIED).build(); } users.active_mail = true; users.persist(); if(users.isPersistent()){ return Response.status(Response.Status.PARTIAL_CONTENT).build(); } return Response.ok().build(); } }