/* (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.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.logging.Level;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.geoserver.security.jdbc.JDBCConnectAuthProvider;
import org.geoserver.security.jdbc.config.JDBCConnectAuthProviderConfig;
import org.geoserver.security.web.auth.AuthenticationProviderPanel;
import org.geoserver.security.web.usergroup.UserGroupServiceChoice;
/**
* Configuration panel for {@link JDBCConnectAuthProvider}.
*
* @author Justin Deoliveira, OpenGeo
*/
public class JDBCAuthProviderPanel extends AuthenticationProviderPanel<JDBCConnectAuthProviderConfig> {
private static final long serialVersionUID = 1L;
FeedbackPanel feedbackPanel;
String username,password;
public JDBCAuthProviderPanel(String id, IModel<JDBCConnectAuthProviderConfig> model) {
super(id, model);
add(new UserGroupServiceChoice("userGroupServiceName"));
add(new JDBCDriverChoice("driverClassName"));
add(new TextField<String>("connectURL"));
TextField<String> userNameField = new TextField<String>("username");
userNameField.setModel(new PropertyModel<String>(this, "username"));
userNameField.setRequired(false);
add(userNameField);
PasswordTextField pwdField = new PasswordTextField("password");
pwdField.setModel(new PropertyModel<String>(this, "password"));
pwdField.setRequired(false);
pwdField.setResetPassword(true);
add(pwdField);
add(new AjaxSubmitLink("cxTest") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
try {
test();
info(new StringResourceModel("connectionSuccessful",JDBCAuthProviderPanel.this, null).getObject());
}
catch(Exception e) {
error(e);
LOGGER.log(Level.WARNING, "Connection error", e);
}
finally {
target.add(feedbackPanel);
}
}
}.setDefaultFormProcessing(false));
add(feedbackPanel = new FeedbackPanel("feedback"));
feedbackPanel.setOutputMarkupId(true);
}
public void test() throws Exception {
//since this wasn't a regular form submission, we need to manually update component
// models
((FormComponent)get("driverClassName")).processInput();
((FormComponent)get("connectURL")).processInput();
((FormComponent)get("username")).processInput();
((FormComponent)get("password")).processInput();
//do the test
Class.forName(get("driverClassName").getDefaultModelObjectAsString());
Connection cx = DriverManager.getConnection(
get("connectURL").getDefaultModelObjectAsString(),
get("username").getDefaultModelObjectAsString(),
get("password").getDefaultModelObjectAsString());
cx.close();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}