package org.atricore.idbus.capabilities.sso.ui.agent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.atricore.idbus.capabilities.oauth2.common.OAuth2AccessToken;
import org.atricore.idbus.capabilities.oauth2.rserver.AccessTokenResolver;
import org.atricore.idbus.capabilities.oauth2.rserver.AccessTokenResolverFactory;
import org.atricore.idbus.capabilities.oauth2.rserver.OAuth2RServerException;
import org.atricore.idbus.capabilities.oauth2.rserver.SecureAccessTokenResolverFactory;
import org.atricore.idbus.capabilities.sso.ui.WebAppConfig;
import org.atricore.idbus.capabilities.sso.ui.internal.SSOWebSession;
import org.atricore.idbus.capabilities.sso.ui.page.BasePage;
import org.atricore.idbus.capabilities.sso.ui.page.error.AppErrorPage;
import java.util.Properties;
/**
* @author: sgonzalez@atriocore.com
* @date: 2/27/13
*/
public class JossoSecurityCheckPage extends BasePage {
private static final Log logger = LogFactory.getLog(JossoSecurityCheckPage.class);
private static final String ACCESS_TOKEN_PARAM = "access_token";
public JossoSecurityCheckPage() throws Exception {
}
public JossoSecurityCheckPage(PageParameters parameters) throws Exception {
super(parameters);
}
@Override
protected void onInitialize() {
super.onInitialize();
try {
createOAuth2SecurityContext();
} catch (Exception e) {
logger.error(e.getMessage(), e);
// TODO : Provide error information
throw new RestartResponseAtInterceptPageException(AppErrorPage.class);
}
SSOWebSession session = (SSOWebSession) getSession();
if (!session.isAuthenticated()) {
// TODO : Something went wrong
}
}
@Override
protected void onBeforeRender() {
// logon successful. Continue to the original destination
continueToOriginalDestination();
// Ups, no original destination. Go to the home page
throw new RestartResponseException(getSession().getPageFactory().newPage(
getApplication().getHomePage()));
}
private void createOAuth2SecurityContext() throws OAuth2RServerException {
WebAppConfig cfg = getAppConfig();
Properties oauth2Config = new Properties();
PageParameters parameters = getPageParameters();
if (parameters == null)
throw new OAuth2RServerException("No page parameters available, required parameter " +ACCESS_TOKEN_PARAM);
String oauth2Token = parameters.get(ACCESS_TOKEN_PARAM).toString();
if (oauth2Token == null)
throw new OAuth2RServerException("No token found for parameter " +ACCESS_TOKEN_PARAM);
oauth2Config.setProperty(SecureAccessTokenResolverFactory.SHARED_SECRECT_PROPERTY, cfg.getSelfServicesSharedSecret());
oauth2Config.setProperty(SecureAccessTokenResolverFactory.TOKEN_VALIDITY_INTERVAL_PROPERTY, "30");
AccessTokenResolver tokenResolver = AccessTokenResolverFactory.newInstance(oauth2Config).newResolver();
if (logger.isDebugEnabled())
logger.debug("Using Access Token resolver : " + tokenResolver);
OAuth2AccessToken at = tokenResolver.resolve(oauth2Token);
SecurityContext ctx = new OAuth2SecurityContext(at);
SSOWebSession session = (SSOWebSession) getSession();
session.setSecurityContext(ctx);
}
}