Project WONDER-Frameworks-EROpenID

Version 9.1 by simon on 2009/10/20 16:05

Sample delegate for talking to Google Apps via Google's openID deferated login. Note Google does not support SRegRequest.

public class GoogleAppsDelegate extends EROpenIDManager.DefaultDelegate {

 @Override
 public List<MessageExtension> createFetchMessageExtensions(String userSuppliedString, WORequest request,
   WOContext context) throws MessageException {
  ArrayList<MessageExtension> exts = new ArrayList<MessageExtension>();
  FetchRequest fetchRequest = FetchRequest.createFetchRequest();
  fetchRequest.addAttribute("Email", "http://axschema.org/contact/email", true);
  exts.add(fetchRequest);
  return exts;
 }

}

You'll also need to patch wonder (unless it's been committed) to get Google to remember approved sites.

http://issues.objectstyle.org/jira/browse/WONDER-374?page=all

Then override appendToResponse your standard login page with something like this:

 public void appendToResponse(WOResponse r, WOContext c) {
  // Assume client and realm exists.
  if (client.doesOpenID()) {
   String url = ((ERXWOContext) c).directActionURLForActionNamed(ERODirectAction.class.getName()
     "/openIDRequest?" + "identity=" + client.openIdIdentity() + "&realm="
     
realm, null);
   r.setHeader(url, "location");
   r.setStatus(302);
  } else {
   super.appendToResponse(r, c);
  }
 }

Notes: the realm needs to be something static and explicit to your app. We use this:

WOApplication.application().webserverConnectURL().replaceFirst("http", "https")