Package opus.gwt.management.console.client

Source Code of opus.gwt.management.console.client.AuthenticationPanel

/*############################################################################
# Copyright 2010 North Carolina State University                             #
#                                                                            #
#   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 opus.gwt.management.console.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.Label;
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;

public class AuthenticationPanel extends Composite {
 
  private static AuthenticationUiBinder uiBinder = GWT.create(AuthenticationUiBinder.class);
  interface AuthenticationUiBinder extends UiBinder<Widget, AuthenticationPanel> {}
 
  private final String loginURL = "/accounts/login/";

  private boolean loggedIn;
  private boolean firstLoginAttempt;
  private ClientFactory clientFactory;
 
  @UiField Hidden csrftoken;
  @UiField Button loginButton;
  @UiField TextBox usernameTextBox;
  @UiField PasswordTextBox passwordTextBox;
  @UiField FormPanel authenticationForm;
  @UiField Label errorLabel;


  public AuthenticationPanel(ClientFactory clientFactory) {
    initWidget(uiBinder.createAndBindUi(this));
    this.clientFactory = clientFactory;
    loggedIn = false;
    firstLoginAttempt = true;
    if( !clientFactory.getJSVariableHandler().getUser().equals("") ){
      loginSucceeded();
    } else {
      RootPanel.get().add(this);
    }
  }
 
  private void onLogin(boolean success){
    if( !success ){
        if( firstLoginAttempt )
              firstLoginAttempt = false;
        loginFailed();
      } else {
        loginSucceeded();
      }
  }
 
  private void loginFailed(){
    loggedIn = false;
    usernameTextBox.setFocus(true);
    if( !firstLoginAttempt ){
      errorLabel.setVisible(true);
      usernameTextBox.setText("");
      passwordTextBox.setText("");
    }
  }
 
  private void loginSucceeded(){
    loggedIn = true;
    ManagementConsole mcc = new ManagementConsole(clientFactory);
  }
 
  private void submitLogin(){
    StringBuffer formBuilder = new StringBuffer();
    formBuilder.append("csrfmiddlewaretoken=");
    formBuilder.append( URL.encodeQueryString(clientFactory.getJSVariableHandler().getCSRFTokenURL()));
   
    formBuilder.append("&username=");
    formBuilder.append( URL.encodeQueryString(usernameTextBox.getText()));
    formBuilder.append("&password=");
    formBuilder.append( URL.encodeQueryString(passwordTextBox.getText()));
       
      RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, loginURL);
      builder.setHeader("Content-type", "application/x-www-form-urlencoded");
     
      try {
        Request request = builder.sendRequest(formBuilder.toString(), new RequestCallback() {
          public void onError(Request request, Throwable exception) {
            Window.alert(exception.getMessage());
          }

          public void onResponseReceived(Request request, Response response) {
            if( response.getText().contains("Please try again.") ){ 
              onLogin(false);
            } else {
              onLogin(true);
            }
          }});
      } catch (RequestException e) {
       
      }

  }
   
  @UiHandler("loginButton")
  void onLoginClick(ClickEvent event) {
    submitLogin();
  }

  @UiHandler("loginButton")
  void onKeyPressLogin(KeyPressEvent event){
    if(event.getCharCode() == KeyCodes.KEY_ENTER){
      loginButton.click();
    }
  }
 
  @UiHandler("usernameTextBox")
  void onKeyPressUsername(KeyPressEvent event){
    if(event.getCharCode() == KeyCodes.KEY_ENTER){
      loginButton.click();
    }
  }
 
  @UiHandler("passwordTextBox")
  void onKeyPressPassword(KeyPressEvent event){
    if(event.getCharCode() == KeyCodes.KEY_ENTER){
      loginButton.click();
    }
  }
 
  public boolean isLoggedIn(){
    return loggedIn;
  }
}
TOP

Related Classes of opus.gwt.management.console.client.AuthenticationPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.