diff --git a/src/main/java/org/mskcc/cbio/oncokb/domain/TokenKey.java b/src/main/java/org/mskcc/cbio/oncokb/domain/TokenKey.java index 0c1f59519..f364fe8ae 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/domain/TokenKey.java +++ b/src/main/java/org/mskcc/cbio/oncokb/domain/TokenKey.java @@ -1,9 +1,14 @@ package org.mskcc.cbio.oncokb.domain; import java.io.Serializable; +import java.nio.ByteBuffer; +import java.security.SecureRandom; +import java.util.zip.CRC32; import org.mskcc.cbio.oncokb.domain.enumeration.TokenType; +import io.seruco.encoding.base62.Base62; + public class TokenKey implements Serializable { public static int TOKEN_CHAR_LENGTH = 30; @@ -15,6 +20,32 @@ public class TokenKey implements Serializable { private String checksum; + public static TokenKey generate(TokenType type) { + TokenKey tokenKey = new TokenKey(); + tokenKey.setTokenType(type); + + Base62 base62 = Base62.createInstance(); + SecureRandom secureRandom = new SecureRandom(); + + byte[] bytes = new byte[24]; + secureRandom.nextBytes(bytes); + String token = new String(base62.encode(bytes)); + tokenKey.setToken(token); + + CRC32 crc32 = new CRC32(); + crc32.update(bytes); + ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); + buffer.putLong(crc32.getValue()); + String checksum = new String(base62.encode(buffer.array())); + tokenKey.setChecksum(checksum.substring(checksum.length() - TokenKey.CHECKSUM_CHAR_LENGTH)); + + return tokenKey; + } + + public boolean validateChecksum() { + return false; + } + public TokenType getTokenType() { return tokenType; } diff --git a/src/main/java/org/mskcc/cbio/oncokb/security/uuid/TokenProvider.java b/src/main/java/org/mskcc/cbio/oncokb/security/uuid/TokenProvider.java index 08ce324aa..b01c90c22 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/security/uuid/TokenProvider.java +++ b/src/main/java/org/mskcc/cbio/oncokb/security/uuid/TokenProvider.java @@ -2,7 +2,9 @@ import org.mskcc.cbio.oncokb.domain.Authority; import org.mskcc.cbio.oncokb.domain.Token; +import org.mskcc.cbio.oncokb.domain.TokenKey; import org.mskcc.cbio.oncokb.domain.User; +import org.mskcc.cbio.oncokb.domain.enumeration.TokenType; import org.mskcc.cbio.oncokb.repository.UserRepository; import org.mskcc.cbio.oncokb.security.AuthoritiesConstants; import org.mskcc.cbio.oncokb.security.SecurityUtils; @@ -74,6 +76,7 @@ private Token getNewToken(Set authorities, Optional definedE token.setExpiration(expirationTime); } token.setToken(UUID.randomUUID()); + token.setNewToken(TokenKey.generate(TokenType.USER)); return token; }