Package org.gudy.azureus2.ui.swt.auth

Source Code of org.gudy.azureus2.ui.swt.auth.CryptoWindow

/*
* File    : AuthenticatorWindow.java
* Created : 25-Nov-2003
* By      : parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.gudy.azureus2.ui.swt.auth;

/**
* @author parg
*
*/

import java.util.Arrays;

import org.eclipse.swt.*;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.ui.swt.*;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.mainwindow.SWTThread;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;

import com.aelitis.azureus.core.security.CryptoManagerFactory;
import com.aelitis.azureus.core.security.CryptoManagerPasswordHandler;

public class
CryptoWindow
  implements CryptoManagerPasswordHandler
  private static final int DAY = 60*60*24;
 
  public
  CryptoWindow()
  {
    CryptoManagerFactory.getSingleton().addPasswordHandler( this );
  }
 
  public int
  getHandlerType()
  {
    return( HANDLER_TYPE_USER );
  }
 
  public passwordDetails
  getPassword(
    final int     handler_type,
    final int     action_type,
    final boolean  last_pw_incorrect,
    final String   reason )
  {
    final Display  display = SWTThread.getInstance().getDisplay();
   
    if ( display.isDisposed()){
     
      return( null );
    }
   
    final cryptoDialog[]  dialog = new cryptoDialog[1];
   
    final AESemaphore  sem = new AESemaphore("CryptoWindowSem");

    try{
      if ( display.getThread() == Thread.currentThread()){
       
        dialog[0] = new cryptoDialog( sem, display, handler_type, action_type, last_pw_incorrect, reason );
       
        while ( !( display.isDisposed() || sem.isReleasedForever())){
         
          if ( !display.readAndDispatch()){
           
            display.sleep();
          }
        }
       
        if ( display.isDisposed()){
         
          return( null );
        }
      }else{
        display.asyncExec(
            new Runnable()
            {
              public void
              run()
              {
                dialog[0] = new cryptoDialog( sem, display, handler_type, action_type, last_pw_incorrect, reason );
              }
            });
      }
    }catch( Throwable e ){
     
      Debug.printStackTrace( e );
     
      return( null );
    }
     
    sem.reserve();
     
    final char[]  pw      = dialog[0].getPassword();
    final int    persist_for  = dialog[0].getPersistForSeconds();
   
    if ( pw == null ){
     
      return( null );
    }
   
    return(
      new passwordDetails()
      {
        public char[]
          getPassword()
        {
          return( pw );
        }

          public int
          getPersistForSeconds()
          {
            return( persist_for );
          }
      });
  }
 
  public void
  passwordOK(
    int         handler_type,
    passwordDetails   details)
  {   
  }
 
  protected class
  cryptoDialog
  {
    private AESemaphore  sem;
    private Shell    shell;
   
    private char[]    password;
    private char[]    password2;
    private  int      persist_for_secs;
   
    private boolean    verify_password;
   
    protected
    cryptoDialog(
      AESemaphore    _sem,
      Display      display,
      int        handler_type,
      int        action_type,
      boolean      last_pw_incorrect,
      String      reason )
    {
      sem  = _sem;
     
      if ( display.isDisposed()){
       
        sem.releaseForever();
       
        return;
      }
     
      shell = ShellFactory.createMainShell(SWT.DIALOG_TRIM
          | SWT.APPLICATION_MODAL);
    
       Utils.setShellIcon(shell);
      
       Messages.setLanguageText(shell, "security.crypto.title");
       
       GridLayout layout = new GridLayout();
       layout.numColumns = 3;
           
       shell.setLayout (layout);
     
       GridData gridData;
     
       if ( action_type == CryptoManagerPasswordHandler.ACTION_ENCRYPT ){
      
        Label reason_label = new Label(shell,SWT.WRAP);
        Messages.setLanguageText(reason_label, "security.crypto.encrypt");
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 3;
        gridData.widthHint = 300;
        reason_label.setLayoutData(gridData);
       
       }else{
      
        Label decrypt_label = new Label(shell,SWT.WRAP);
        Messages.setLanguageText(decrypt_label, "security.crypto.decrypt");
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 3;
        gridData.widthHint = 300;
        decrypt_label.setLayoutData(gridData);

            // reason
           
        Label reason_label = new Label(shell,SWT.NULL);
        Messages.setLanguageText(reason_label, "security.crypto.reason");
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 1;
        reason_label.setLayoutData(gridData);
       
        Label reason_value = new Label(shell,SWT.NULL);
        reason_value.setText(reason.replaceAll("&", "&&"));
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 2;
        reason_value.setLayoutData(gridData);
       
        // new Label(shell,SWT.NULL);
       
        if ( last_pw_incorrect ){
         
          Label pw_wrong_label = new Label(shell,SWT.WRAP);
          Messages.setLanguageText(pw_wrong_label, "security.crypto.badpw");
          gridData = new GridData(GridData.FILL_BOTH);
          gridData.horizontalSpan = 3;
          pw_wrong_label.setLayoutData(gridData);
          pw_wrong_label.setForeground( Colors.red );
        }
       }
      
        // password
         
      Label password_label = new Label(shell,SWT.NULL);
      Messages.setLanguageText(password_label, "security.crypto.password");
      gridData = new GridData(GridData.FILL_BOTH);
      gridData.horizontalSpan = 1;
      password_label.setLayoutData(gridData);
     
      final Text password_value = new Text(shell,SWT.BORDER);
      password_value.setEchoChar('*');
      password_value.setText("");
      gridData = new GridData(GridData.FILL_BOTH);
      gridData.horizontalSpan = 1;
      password_value.setLayoutData(gridData);

      password_value.addListener(SWT.Modify, new Listener() {
         public void handleEvent(Event event) {
         password = password_value.getText().toCharArray();
         }});

      new Label(shell,SWT.NULL);
     
       if ( action_type == CryptoManagerPasswordHandler.ACTION_ENCRYPT ){

           // password

         verify_password = true;
        
        Label password2_label = new Label(shell,SWT.NULL);
        Messages.setLanguageText(password2_label, "security.crypto.password2");
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 1;
        password2_label.setLayoutData(gridData);
       
        final Text password2_value = new Text(shell,SWT.BORDER);
        password2_value.setEchoChar('*');
        password2_value.setText("");
        gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalSpan = 1;
        password2_value.setLayoutData(gridData);

        password2_value.addListener(SWT.Modify, new Listener() {
           public void handleEvent(Event event) {
           password2 = password2_value.getText().toCharArray();
           }});

        new Label(shell,SWT.NULL)
       }
      
        // persist
     
      Label strength_label = new Label(shell,SWT.NULL);
      Messages.setLanguageText(strength_label, "security.crypto.persist_for");
      gridData = new GridData(GridData.FILL_BOTH);
      gridData.horizontalSpan = 1;
      strength_label.setLayoutData(gridData);
     
      String[]     duration_keys = { "dont_save", "session", "day", "week", "30days", "forever" };
      final int[]    duration_secs = { 0,           -1,        DAY,   DAY*7,  DAY*30,   Integer.MAX_VALUE };
     
      final Combo durations_combo = new Combo(shell, SWT.SINGLE | SWT.READ_ONLY);
        
      for (int i=0;i<duration_keys.length;i++){
       
        String text = MessageText.getString( "security.crypto.persist_for." + duration_keys[i] );
       
        durations_combo.add( text );
      }
           
      durations_combo.select(4);
     
      persist_for_secs  = duration_secs[4];
     
      durations_combo.addListener(
        SWT.Selection,
        new Listener()
        {
          public void
          handleEvent(
            Event e )
          {
            persist_for_secs  = duration_secs[ durations_combo.getSelectionIndex()];
             }
        });
     
      gridData = new GridData(GridData.FILL_BOTH);
      gridData.horizontalSpan = 1;
      durations_combo.setLayoutData(gridData);
     
      new Label(shell,SWT.NULL);
     
        // wiki
           
      final Label linkLabel = new Label(shell, SWT.NULL);
      linkLabel.setText(MessageText.getString("ConfigView.label.please.visit.here"));
      linkLabel.setData("http://wiki.vuze.com/w/Public_Private_Keys");
      linkLabel.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
      linkLabel.setForeground(Colors.blue);
      gridData = new GridData();
      gridData.horizontalSpan = 3;
      linkLabel.setLayoutData(gridData);
      linkLabel.addMouseListener(new MouseAdapter() {
        public void mouseDoubleClick(MouseEvent arg0) {
          Utils.launch((String) ((Label) arg0.widget).getData());
        }

        public void mouseDown(MouseEvent arg0) {
          Utils.launch((String) ((Label) arg0.widget).getData());
        }
      });
        // line
     
      Label labelSeparator = new Label(shell,SWT.SEPARATOR | SWT.HORIZONTAL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      gridData.horizontalSpan = 3;
      labelSeparator.setLayoutData(gridData);
     
        // buttons
       
      new Label(shell,SWT.NULL);

      Button bOk = new Button(shell,SWT.PUSH);
       Messages.setLanguageText(bOk, "Button.ok");
       gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END | GridData.HORIZONTAL_ALIGN_FILL);
       gridData.grabExcessHorizontalSpace = true;
       gridData.widthHint = 70;
       bOk.setLayoutData(gridData);
       bOk.addListener(SWT.Selection,new Listener() {
          public void handleEvent(Event e) {
           close(true);
           }
       });
     
       Button bCancel = new Button(shell,SWT.PUSH);
       Messages.setLanguageText(bCancel, "Button.cancel");
       gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
       gridData.grabExcessHorizontalSpace = false;
       gridData.widthHint = 70;
       bCancel.setLayoutData(gridData);   
       bCancel.addListener(SWT.Selection,new Listener() {
         public void handleEvent(Event e) {
           close(false);
           }
       });
     
      shell.setDefaultButton( bOk );
     
      shell.addListener(SWT.Traverse, new Listener() { 
        public void handleEvent(Event e) {
          if ( e.character == SWT.ESC){
            close( false );
          }
        }
      });
   
       shell.pack ();
             
      Utils.centreWindow( shell );
     
      shell.open();
    }
  
    protected void
    close(
      boolean    ok )
     {
      try{
         if ( ok ){
          
           if ( password == null ){
            
             password = new char[0];
           }
          
           if ( password2 == null ){
            
             password2 = new char[0];
           }

           if ( verify_password ){
            
             if ( !Arrays.equals( password, password2 )){
              
               MessageBox mb = new MessageBox( shell,SWT.ICON_ERROR | SWT.OK );
              
               mb.setText(MessageText.getString("security.crypto.password.mismatch.title"));
            
               mb.setMessageMessageText.getString("security.crypto.password.mismatch"));
              
               mb.open();
              
               return;
             }
           }
         }else{
          
           password  = null;
         }
        
         shell.dispose();
        
      }finally{
       
        sem.releaseForever();
      }
     }
    
     protected char[]
     getPassword()
     {
       return( password );
     }

     protected int
     getPersistForSeconds()
     {
       return( persist_for_secs );
     }
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.auth.CryptoWindow

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.
nalytics.com/analytics.js','ga'); ga('create', 'UA-20639858-1', 'auto'); ga('send', 'pageview');