package de.fd.fh.server.access; import de.fd.fh.server.user.UserId; import dev.morphia.annotations.Embedded; import dev.morphia.annotations.PrePersist; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import java.time.LocalDateTime; import java.util.Random; @Embedded @NoArgsConstructor @AllArgsConstructor @Getter public class AccessToken { private String token; private LocalDateTime createdDate; private Role role; @Embedded private UserId userId; static AccessToken of(final Access access) { return new AccessToken( generateToken(), LocalDateTime.now(), access.getRole(), access.getUserId() ); } @PrePersist void prePersist() { this.createdDate = LocalDateTime.now(); } private static String generateToken() { final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; final String lower = upper.toLowerCase(); final String numbers = "0123456789"; final String alphabet = upper + lower + numbers; System.out.println("generate Security Token."); Random random = new Random(); StringBuilder generatedString = new StringBuilder(); for (int i = 0; i < 64; i++) { generatedString.append(alphabet.charAt(random.nextInt(alphabet.length()))); } System.out.println("Token: " + generatedString); return generatedString.toString(); } }