You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.5 KiB

  1. package de.fd.fh.server.access;
  2. import de.fd.fh.server.user.UserId;
  3. import dev.morphia.annotations.Embedded;
  4. import dev.morphia.annotations.PrePersist;
  5. import lombok.AllArgsConstructor;
  6. import lombok.Getter;
  7. import lombok.NoArgsConstructor;
  8. import java.time.LocalDateTime;
  9. import java.util.Random;
  10. @Embedded
  11. @NoArgsConstructor
  12. @AllArgsConstructor
  13. @Getter
  14. public class AccessToken
  15. {
  16. private String token;
  17. private LocalDateTime createdDate;
  18. private Role role;
  19. @Embedded
  20. private UserId userId;
  21. static AccessToken of(final Access access)
  22. {
  23. return new AccessToken(
  24. generateToken(),
  25. LocalDateTime.now(),
  26. access.getRole(),
  27. access.getUserId()
  28. );
  29. }
  30. @PrePersist
  31. void prePersist()
  32. {
  33. this.createdDate = LocalDateTime.now();
  34. }
  35. private static String generateToken()
  36. {
  37. final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  38. final String lower = upper.toLowerCase();
  39. final String numbers = "0123456789";
  40. final String alphabet = upper + lower + numbers;
  41. System.out.println("generate Security Token.");
  42. Random random = new Random();
  43. StringBuilder generatedString = new StringBuilder();
  44. for (int i = 0; i < 64; i++) {
  45. generatedString.append(alphabet.charAt(random.nextInt(alphabet.length())));
  46. }
  47. System.out.println("Token: " + generatedString);
  48. return generatedString.toString();
  49. }
  50. }