/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.web.cas; import java.net.HttpURLConnection; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; import org.geoserver.security.cas.CasAuthenticationFilterConfig; import org.geoserver.security.cas.GeoServerCasAuthenticationFilter; import org.geoserver.security.cas.GeoServerCasConstants; import org.geoserver.security.web.auth.PreAuthenticatedUserNameFilterPanel; import org.geoserver.web.GeoServerBasePage; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.HelpLink; import org.geotools.util.logging.Logging; /** * Configuration panel for {@link GeoServerCasAuthenticationFilter}. * * @author mcr */ public class CasAuthFilterPanel extends PreAuthenticatedUserNameFilterPanel<CasAuthenticationFilterConfig> { private static final long serialVersionUID = 1; static Logger LOGGER = Logging.getLogger("org.geoserver.security"); GeoServerDialog dialog; public CasAuthFilterPanel(String id, IModel<CasAuthenticationFilterConfig> model) { super(id, model); dialog = (GeoServerDialog) get("dialog"); add(new HelpLink("connectionParametersHelp",this).setDialog(dialog)); add(new HelpLink("singleSignOnParametersHelp",this).setDialog(dialog)); add(new HelpLink("singleSignOutParametersHelp",this).setDialog(dialog)); add(new HelpLink("proxyTicketParametersHelp",this).setDialog(dialog)); add(new TextField<String>("casServerUrlPrefix")); add(new CheckBox("sendRenew")); add(new TextField<String>("proxyCallbackUrlPrefix").setRequired(false)); add(new AjaxSubmitLink("casServerTest") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { testURL("casServerUrlPrefix",GeoServerCasConstants.LOGOUT_URI); info(new StringResourceModel("casConnectionSuccessful",CasAuthFilterPanel.this, null).getObject()); } catch(Exception e) { //getSession().error(e); error(e); target.add( ((GeoServerBasePage)getPage()).getFeedbackPanel() ); // to display message LOGGER.log(Level.WARNING, "CAS connection error ", e); } } }.setDefaultFormProcessing(false)); add(new AjaxSubmitLink("proxyCallbackTest") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { testURL("proxyCallbackUrlPrefix",null); info(new StringResourceModel("casProxyCallbackSuccessful",CasAuthFilterPanel.this, null).getObject()); } catch(Exception e) { error(e); target.add( ((GeoServerBasePage)getPage()).getFeedbackPanel() ); // to display message LOGGER.log(Level.WARNING, "CAS proxy callback error ", e); } } }.setDefaultFormProcessing(false)); CheckBox createSession = new CheckBox("singleSignOut"); add(createSession); add(new TextField<String>("urlInCasLogoutPage")); add(new AjaxSubmitLink("urlInCasLogoutPageTest") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { testURL("urlInCasLogoutPage",null); info(new StringResourceModel("urlInCasLogoutPageSuccessful",CasAuthFilterPanel.this, null).getObject()); } catch(Exception e) { error(e); target.add( ((GeoServerBasePage)getPage()).getFeedbackPanel() ); // to display message LOGGER.log(Level.WARNING, "CAs url in logout page error ", e); } } }.setDefaultFormProcessing(false)); } public void testURL(String wicketId, String uri) throws Exception { // since this wasn't a regular form submission, we need to manually update component // models ((FormComponent)get(wicketId)).processInput(); String urlString = get(wicketId).getDefaultModelObjectAsString(); if (uri!=null) urlString+=uri; URL url = new URL(urlString); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.getInputStream().close(); } }