user info fetcher cache throws error instead of returning null (as per library contract), closes #1144

pull/988/merge
Justin Richer 2016-12-21 14:48:37 -05:00
parent bea3af2470
commit 275c1b7e1c
1 changed files with 41 additions and 46 deletions

View File

@ -18,6 +18,7 @@ package org.mitre.openid.connect.client;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -89,7 +90,7 @@ public class UserInfoFetcher {
this.factory = new HttpComponentsClientHttpRequestFactory(httpClient); this.factory = new HttpComponentsClientHttpRequestFactory(httpClient);
} }
public UserInfo load(final PendingOIDCAuthenticationToken token) { public UserInfo load(final PendingOIDCAuthenticationToken token) throws URISyntaxException {
ServerConfiguration serverConfiguration = token.getServerConfiguration(); ServerConfiguration serverConfiguration = token.getServerConfiguration();
@ -103,52 +104,46 @@ public class UserInfoFetcher {
return null; return null;
} }
try { String userInfoString = null;
String userInfoString = null; if (serverConfiguration.getUserInfoTokenMethod() == null || serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.HEADER)) {
RestTemplate restTemplate = new RestTemplate(factory) {
if (serverConfiguration.getUserInfoTokenMethod() == null || serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.HEADER)) {
RestTemplate restTemplate = new RestTemplate(factory) { @Override
protected ClientHttpRequest createRequest(URI url, HttpMethod method) throws IOException {
@Override ClientHttpRequest httpRequest = super.createRequest(url, method);
protected ClientHttpRequest createRequest(URI url, HttpMethod method) throws IOException { httpRequest.getHeaders().add("Authorization", String.format("Bearer %s", token.getAccessTokenValue()));
ClientHttpRequest httpRequest = super.createRequest(url, method); return httpRequest;
httpRequest.getHeaders().add("Authorization", String.format("Bearer %s", token.getAccessTokenValue())); }
return httpRequest; };
}
}; userInfoString = restTemplate.getForObject(serverConfiguration.getUserInfoUri(), String.class);
userInfoString = restTemplate.getForObject(serverConfiguration.getUserInfoUri(), String.class); } else if (serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.FORM)) {
MultiValueMap<String, String> form = new LinkedMultiValueMap<>();
} else if (serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.FORM)) { form.add("access_token", token.getAccessTokenValue());
MultiValueMap<String, String> form = new LinkedMultiValueMap<>();
form.add("access_token", token.getAccessTokenValue()); RestTemplate restTemplate = new RestTemplate(factory);
userInfoString = restTemplate.postForObject(serverConfiguration.getUserInfoUri(), form, String.class);
RestTemplate restTemplate = new RestTemplate(factory); } else if (serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.QUERY)) {
userInfoString = restTemplate.postForObject(serverConfiguration.getUserInfoUri(), form, String.class); URIBuilder builder = new URIBuilder(serverConfiguration.getUserInfoUri());
} else if (serverConfiguration.getUserInfoTokenMethod().equals(UserInfoTokenMethod.QUERY)) { builder.setParameter("access_token", token.getAccessTokenValue());
URIBuilder builder = new URIBuilder(serverConfiguration.getUserInfoUri());
builder.setParameter("access_token", token.getAccessTokenValue()); RestTemplate restTemplate = new RestTemplate(factory);
userInfoString = restTemplate.getForObject(builder.toString(), String.class);
RestTemplate restTemplate = new RestTemplate(factory); }
userInfoString = restTemplate.getForObject(builder.toString(), String.class);
}
if (!Strings.isNullOrEmpty(userInfoString)) {
if (!Strings.isNullOrEmpty(userInfoString)) { JsonObject userInfoJson = new JsonParser().parse(userInfoString).getAsJsonObject();
JsonObject userInfoJson = new JsonParser().parse(userInfoString).getAsJsonObject(); UserInfo userInfo = fromJson(userInfoJson);
UserInfo userInfo = fromJson(userInfoJson); return userInfo;
} else {
return userInfo; // didn't get anything throw exception
} else { throw new IllegalArgumentException("Unable to load user info");
// didn't get anything, return null
return null;
}
} catch (Exception e) {
logger.warn("Error fetching userinfo", e);
return null;
} }
} }