Update:
All checks were successful
Docker Image CI / build-and-push (push) Successful in 11m9s
Docker Image CI / deploy (push) Successful in 27s
Docker Image CI / notify-failure (push) Has been skipped

-delen van agenda toegevoegd
-popup aangepast
-accepteren van uitnodiging toegevoegd
-koppelen van gebruiker aan bedrijf
-versturen van uitnodiging via mail
This commit is contained in:
2025-04-18 22:41:17 +02:00
parent ebce9820d2
commit a497b8162b
28 changed files with 908 additions and 55 deletions

View File

@@ -0,0 +1,65 @@
package nl.veenm.paypoint.service;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.core.Response;
import nl.veenm.paypoint.domain.InviteEntity;
import nl.veenm.paypoint.domain.InviteRequest;
import nl.veenm.paypoint.repository.InviteRepository;
import java.security.SecureRandom;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Base64;
@ApplicationScoped
public class AgendaService {
@Inject
EmailService emailService;
@Inject
InviteRepository inviteRepository;
public void sendInvite(String email, String url) {
this.emailService.stuurUitnodiging(email, url);
}
@Transactional
public InviteEntity createInvite(InviteRequest inviteRequest) {
String token = generateSecureToken(); // zoals eerder besproken
InviteEntity invite = new InviteEntity();
invite.setCompany_id(inviteRequest.companyId);
invite.setEmail(inviteRequest.email);
invite.setToken(token);
invite.setUsed(false);
invite.setCreatedAt(Instant.now());
invite.setExpiresAt(Instant.now().plus(1, ChronoUnit.HOURS)); // 1u geldig
inviteRepository.persist(invite);
return invite;
}
public String generateSecureToken() {
byte[] randomBytes = new byte[24];
new SecureRandom().nextBytes(randomBytes);
return Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes);
}
public Response verifyInvite(String token) {
InviteEntity invite = inviteRepository.findByToken(token);
if (invite == null || invite.isUsed()) {
return Response.status(Response.Status.BAD_REQUEST).entity("Ongeldige of reeds gebruikte uitnodiging").build();
}
if (invite.getExpiresAt().isBefore(Instant.now())) {
return Response.status(Response.Status.GONE).entity("Deze uitnodiging is verlopen").build();
}
return Response.ok(invite).build();
}
}