in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/oid/UserInfoServiceImpl.java [88:132]
public String getUsername(String token, String subStr, long exp) {
// 1. Check cache
// 2. Insert cache(sub)
final Sub sub;
synchronized (sync) {
long it = cachedSub.locateOrReserve(token);
if (it == cachedSub.getReservedSpace()) {
sub = new Sub(subStr, exp);
cachedSub.setKeyAt(it, token);
cachedSub.setValueAt(it, sub);
} else {
sub = cachedSub.getValueAt(it);
}
final UserName username = cachedUserNames.get(sub.getSub());
if (username != null)
return username.getUsername();
}
// 3. Check userinfo
LOG.debug().append("/userinfo request: ").append(token).commit();
String usernameStr = openIdAuthProvider.getUsername(token);
if (usernameStr == null)
throw new IllegalStateException("Couldn't extract username from token.");
// 4. Insert cache(username)
synchronized (sync) {
final UserName username;
long it = cachedUserNames.locateOrReserve(sub.getSub());
if (it == cachedUserNames.getReservedSpace()) {
try {
username = new UserName(usernameStr, exp);
} catch (Throwable ex) {
cachedUserNames.removeAt(it);
throw ex;
}
cachedUserNames.setKeyAt(it, sub.getSub());
cachedUserNames.setValueAt(it, username);
} else {
username = cachedUserNames.getValueAt(it);
if (exp > username.getExpiration())
username.setExpiration(exp);
}
return username.getUsername();
}
}