protected OpenIdUser discover(Identifier identifier, HttpServletRequest request) throws Exception { OpenIdUser user = _userCache.get(identifier.getUrl(), true); if (user == null) { try { user = _context.getDiscovery().discover(identifier, _context); } catch (IOException e) { if (!_identifierAsServer) throw e; } if (user == null) { if (!_identifierAsServer) return null; // user = new OpenIdUser(identifier.getId(), YadisDiscovery.IDENTIFIER_SELECT, // identifier.getUrl(), null); user = OpenIdUser.populate( identifier.getId(), YadisDiscovery.IDENTIFIER_SELECT, identifier.getUrl(), null); } _userCache.put(identifier.getUrl(), user); } _listener.onDiscovery(user, request); request.setAttribute(OpenIdUser.ATTR_NAME, user); return user; }
@PreDestroy void destroy() { logger.trace("Destroying event bus [{}] and removing all listeners", this); listeners.clear(); if (parentEventBus != null) { parentEventBus.unsubscribe(parentListener); } }
@Override public void onEvent(final Event<Object> event) { logger.debug( "Propagating event [{}] from parent event bus [{}] to event bus [{}]", event, parentEventBus, ScopedEventBus.this); listeners.publish(event); }
@Override public <T> void subscribe(EventBusListener<T> listener, boolean includingPropagatingEvents) { logger.trace( "Subscribing listener [{}] to event bus [{}], includingPropagatingEvents = {}", listener, this, includingPropagatingEvents); listeners.add(new EventBusListenerWrapper(this, listener, includingPropagatingEvents)); }
/** * Returns true if the user has succeeded authentication on his openid provider; The {@link * OpenIdUser} is persisted if successful. */ public boolean verifyAuth( OpenIdUser user, HttpServletRequest request, HttpServletResponse response) throws Exception { if (_context.getAssociation().verifyAuth(user, getAuthParameters(request), _context)) { _listener.onAuthenticate(user, request); _manager.saveUser(user, request, response); return true; } return false; }
@Override public <T> void publish(String topic, Object sender, T payload) { logger.debug( "Publishing payload [{}] from sender [{}] on event bus [{}] in topic [{}]", payload, sender, this, topic); listeners.publish(new Event<T>(this, sender, payload, topic)); }
@Override public void unsubscribe(final Object listener) { logger.trace("Unsubscribing listener [{}] from event bus [{}]", listener, this); listeners.removeAll( new ListenerCollection.ListenerFilter() { @Override public boolean passes(ListenerCollection.Listener l) { return (l instanceof AbstractListenerWrapper) && (((AbstractListenerWrapper) l).getListenerTarget() == listener); } }); }
/** * Return the current user, either an already authenticated one, or the one just discovered from * the <i>openid.identifier.parameter</i> (= "openid_identifier" by default).<br> * Returns <code>null</code> if the {@link Constants#OPENID_MODE} associated with the request is * set to {@link Constants.Mode#CANCEL} (in order to login under a different id), or if the * authentification is timed out.<br> * If returned user is <code>null</code> and {@link #isAuthResponse(HttpServletRequest)} is <code> * true</code> then we have an authentication timeout. * * @param request HttpServletRequest * @return user OpenIdUser */ public OpenIdUser discover(HttpServletRequest request) throws Exception { OpenIdUser user = (OpenIdUser) request.getAttribute(OpenIdUser.ATTR_NAME); if (user == null) { System.err.println("vvvvvv RelyingParty: user NOT in request"); user = _manager.getUser(request); String id = null; if (user != null) { System.err.println("vvvvvv RelyingParty: user in session"); if (user.isAuthenticated()) { System.err.println("vvvvvv RelyingParty: user authenticated"); _listener.onAccess(user, request); request.setAttribute(OpenIdUser.ATTR_NAME, user); return user; } System.err.println("vvvvvv RelyingParty: user NOT authenticated"); if ((id = request.getParameter(_identifierParameter)) == null) { if (user.isAssociated()) { String mode = request.getParameter(Constants.OPENID_MODE); if (mode == null) return _automaticRedirect ? user : null; return Constants.Mode.CANCEL.equals(mode) ? null : user; } return user; } else if ((id = id.trim()).length() != 0) { Identifier identifier = Identifier.getIdentifier(id, _resolver, _context); if (identifier.isResolved()) { if (!identifier.getId().equals(user.getIdentifier())) { // new user or ... the user cancels authentication // and provides a different openid identifier return discover(identifier, request); } } } } else if ((id = request.getParameter(_identifierParameter)) != null && (id = id.trim()).length() != 0) { System.err.println( "vvvvvv RelyingParty: user NOT in session and parameter(" + _identifierParameter + ") is NOT empty"); Identifier identifier = Identifier.getIdentifier(id, _resolver, _context); if (identifier.isResolved()) return discover(identifier, request); } else { System.err.println( "vvvvvv RelyingParty: user NOT in session and parameter(" + _identifierParameter + ") is empty"); } } return user; }
public boolean authenticate( OpenIdUser user, HttpServletRequest request, HttpServletResponse response, String trustRoot, String realm, String returnTo) throws IOException { UrlEncodedParameterMap params = getAuthUrlMap(user, trustRoot, realm, returnTo); _listener.onPreAuthenticate(user, request, params); _manager.saveUser(user, request, response); _authRedirection.redirect(params, request, response); return true; }
/** Adds a custom listener. */ public RelyingParty addListener(Listener listener) { _listener.addListener(listener); return this; }
@Override public <T> void publish(Object sender, T payload) { logger.debug( "Publishing payload [{}] from sender [{}] on event bus [{}]", payload, sender, this); listeners.publish(new Event<>(this, sender, payload)); }