package in.partake.controller.action.auth;
import in.partake.app.PartakeApp;
import in.partake.app.PartakeConfiguration;
import in.partake.base.PartakeException;
import in.partake.controller.action.AbstractPartakeAction;
import in.partake.resource.Constants;
import in.partake.resource.ServerErrorCode;
import in.partake.service.IOpenIDService;
import in.partake.session.OpenIDLoginInformation;
import org.openid4java.OpenIDException;
import org.openid4java.discovery.DiscoveryInformation;
import play.cache.Cache;
import play.mvc.Result;
public abstract class AbstractOpenIDAction extends AbstractPartakeAction {
private static final int LOGIN_TIMEOUT_SEC = 300;
private static final String CALLBACK_URL = PartakeConfiguration.toppath() + "/auth/verifyOpenID";
protected Result doAuthenticate(String purpose) throws OpenIDException, PartakeException {
String identifier = getParameter("openidIdentifier");
String sessionId = session().get(Constants.Session.ID_KEY);
assert sessionId != null;
if (sessionId == null)
throw new PartakeException(ServerErrorCode.SESSION_ID_KEY_NOTFOUND);
IOpenIDService service = PartakeApp.getOpenIDService();
DiscoveryInformation discoveryInformation = service.discover(identifier);
OpenIDLoginInformation info = new OpenIDLoginInformation(purpose, discoveryInformation);
Cache.set(Constants.Cache.OPENID_LOGIN_KEY_PREFIX + sessionId, info, LOGIN_TIMEOUT_SEC);
String authURL = service.getURLToAuthenticate(discoveryInformation, CALLBACK_URL);
return renderRedirect(authURL);
}
}