package de.w665.testing.service; import org.springframework.stereotype.Service; import java.security.SecureRandom; import java.util.Base64; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @Service public class TokenService { private final Map tokenToUser = new ConcurrentHashMap<>(); private final SecureRandom random = new SecureRandom(); public String createTokenForUsername(String username) { String token = generateToken(); tokenToUser.put(token, username); return token; } public Optional resolveUsername(String token) { return Optional.ofNullable(tokenToUser.get(token)); } public void invalidate(String token) { tokenToUser.remove(token); } private String generateToken() { byte[] bytes = new byte[32]; random.nextBytes(bytes); return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); } }