public JSONObject validateUserCreation(String b64Token) throws Exception {
byte[] encryptedToken = Base64.decodeBase64(b64Token);
Token token = TokenEncryptor.decryptToken(serverKey, encryptedToken);
if( token instanceof CreationToken ){
CreationToken creationToken = (CreationToken)token;
Date expiry = creationToken.getExpiry();
if( null != expiry ){
Date now = new Date();
if( now.getTime() > expiry.getTime() ){
throw new TokenExpiredException("Token is expired");
}
}
// Check if user already exists
String emailAddress = creationToken.getEmailAddress();
if( null == emailAddress ) {
throw new Exception("Token does not specify e-mail address");
}
JSONObject user = null;
try {
user = userRepository.getUserFromEmailAddress(emailAddress);
} catch(Exception e) {
// OK
}
if( null != user ) {
throw new Exception("User with e-mail "+emailAddress+
" already exists. Attempt password recovery.");
}
JSONObject result = new JSONObject();
result.put("valid", true);
result.put("emailAddress", creationToken.getEmailAddress());
return result;
} else {
throw new Exception("Unexpected token class: "+token.getClass().getName());
}
}