package org.github.etcd.viewer.html.pages; import javax.inject.Inject; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.StatelessForm; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.github.etcd.service.ClusterManager; import org.github.etcd.service.EtcdCluster; import org.github.etcd.viewer.EtcdWebSession; public class SignInPanel extends GenericPanel<String> { private static final long serialVersionUID = 1L; private String username; private String password; @Inject private ClusterManager clusterManager; private IModel<String> registry = new LoadableDetachableModel<String>() { private static final long serialVersionUID = 1L; @Override protected String load() { return getPage().getPageParameters().get("cluster").toOptionalString(); } }; public SignInPanel(String id) { super(id); add(new AuthForm("authForm")); } @Override protected void onConfigure() { super.onConfigure(); if (registry.getObject() == null) { setVisible(false); } else { EtcdCluster cluster = clusterManager.getCluster(registry.getObject()); if (cluster == null) { setVisible(false); } else { if (!cluster.isRefreshed()) { try { clusterManager.refreshCluster(registry.getObject()); info("Successfully refreshed information for cluster: " + registry.getObject()); } catch (Exception e) { error("Failed to refresh information for cluster: " + registry.getObject()); } } setVisible(cluster.isRefreshed() && cluster.isAuthEnabled() && !EtcdWebSession.get().hasAuthentication(registry.getObject())); } } } @Override protected void onDetach() { super.onDetach(); registry.detach(); } public final class AuthForm extends StatelessForm<SignInPanel> { private static final long serialVersionUID = 1L; public AuthForm(String id) { super(id); setModel(new CompoundPropertyModel<SignInPanel>(SignInPanel.this)); add(new TextField<String>("username").setRequired(true)); add(new PasswordTextField("password").setRequired(true)); } @Override protected void onSubmit() { super.onSubmit(); EtcdWebSession.get().signIn(registry.getObject(), username, password); setResponsePage(getPage().getPageClass(), getPage().getPageParameters()); } } }