uri-based parsing of user inputs
parent
51dfd67d0c
commit
70cac0c690
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
package org.mitre.openid.connect.client.service.impl;
|
package org.mitre.openid.connect.client.service.impl;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -32,9 +34,9 @@ public class WebfingerIssuerService implements IssuerService {
|
||||||
private static Logger logger = LoggerFactory.getLogger(WebfingerIssuerService.class);
|
private static Logger logger = LoggerFactory.getLogger(WebfingerIssuerService.class);
|
||||||
|
|
||||||
// map of user input -> issuer, loaded dynamically from webfinger discover
|
// map of user input -> issuer, loaded dynamically from webfinger discover
|
||||||
private LoadingCache<String, String> issuers;
|
private LoadingCache<URI, String> issuers;
|
||||||
|
|
||||||
private String parameterName = "login";
|
private String parameterName = "identifier";
|
||||||
|
|
||||||
public WebfingerIssuerService() {
|
public WebfingerIssuerService() {
|
||||||
issuers = CacheBuilder.newBuilder().build(new WebfingerIssuerFetcher());
|
issuers = CacheBuilder.newBuilder().build(new WebfingerIssuerFetcher());
|
||||||
|
@ -67,9 +69,51 @@ public class WebfingerIssuerService implements IssuerService {
|
||||||
* @param resource
|
* @param resource
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private String normalizeResource(String resource) {
|
public static URI normalizeResource(String resource) {
|
||||||
// TODO
|
// try to parse the URI
|
||||||
return null;
|
|
||||||
|
try {
|
||||||
|
URI uri = new URI(resource);
|
||||||
|
|
||||||
|
if (!Strings.isNullOrEmpty(uri.getAuthority())) {
|
||||||
|
|
||||||
|
if (!Strings.isNullOrEmpty(uri.getScheme())) {
|
||||||
|
// there's already a scheme, we'll keep it
|
||||||
|
|
||||||
|
// strip the fragment
|
||||||
|
|
||||||
|
URI noFragment = new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), uri.getQuery(), null);
|
||||||
|
|
||||||
|
return noFragment;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// no scheme
|
||||||
|
|
||||||
|
if (Strings.isNullOrEmpty(uri.getUserInfo())) {
|
||||||
|
// no "user" portion, treat as https
|
||||||
|
|
||||||
|
URI https = new URI("https", uri.getAuthority(), uri.getPath(), uri.getQuery(), null);
|
||||||
|
|
||||||
|
return https;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// it's a user@host format, prepend the "acct:" scheme
|
||||||
|
URI acct = new URI("acct", uri.getAuthority(), uri.getPath(), uri.getQuery(), null);
|
||||||
|
|
||||||
|
return acct;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no authority section, this is an error
|
||||||
|
logger.warn("No authority section: " + resource);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
logger.warn("Failed parsing input URI: " + resource, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +136,7 @@ public class WebfingerIssuerService implements IssuerService {
|
||||||
* @author jricher
|
* @author jricher
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private class WebfingerIssuerFetcher extends CacheLoader<String, String> {
|
private class WebfingerIssuerFetcher extends CacheLoader<URI, String> {
|
||||||
private HttpClient httpClient = new DefaultHttpClient();
|
private HttpClient httpClient = new DefaultHttpClient();
|
||||||
private HttpComponentsClientHttpRequestFactory httpFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
private HttpComponentsClientHttpRequestFactory httpFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||||
private RestTemplate restTemplate = new RestTemplate(httpFactory);
|
private RestTemplate restTemplate = new RestTemplate(httpFactory);
|
||||||
|
@ -100,7 +144,7 @@ public class WebfingerIssuerService implements IssuerService {
|
||||||
* @see com.google.common.cache.CacheLoader#load(java.lang.Object)
|
* @see com.google.common.cache.CacheLoader#load(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String load(String key) throws Exception {
|
public String load(URI key) throws Exception {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue