Search in sources :

Example 1 with FetchRequest

use of org.openid4java.message.ax.FetchRequest in project gerrit by GerritCodeReview.

the class OpenIdServiceImpl method discover.

@SuppressWarnings("unchecked")
DiscoveryResult discover(HttpServletRequest req, String openidIdentifier, final SignInMode mode, final boolean remember, final String returnToken) {
    final State state;
    state = init(req, openidIdentifier, mode, remember, returnToken);
    if (state == null) {
        return new DiscoveryResult(DiscoveryResult.Status.NO_PROVIDER);
    }
    final AuthRequest aReq;
    try {
        aReq = manager.authenticate(state.discovered, state.retTo.toString());
        log.debug("OpenID: openid-realm={}", state.contextUrl);
        aReq.setRealm(state.contextUrl);
        if (requestRegistration(aReq)) {
            final SRegRequest sregReq = SRegRequest.createFetchRequest();
            sregReq.addAttribute("fullname", true);
            sregReq.addAttribute("email", true);
            aReq.addExtension(sregReq);
            final FetchRequest fetch = FetchRequest.createFetchRequest();
            fetch.addAttribute("FirstName", SCHEMA_FIRSTNAME, true);
            fetch.addAttribute("LastName", SCHEMA_LASTNAME, true);
            fetch.addAttribute("Email", SCHEMA_EMAIL, true);
            aReq.addExtension(fetch);
        }
        if (0 <= papeMaxAuthAge) {
            final PapeRequest pape = PapeRequest.createPapeRequest();
            pape.setMaxAuthAge(papeMaxAuthAge);
            aReq.addExtension(pape);
        }
    } catch (MessageException e) {
        log.error("Cannot create OpenID redirect for " + openidIdentifier, e);
        return new DiscoveryResult(DiscoveryResult.Status.ERROR);
    } catch (ConsumerException e) {
        log.error("Cannot create OpenID redirect for " + openidIdentifier, e);
        return new DiscoveryResult(DiscoveryResult.Status.ERROR);
    }
    return new DiscoveryResult(aReq.getDestinationUrl(false), aReq.getParameterMap());
}
Also used : AuthRequest(org.openid4java.message.AuthRequest) SRegRequest(org.openid4java.message.sreg.SRegRequest) PapeRequest(org.openid4java.message.pape.PapeRequest) MessageException(org.openid4java.message.MessageException) FetchRequest(org.openid4java.message.ax.FetchRequest) ConsumerException(org.openid4java.consumer.ConsumerException)

Example 2 with FetchRequest

use of org.openid4java.message.ax.FetchRequest in project oxTrust by GluuFederation.

the class OxChooserWebService method requestHandler.

@Path("/Request")
@GET
@POST
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response requestHandler(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("idRequest") String idReq) throws Exception {
    try {
        byte[] decodedIdreq = Base64.decodeBase64(idReq);
        IdentityRequest idRequest = (IdentityRequest) jsonToObject(decodedIdreq, IdentityRequest.class);
        log.debug("openid_identifier_operation : ", idRequest.getIdentifier());
        log.debug("instantiating manager");
        log.debug("manager instantiated ");
        String returnToUrl = idRequest.getReturnToUrl();
        log.debug("getting list of discoveries");
        List discoveries = manager.discover(idRequest.getIdentifier());
        log.debug("retrieving descovered");
        DiscoveryInformation discovered = manager.associate(discoveries);
        log.debug("saving request");
        request.getSession().setAttribute("openid-disc", discovered);
        log.debug("instantiating AuthRequest");
        AuthRequest authReq = manager.authenticate(discovered, returnToUrl, idRequest.getRealm());
        FetchRequest fetch = FetchRequest.createFetchRequest();
        if (idRequest.getAxschema().contains("axschema")) {
            fetch.addAttribute("nickname", "http://axschema.org/namePerson/friendly", true);
            fetch.addAttribute("fullname", "http://axschema.org/namePerson", true);
            fetch.addAttribute("email", "http://axschema.org/contact/email", true);
            fetch.addAttribute("gender", "http://axschema.org/person/gender", true);
            fetch.addAttribute("language", "http://axschema.org/pref/language", true);
            fetch.addAttribute("timezone", "http://axschema.org/pref/timezone", true);
            fetch.addAttribute("image", "http://axschema.org/media/image/default", true);
        } else {
            fetch.addAttribute("firstname", "http://schema.openid.net/namePerson/first", true);
            fetch.addAttribute("lastname", "http://schema.openid.net/namePerson/last", true);
            fetch.addAttribute("email", "http://schema.openid.net/contact/email", true);
            fetch.addAttribute("country", "http://axschema.org/contact/country/home", true);
            fetch.addAttribute("language", "http://axschema.org/pref/language", true);
        }
        log.debug("adding fetch data");
        authReq.addExtension(fetch);
        log.debug("redirecting");
        response.sendRedirect(authReq.getDestinationUrl(true));
        log.debug("reterning build");
        return Response.ok().build();
    } catch (ConsumerException e) {
        log.debug("Error occured : ", e.getMessage(), " ", e.getCause());
        OxChooserError error = new OxChooserError();
        error.setDescription("An Error occured , request didnt go through.");
        return Response.status(400).entity(error).build();
    } finally {
        identity.logout();
    }
}
Also used : AuthRequest(org.openid4java.message.AuthRequest) IdentityRequest(org.gluu.oxtrust.model.oxchooser.IdentityRequest) DiscoveryInformation(org.openid4java.discovery.DiscoveryInformation) FetchRequest(org.openid4java.message.ax.FetchRequest) OxChooserError(org.gluu.oxtrust.model.oxchooser.OxChooserError) List(java.util.List) ParameterList(org.openid4java.message.ParameterList) ConsumerException(org.openid4java.consumer.ConsumerException) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 3 with FetchRequest

