40 lines
1.2 KiB
Java
40 lines
1.2 KiB
Java
package de.tavolio.session;
|
|
|
|
import de.tavolio.account.AccountEntity;
|
|
import de.tavolio.account.AccountRepo;
|
|
import de.tavolio.session.dto.SessionCreation;
|
|
import io.quarkus.elytron.security.common.BcryptUtil;
|
|
import io.smallrye.jwt.build.Jwt;
|
|
import jakarta.enterprise.context.ApplicationScoped;
|
|
import jakarta.inject.Inject;
|
|
import jakarta.ws.rs.NotFoundException;
|
|
|
|
import java.time.ZonedDateTime;
|
|
import java.util.Optional;
|
|
|
|
@ApplicationScoped
|
|
public class SessionService
|
|
{
|
|
@Inject
|
|
AccountRepo accountRepo;
|
|
|
|
public String generateBySessionCreation(SessionCreation sessionCreation)
|
|
{
|
|
Optional<AccountEntity> accountEntityOptional = accountRepo.findOptionalByEmail(sessionCreation.email());
|
|
if (accountEntityOptional.isPresent())
|
|
{
|
|
AccountEntity accountEntity = accountEntityOptional.get();
|
|
if (BcryptUtil.matches(sessionCreation.password(), accountEntity.getPassword()))
|
|
{
|
|
return generateToken(accountEntity.getId());
|
|
}
|
|
}
|
|
throw new NotFoundException();
|
|
}
|
|
|
|
private String generateToken(String upn)
|
|
{
|
|
return Jwt.upn(upn).expiresAt(ZonedDateTime.now().plusYears(1).toInstant()).issuer("https://tavolio.de").sign();
|
|
}
|
|
}
|