diff --git a/openid-connect-server/src/main/java/org/mitre/discovery/web/DiscoveryEndpoint.java b/openid-connect-server/src/main/java/org/mitre/discovery/web/DiscoveryEndpoint.java index c46b18bc3..0bd99de51 100644 --- a/openid-connect-server/src/main/java/org/mitre/discovery/web/DiscoveryEndpoint.java +++ b/openid-connect-server/src/main/java/org/mitre/discovery/web/DiscoveryEndpoint.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.mitre.discovery.util.WebfingerURLNormalizer; import org.mitre.jwt.signer.service.JwtSigningAndValidationService; import org.mitre.oauth2.service.SystemScopeService; import org.mitre.openid.connect.config.ConfigurationPropertiesBean; @@ -35,6 +36,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.util.UriComponents; import com.google.common.base.Function; import com.google.common.base.Splitter; @@ -86,35 +88,24 @@ public class DiscoveryEndpoint { if (!resource.equals(config.getIssuer())) { // it's not the issuer directly, need to check other methods - try { - URI resourceUri = new URI(resource); - if (resourceUri != null - && resourceUri.getScheme() != null - && resourceUri.getScheme().equals("acct")) { - // acct: URI + UriComponents resourceUri = WebfingerURLNormalizer.normalizeResource(resource); + if (resourceUri != null + && resourceUri.getScheme() != null + && resourceUri.getScheme().equals("acct")) { + // acct: URI - // split out the user and host parts - List parts = Lists.newArrayList(Splitter.on("@").split(resourceUri.getSchemeSpecificPart())); + UserInfo user = null; + user = userService.getByUsername(resourceUri.getUserInfo()); // first part is the username - UserInfo user = null; - if (parts.size() > 0) { - user = userService.getByUsername(parts.get(0)); // first part is the username - } - - if (user == null) { - logger.info("User not found: " + resource); - model.addAttribute("code", HttpStatus.NOT_FOUND); - return "httpCodeView"; - } - // TODO: check the "host" part against our issuer - - } else { - logger.info("Unknown URI format: " + resource); + if (user == null) { + logger.info("User not found: " + resource); model.addAttribute("code", HttpStatus.NOT_FOUND); return "httpCodeView"; } - } catch (URISyntaxException e) { - logger.info("URI parsing exception: " + resource, e); + // TODO: check the "host" part against our issuer + + } else { + logger.info("Unknown URI format: " + resource); model.addAttribute("code", HttpStatus.NOT_FOUND); return "httpCodeView"; }