use of org.openid4java.message.ax.FetchRequest in project ratpack by ratpack.

the class PatchedSampleServer method processRequest.

public String processRequest(HttpServletRequest httpReq, HttpServletResponse httpResp) throws Exception {
    // extract the parameters from the request
    ParameterList request = new ParameterList(httpReq.getParameterMap());
    String mode = request.hasParameter("openid.mode") ? request.getParameterValue("openid.mode") : null;
    Message response;
    String responseText;
    if ("associate".equals(mode)) {
        // --- process an association request ---
        response = manager.associationResponse(request);
        responseText = response.keyValueFormEncoding();
    } else if ("checkid_setup".equals(mode) || "checkid_immediate".equals(mode)) {
        // interact with the user and obtain data needed to continue
        List<?> userData = userInteraction(request);
        String userSelectedClaimedId = (String) userData.get(0);
        Boolean authenticatedAndApproved = (Boolean) userData.get(1);
        String email = (String) userData.get(2);
        // --- process an authentication request ---
        AuthRequest authReq = AuthRequest.createAuthRequest(request, manager.getRealmVerifier());
        // Sign after we added extensions.
        response = manager.authResponse(request, null, userSelectedClaimedId, authenticatedAndApproved, false);
        if (response instanceof DirectError) {
            return directResponse(httpResp, response.keyValueFormEncoding());
        } else {
            if (authReq.hasExtension(AxMessage.OPENID_NS_AX)) {
                MessageExtension ext = authReq.getExtension(AxMessage.OPENID_NS_AX);
                if (ext instanceof FetchRequest) {
                    FetchRequest fetchReq = (FetchRequest) ext;
                    Map<?, ?> required = fetchReq.getAttributes(true);
                    //Map optional = fetchReq.getAttributes(false);
                    if (required.containsKey("email")) {
                        Map<Object, Object> userDataExt = new HashMap<>();
                        //userDataExt.put("email", userData.get(3));
                        FetchResponse fetchResp = FetchResponse.createFetchResponse(fetchReq, userDataExt);
                        // (alternatively) manually add attribute values
                        fetchResp.addAttribute("email", "http://schema.openid.net/contact/email", email);
                        response.addExtension(fetchResp);
                    }
                } else {
                    throw new UnsupportedOperationException("TODO");
                }
            }
            if (authReq.hasExtension(SRegMessage.OPENID_NS_SREG)) {
                MessageExtension ext = authReq.getExtension(SRegMessage.OPENID_NS_SREG);
                if (ext instanceof SRegRequest) {
                    SRegRequest sregReq = (SRegRequest) ext;
                    List<?> required = sregReq.getAttributes(true);
                    //List optional = sregReq.getAttributes(false);
                    if (required.contains("email")) {
                        // data released by the user
                        Map<Object, Object> userDataSReg = new HashMap<>();
                        //userData.put("email", "user@example.com");
                        SRegResponse sregResp = SRegResponse.createSRegResponse(sregReq, userDataSReg);
                        // (alternatively) manually add attribute values
                        sregResp.addAttribute("email", email);
                        response.addExtension(sregResp);
                    }
                } else {
                    throw new UnsupportedOperationException("TODO");
                }
            }
            // Sign the auth success message.
            if (response instanceof AuthSuccess) {
                manager.sign((AuthSuccess) response);
            }
            // option1: GET HTTP-redirect to the return_to URL
            return response.getDestinationUrl(true);
        // option2: HTML FORM Redirection
        //RequestDispatcher dispatcher =
        //        getServletContext().getRequestDispatcher("formredirection.jsp");
        //httpReq.setAttribute("prameterMap", response.getParameterMap());
        //httpReq.setAttribute("destinationUrl", response.getDestinationUrl(false));
        //dispatcher.forward(request, response);
        //return null;
        }
    } else if ("check_authentication".equals(mode)) {
        // --- processing a verification request ---
        response = manager.verify(request);
        responseText = response.keyValueFormEncoding();
    } else {
        // --- error response ---
        response = DirectError.createDirectError("Unknown request");
        responseText = response.keyValueFormEncoding();
    }
    // return the result to the user
    return responseText;
}
Also used : SRegRequest(org.openid4java.message.sreg.SRegRequest) AxMessage(org.openid4java.message.ax.AxMessage) SRegMessage(org.openid4java.message.sreg.SRegMessage) FetchResponse(org.openid4java.message.ax.FetchResponse) SRegResponse(org.openid4java.message.sreg.SRegResponse) FetchRequest(org.openid4java.message.ax.FetchRequest) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 4 with FetchRequest

