Skip to content
Snippets Groups Projects
Commit 1ef62c62 authored by tpylak's avatar tpylak
Browse files

LMS-544 user name cannot have "-" or "@" inside: backporting from 8.04

SVN: 9465
parent 2edf81dc
No related branches found
No related tags found
No related merge requests found
......@@ -33,20 +33,30 @@ public final class TokenGenerator implements Serializable
private static final long serialVersionUID = 1L;
@Private
static final String TIMESTAMP_FORMAT = "%1$ty%1$tm%1$td%1$tH%1$tM%1$tS%1$tL-";
static final String TIMESTAMP_FORMAT = "%1$ty%1$tm%1$td%1$tH%1$tM%1$tS%1$tL";
private static final char DEFAULT_SEPARATOR = '-';
private final SecureRandom pseudoRandomNumberGenerator = new SecureRandom();
/** @see #getNewToken(long, char) */
public synchronized String getNewToken(final long timeStamp)
{
return getNewToken(timeStamp, DEFAULT_SEPARATOR);
}
/**
* @param timeStamp The time stamp (in milli-seconds since start of the epoch) to base token
* generation on.
* @param separator the character to separate timestamp from the rest of the token
* @return A new (pseudo-)random session token in hex format.
*/
public synchronized String getNewToken(final long timeStamp)
public synchronized String getNewToken(final long timeStamp, final char separator)
{
final Formatter formatter = new Formatter();
final byte[] bytes = new byte[16];
formatter.format(TIMESTAMP_FORMAT, timeStamp);
formatter.format("" + separator);
pseudoRandomNumberGenerator.nextBytes(bytes);
hexify(formatter, bytes);
return formatter.toString();
......
......@@ -31,9 +31,7 @@ import static org.testng.AssertJUnit.assertEquals;
public class TokenGeneratorTest
{
private static final String TIMESTAMP_FORMAT =
TokenGenerator.TIMESTAMP_FORMAT.substring(0,
TokenGenerator.TIMESTAMP_FORMAT.length() - 1);
private static final String TIMESTAMP_FORMAT = TokenGenerator.TIMESTAMP_FORMAT;
private static boolean isHexString(String s)
{
......@@ -53,7 +51,8 @@ public class TokenGeneratorTest
final TokenGenerator generator = new TokenGenerator();
final long now = System.currentTimeMillis();
final String nowFormatted = String.format(TIMESTAMP_FORMAT, now);
final String[] token = StringUtils.split(generator.getNewToken(now), '-');
char separator = '-';
final String[] token = StringUtils.split(generator.getNewToken(now, separator), separator);
assertEquals(2, token.length);
assertEquals(nowFormatted, token[0]);
assert isHexString(token[1]) : token[1];
......@@ -64,8 +63,9 @@ public class TokenGeneratorTest
{
final TokenGenerator generator = new TokenGenerator();
final long now = System.currentTimeMillis();
final String[] token1 = StringUtils.split(generator.getNewToken(now), '-');
final String[] token2 = StringUtils.split(generator.getNewToken(now), '-');
char separator = '-';
final String[] token1 = StringUtils.split(generator.getNewToken(now, separator), separator);
final String[] token2 = StringUtils.split(generator.getNewToken(now, separator), separator);
assert token1[0].equals(token2[0]) : "'" + token1[0] + "' != '" + token2[0] + "'";
assert token1[1].equals(token2[1]) == false : "'" + token1[1] + "' == '" + token2[1] + "'";
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment