package com.github.hburgmeier.jerseyoauth2.sample.openid.services;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.joda.time.Duration;
import com.github.hburgmeier.jerseyoauth2.api.token.InvalidTokenException;
import com.github.hburgmeier.jerseyoauth2.api.types.TokenType;
import com.github.hburgmeier.jerseyoauth2.api.user.IUser;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.IConfiguration;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.client.IAuthorizedClientApp;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.token.IAccessTokenInfo;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.token.IAccessTokenStorageService;
import com.github.hburgmeier.jerseyoauth2.authsrv.impl.simple.SimpleAccessTokenInfo;
public class TestAccessTokenStorageService implements IAccessTokenStorageService {
private static final Map<String, IAccessTokenInfo> tokenStore = Collections.synchronizedMap(new HashMap<String, IAccessTokenInfo>());
private static final Map<String, IAccessTokenInfo> refreshTokenStore = Collections.synchronizedMap(new HashMap<String, IAccessTokenInfo>());
private Duration tokenExpiration;
@Inject
public TestAccessTokenStorageService(final IConfiguration configuration)
{
tokenExpiration = configuration.getTokenLifetime();
}
@Override
public IAccessTokenInfo getTokenInfoByAccessToken(String accessToken)
throws InvalidTokenException {
if (accessToken==null)
throw new InvalidTokenException();
IAccessTokenInfo info = tokenStore.get(accessToken);
if (info==null)
{
throw new InvalidTokenException();
}
return info;
}
@Override
public IAccessTokenInfo issueToken(String accessToken, String refreshToken,
IAuthorizedClientApp clientApp) {
SimpleAccessTokenInfo tokenInfo = new SimpleAccessTokenInfo(accessToken, refreshToken, clientApp, tokenExpiration, TokenType.BEARER);
tokenStore.put(accessToken, tokenInfo);
refreshTokenStore.put(refreshToken, tokenInfo);
return tokenInfo;
}
@Override
public IAccessTokenInfo getTokenInfoByRefreshToken(String refreshToken) throws InvalidTokenException {
if (refreshToken==null)
throw new InvalidTokenException();
IAccessTokenInfo info = refreshTokenStore.get(refreshToken);
if (info==null)
{
throw new InvalidTokenException();
}
return info;
}
@Override
public IAccessTokenInfo refreshToken(String oldAccessToken, String newAccessToken, String newRefreshToken) {
IAccessTokenInfo tokenInfo = tokenStore.remove(oldAccessToken);
refreshTokenStore.remove(tokenInfo.getRefreshToken());
tokenInfo.updateTokens(newAccessToken, newRefreshToken);
tokenStore.put(newAccessToken, tokenInfo);
refreshTokenStore.put(newRefreshToken, tokenInfo);
return tokenInfo;
}
@Override
public List<IAccessTokenInfo> invalidateTokensForUser(IUser user) {
List<IAccessTokenInfo> values = new LinkedList<>(tokenStore.values());
for (IAccessTokenInfo tokenInfo : values)
{
tokenStore.remove(tokenInfo.getAccessToken());
refreshTokenStore.remove(tokenInfo.getRefreshToken());
}
return values;
}
}