use of org.openid4java.message.ax.FetchRequest in project spring-security by spring-projects.

the class OpenID4JavaConsumer method beginConsumption.

// ~ Methods
// ========================================================================================================
public String beginConsumption(HttpServletRequest req, String identityUrl, String returnToUrl, String realm) throws OpenIDConsumerException {
    List<DiscoveryInformation> discoveries;
    try {
        discoveries = consumerManager.discover(identityUrl);
    } catch (DiscoveryException e) {
        throw new OpenIDConsumerException("Error during discovery", e);
    }
    DiscoveryInformation information = consumerManager.associate(discoveries);
    req.getSession().setAttribute(DISCOVERY_INFO_KEY, information);
    AuthRequest authReq;
    try {
        authReq = consumerManager.authenticate(information, returnToUrl, realm);
        logger.debug("Looking up attribute fetch list for identifier: " + identityUrl);
        List<OpenIDAttribute> attributesToFetch = attributesToFetchFactory.createAttributeList(identityUrl);
        if (!attributesToFetch.isEmpty()) {
            req.getSession().setAttribute(ATTRIBUTE_LIST_KEY, attributesToFetch);
            FetchRequest fetchRequest = FetchRequest.createFetchRequest();
            for (OpenIDAttribute attr : attributesToFetch) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Adding attribute " + attr.getType() + " to fetch request");
                }
                fetchRequest.addAttribute(attr.getName(), attr.getType(), attr.isRequired(), attr.getCount());
            }
            authReq.addExtension(fetchRequest);
        }
    } catch (MessageException e) {
        throw new OpenIDConsumerException("Error processing ConsumerManager authentication", e);
    } catch (ConsumerException e) {
        throw new OpenIDConsumerException("Error processing ConsumerManager authentication", e);
    }
    return authReq.getDestinationUrl(true);
}
Also used : AuthRequest(org.openid4java.message.AuthRequest) MessageException(org.openid4java.message.MessageException) DiscoveryInformation(org.openid4java.discovery.DiscoveryInformation) FetchRequest(org.openid4java.message.ax.FetchRequest) ConsumerException(org.openid4java.consumer.ConsumerException) DiscoveryException(org.openid4java.discovery.DiscoveryException)

Aggregations

FetchRequest (org.openid4java.message.ax.FetchRequest)4 ConsumerException (org.openid4java.consumer.ConsumerException)3 AuthRequest (org.openid4java.message.AuthRequest)3 List (java.util.List)2 DiscoveryInformation (org.openid4java.discovery.DiscoveryInformation)2 MessageException (org.openid4java.message.MessageException)2 SRegRequest (org.openid4java.message.sreg.SRegRequest)2 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Consumes (javax.ws.rs.Consumes)1 GET (javax.ws.rs.GET)1 POST (javax.ws.rs.POST)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 IdentityRequest (org.gluu.oxtrust.model.oxchooser.IdentityRequest)1 OxChooserError (org.gluu.oxtrust.model.oxchooser.OxChooserError)1 DiscoveryException (org.openid4java.discovery.DiscoveryException)1 ParameterList (org.openid4java.message.ParameterList)1 AxMessage (org.openid4java.message.ax.AxMessage)1 FetchResponse (org.openid4java.message.ax.FetchResponse)1