/******************************************************************************* * * Copyright 2011-2014 Spiffy UI Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.spiffyui.spsample.client; import java.util.ArrayList; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import org.spiffyui.client.JSUtil; import org.spiffyui.client.rest.AuthUtil; import org.spiffyui.client.rest.RESTException; import org.spiffyui.client.rest.RESTility; import org.spiffyui.client.rest.RESTObjectCallBack; import org.spiffyui.client.widgets.FormFeedback; import org.spiffyui.client.widgets.button.FancyButton; import org.spiffyui.client.widgets.button.FancySaveButton; /** * This is the authentication test panel * */ public class AuthTestPanel extends HTMLPanel implements KeyUpHandler { private static final SPSampleStrings STRINGS = (SPSampleStrings) GWT.create(SPSampleStrings.class); private TextBox m_url; private FormFeedback m_urlFeedback; private TextBox m_tokenType; private FormFeedback m_tokenTypeFeedback; private TextBox m_username; private FormFeedback m_usernameFeedback; private TextBox m_password; private FormFeedback m_passwordFeedback; private FancyButton m_test; private HTML m_message; private ArrayList<FormFeedback> m_feedbacks = new ArrayList<FormFeedback>(); /** * Creates a new authentication test panel */ public AuthTestPanel() { super("div", STRINGS.AuthTestPanel_html()); getElement().setId("authTestPanel"); RootPanel.get("mainContent").add(this); setVisible(false); /* authentication server URL */ m_url = new TextBox(); m_url.addKeyUpHandler(this); m_url.getElement().setId("authURLTxt"); m_url.getElement().addClassName("wideTextField"); add(m_url, "authURL"); m_urlFeedback = new FormFeedback(); m_feedbacks.add(m_urlFeedback); add(m_urlFeedback, "authURLRow"); /* token type */ m_tokenType = new TextBox(); m_tokenType.addKeyUpHandler(this); m_tokenType.getElement().setId("authTokenTxt"); m_tokenType.setText("X-OPAQUE"); m_tokenType.getElement().addClassName("slimTextField"); add(m_tokenType, "authToken"); m_tokenTypeFeedback = new FormFeedback(); m_feedbacks.add(m_tokenTypeFeedback); m_tokenTypeFeedback.setStatus(FormFeedback.VALID); add(m_tokenTypeFeedback, "authTokenRow"); /* username */ m_username = new TextBox(); m_username.addKeyUpHandler(this); m_username.getElement().setId("authUsernameTxt"); m_username.getElement().addClassName("wideTextField"); add(m_username, "authUsername"); m_usernameFeedback = new FormFeedback(); m_feedbacks.add(m_usernameFeedback); add(m_usernameFeedback, "authUsernameRow"); /* password */ m_password = new PasswordTextBox(); m_password.addKeyUpHandler(this); m_password.getElement().setId("authPasswordTxt"); m_password.getElement().addClassName("wideTextField"); add(m_password, "authPassword"); m_passwordFeedback = new FormFeedback(); m_feedbacks.add(m_passwordFeedback); add(m_passwordFeedback, "authPasswordRow"); /* The big test button */ m_test = new FancySaveButton(Index.getStrings().test()); if (Index.isAppEngine()) { m_test.setEnabled(false); m_test.setText(Index.getStrings().installMessage()); } m_test.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { login(); } }); add(m_test, "authTestButtons"); updateFormStatus(null); m_message = new HTML(); m_message.getElement().setId("authTestLongMessageWidget"); add(m_message, "authTestLongMessage"); } @Override public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() != KeyCodes.KEY_TAB) { updateFormStatus((Widget) event.getSource()); } if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER && m_test.isEnabled()) { login(); } } private void updateFormStatus(Widget w) { if (w == m_url) { validateField(m_url, m_urlFeedback, Index.getStrings().invalidURL_ff_tt()); } else if (w == m_tokenType) { validateField(m_tokenType, m_tokenTypeFeedback, Index.getStrings().invalidTokenType_ff_tt()); } else if (w == m_username) { validateField(m_username, m_usernameFeedback, Index.getStrings().invalidUsername_ff_tt()); } else if (w == m_password) { validateField(m_password, m_passwordFeedback, Index.getStrings().invalidPassword_ff_tt()); } if (Index.isAppEngine()) { m_test.setEnabled(false); return; } /* * We only want to enable the save button if every field is valid */ for (FormFeedback feedback : m_feedbacks) { if (feedback.getStatus() != FormFeedback.VALID) { m_test.setEnabled(false); return; } } m_test.setEnabled(true); } private void validateField(TextBox tb, FormFeedback feedback, String error) { if (tb.getText().length() > 1) { feedback.setStatus(FormFeedback.VALID); feedback.setTitle(""); } else { feedback.setStatus(FormFeedback.WARNING); feedback.setTitle(error); } } private void appendMessage(String message) { m_message.setHTML(m_message.getHTML() + message); } private void login() { m_test.setInProgress(true); m_message.setHTML(""); RESTility.setTokenType(m_tokenType.getText().trim()); appendMessage(Index.getStrings().loggingIn(m_url.getText())); new AuthUtil().login(m_username.getText(), m_password.getText(), m_url.getText(), new RESTObjectCallBack<String>() { public void success(String info) { appendMessage("<br /><span class=\"testSuccess\">" + Index.getStrings().loggedIn(info) + "</span><br />"); logout(); } public void error(String message) { m_test.setInProgress(false); appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().loginFail1(message) + "</span><br />"); } public void error(RESTException e) { m_test.setInProgress(false); appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().loginFail2(e.getCode(), e.getReason()) + "</span><br />"); } }); } private void logout() { appendMessage("<br />" + Index.getStrings().logoutAttempt()); new AuthUtil().logout(new RESTObjectCallBack<String>() { public void success(String info) { appendMessage("<br /><span class=\"testSuccess\">" + Index.getStrings().logoutSuccess(info) + "</span><br />"); JSUtil.hide("#header_actionsBlock", "fast"); m_test.setInProgress(false); } public void error(String message) { m_test.setInProgress(false); appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().logoutFail1(message) + "</span><br />"); } public void error(RESTException e) { m_test.setInProgress(false); appendMessage("<br /><span class=\"testFail\">" + Index.getStrings().logoutFail2(e.getCode(), e.getReason()) + "</span><br />"); } }); } }