package org.jboss.seam.security.external.openid; import java.io.IOException; import java.net.URLDecoder; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.security.external.spi.OpenIdProviderSpi; /** * @author Marcel Kolsteren */ public class OpenIdUsersServlet extends HttpServlet { private static final long serialVersionUID = 1476698956314628568L; @Inject private Instance<OpenIdProviderBeanApi> opBean; @Inject private Instance<OpenIdProviderSpi> providerSpi; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String prefix = opBean.get().getUsersUrlPrefix(); if (!request.getRequestURL().toString().startsWith(prefix)) { response.sendError(HttpServletResponse.SC_NOT_FOUND, "Only accepting requests for URLs starting with " + prefix); return; } String userNamePart = request.getRequestURL().substring(prefix.length()); String userName = URLDecoder.decode(userNamePart, "UTF-8"); if (providerSpi.get().userExists(userName)) { response.setContentType("application/xrds+xml"); opBean.get().writeClaimedIdentifierXrds(response.getWriter(), opBean.get().getOpLocalIdentifierForUserName(userName)); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND, "User " + userName + " does not exist."); } } }