source: trunk/seguranca/ExpressoCertLogin/src/LoginApplet.java @ 1035

Revision 1035, 26.2 KB checked in by rafaelraymundo, 15 years ago (diff)

Ticket #558 - Adicionada funcionalidade de assinatura e criptografia de e-mails.

Line 
1
2import java.awt.Frame;
3import java.io.IOException;
4import java.net.MalformedURLException;
5import java.net.URL;
6import java.security.GeneralSecurityException;
7import java.security.ProviderException;
8
9import javax.net.ssl.SSLHandshakeException;
10import javax.swing.JApplet;
11import javax.swing.JOptionPane;
12import javax.swing.SwingUtilities;
13import org.apache.commons.httpclient.HttpException;
14
15import netscape.javascript.JSObject;
16
17import br.gov.serpro.cert.DigitalCertificate;
18import br.gov.serpro.setup.Setup;
19import br.gov.serpro.ui.DialogBuilder;
20
21/**
22 * GUI que realiza o login com certificados A1 e A3 ou login com usuário e senha no expresso.
23 * Esta classe estende a classe JApplet
24 * @author Mário César Kolling - mario.kolling@serpro.gov.br
25 */
26public class LoginApplet extends JApplet{
27
28        /**
29         * Valor gerado aleatoriamente
30         */
31
32        //TODO: Alterar a cor e fonte dos labels e das caixas de texto e senha.
33        private static final long serialVersionUID = -6204158613173951516L;
34
35        //private PinCodePanel pinPanel;
36        //private LoginPanel loginPanel;
37        //private PinCodePanel alreadyLoadedPanel;
38        //private int useCertificate = DigitalCertificate.KEYSTORE_DETECTED;
39//      private String uid;
40        private DigitalCertificate dc;
41    private Setup setup;
42
43        /* (non-Javadoc)
44         * @see java.applet.Applet#init()
45         */
46        public void init() {
47                super.init();
48                this.setSize(0, 0);
49        this.setup = new Setup(this);
50        this.setup.addLanguageResource("ExpressoCertLoginMessages");
51        }
52
53        /* (non-Javadoc)
54         * @see java.applet.Applet#start()
55         */
56        @Override
57        public void start() {
58                super.start();
59
60                int useCertificate = DigitalCertificate.KEYSTORE_NOT_DETECTED;
61                boolean tryAgain = true;
62
63                do
64                {
65
66                        // Cria uma instância de DigitalCertificate e a inicializa
67                        this.dc = new DigitalCertificate(this.getDocumentBase(), setup);
68                        useCertificate = dc.init();
69                        String[] returnCode = null;
70
71                        try {
72                                switch (useCertificate){
73                                        case DigitalCertificate.KEYSTORE_DETECTED:
74                                                // Mostra PinNeedeDialog.
75                                                //tryAgain = false;
76                                                String pin = DialogBuilder.showPinDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), this.setup);
77                                                if (pin != null) {
78                                                        dc.openKeyStore(pin.toCharArray());
79                                                        returnCode = dc.getCredentials(pin);
80
81                                                        // se chegou aqui, keystore foi acessada e as credenciais do usuário foram recuperadas
82                                                        //tryAgain = false;
83                                                        assert (returnCode != null): "Valor de returnCode não pode ser nulo";
84
85                                                        //this.dc.destroy();
86
87                                                        // Faz o login
88
89                            if (setup.getParameter("debug").equalsIgnoreCase("true")) {
90                                System.out.println("Código de retorno: " + returnCode[0].trim());
91                            }
92
93                                                        if (Integer.parseInt(returnCode[0].trim()) == 0){
94
95                                                                tryAgain = false;
96                                                                // Pega usuário e senha de credentials[1] e credentials[2], respectivamente
97                                                                // adiciona na página e faz o submit.
98                                                                JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
99                                                                JSObject loginForm =  (JSObject) document.getMember("flogin");
100                                                                JSObject loginField = (JSObject) loginForm.getMember("user");
101                                                                loginField.setMember("value", returnCode[1].trim());
102
103                                                                JSObject passwdField = (JSObject) loginForm.getMember("passwd");
104                                                                passwdField.setMember("value", returnCode[2].trim());
105
106                                                                loginForm.call("submit", null);
107                                                                Thread.yield();
108
109                                                        }
110                                                        else if (Integer.parseInt(returnCode[0].trim()) == 6){
111
112                                                                tryAgain = false;
113
114                                                                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
115                                    System.out.println("Mensagem de retorno: " + returnCode[1].trim());
116                                }
117
118                                                                //JOptionPane.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), credentials[1]);
119                                                                DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), returnCode[1].trim(), this.setup);
120
121
122
123                                                                String redirect = this.getCodeBase().toExternalForm() + "login.php?cd=98&ts=202";
124                                                                try {
125                                                                        this.getAppletContext().showDocument(new URL(redirect));
126                                                                } catch (MalformedURLException e) {
127                                                                        // TODO Bloco catch gerado automaticamente
128                                    if (this.setup.getParameter("debug").equalsIgnoreCase("true")){
129                                        e.printStackTrace();
130                                    }
131                                                                }
132                                                        }
133                                                        else {
134                                                                tryAgain = true;
135                                                                dc.destroy();
136                                                                System.gc();
137
138                                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
139                                    System.out.println("Mensagem de retorno: " + returnCode[1].trim());
140                                }
141
142                                                                // Mostra mensagem de erro para o usuário
143                                                                //JOptionPane.showMessageDialog(this, credentials[1]);
144                                                                DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), returnCode[1].trim(), this.setup);
145                                                                Thread.yield();
146                                                        }
147
148                                                }
149                                                else {
150
151                                                        tryAgain = false;
152                                                        String redirect = this.getCodeBase().toExternalForm() + "login.php";
153                                                        try {
154                                                                this.getAppletContext().showDocument(new URL(redirect));
155                                                        } catch (MalformedURLException e) {
156                                                                // TODO Bloco catch gerado automaticamente
157                                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
158                                    e.printStackTrace();
159                                }
160                                                        }
161                                                }
162
163                                                break;
164                                                /*
165                                        case DigitalCertificate.KEYSTORE_ALREADY_LOADED:
166                                                // Mostra PinNotNeededDialog
167                                                tryAgain = false;
168
169                                                //Verifica na página se operação anterior foi um logout
170                                                JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
171                                                JSObject loginForm =  (JSObject) document.getMember("flogin");
172                                                JSObject loginField = (JSObject) loginForm.getMember("cd");
173                                                String cdValue = (String) loginField.getMember("value");
174
175                                                int cd = 0;
176                                                if (cdValue.length() != 0){
177                                                        cd = Integer.parseInt(cdValue);
178                                                }
179
180                                                // Se não foi logout prossegue com o login, senão pára tudo
181                                                if (cd != 1 && cd != 5){
182
183                                                        DialogBuilder.showPinNotNeededDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this));
184                                                        dc.openKeyStore(null);
185                                                        returnCode = dc.getCredentials("");
186
187                                                        // se chegou aqui, keystore foi acessada e as credenciais do usuário foram recuperadas
188                                                        assert (returnCode != null): "Valor de returnCode não pode ser nulo";
189
190                                                        // Faz o login
191                                                        doLogin(returnCode);
192                                                }
193                                                else if (cd == 5){
194                                                        JOptionPane.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
195                                                                        "Não foi possível realizar o Logon com certificado!");
196                                                        // Redireciona para a tela de login
197                                                        String redirect = this.getCodeBase().toExternalForm() + "login.php";
198                                                        try {
199                                                                this.getAppletContext().showDocument(new URL(redirect));
200                                                        } catch (MalformedURLException e) {
201                                                                // TODO Bloco catch gerado automaticamente
202                                                                e.printStackTrace();
203                                                        }
204
205                                                }
206
207                                                //DialogBuilder.showPinNotNeededDialog(findParentframe());
208
209                                                break;
210                                                */
211                                        default:
212
213                                                // Mostra Diálogo dizendo que token não foi encontrado
214                                                // ou repositório de chaves públicas não foi configurado.
215                                                // Tentar carregar token/keystore novamente? / Logon sem certificado digital?
216
217                                                tryAgain = false;
218                        if (setup.getParameter("debug").equalsIgnoreCase("true")) {
219                            System.out.println("não achou token");
220                        }
221                                               
222                                                dc.destroy();
223                                                System.gc();
224
225                                                String redirect = this.getCodeBase().toExternalForm() + "login.php";
226                                                try {
227                                                        this.getAppletContext().showDocument(new URL(redirect));
228                                                } catch (MalformedURLException e) {
229                                                        // TODO Bloco catch gerado automaticamente
230                            if (setup.getParameter("debug").equalsIgnoreCase("true")) {
231                                e.printStackTrace();
232                            }
233                                                }
234
235                                                //int resultado = JOptionPane.showConfirmDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
236                                                //      "Deseja tentar novamente?",
237                                                //      "Token não foi encontrado!",
238                                                //      JOptionPane.OK_CANCEL_OPTION,
239                                                //      JOptionPane.QUESTION_MESSAGE);
240
241                                                //if (resultado == JOptionPane.OK_OPTION){
242                                                //      tryAgain = true;
243                                                //}
244                                                //else {
245
246                                                //}
247
248                                                // if () {
249                                                //      tryAgain = true;
250                                                //}
251                                }
252
253                        }
254                        catch (SSLHandshakeException e){
255                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
256                    e.printStackTrace();
257                }
258                                dc.destroy();
259                                System.gc();
260                                //JOptionPane.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), "Não foi possível validar o certificado do servidor!");
261                                //DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
262                                //              "Não foi possível validar o certificado do servidor!", this.setup);
263                DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
264                                                this.setup.getLang("ExpressoCertLoginMessages", "LoginApplet001"), this.setup);
265
266                                Thread.yield();
267
268                                tryAgain = true;
269                        }
270                        catch (HttpException e) {
271                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
272                    e.printStackTrace();
273                }
274                               
275                                tryAgain = true;
276                                Thread.yield();
277                        }
278                        catch (GeneralSecurityException e){
279                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
280                    e.printStackTrace();
281                }
282                               
283                                //DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
284                                //              "Algum erro ocorreu ao realizar o logon!", this.setup);
285                DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
286                                                this.setup.getLang("ExpressoCertLoginMessages", "LoginApplet002"), this.setup);
287
288                                Thread.yield();
289                                tryAgain = true;
290                        }
291                        catch (IOException e) {
292                                dc.destroy();
293                                System.gc();
294
295                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
296                    e.printStackTrace();
297                }
298                //System.out.println("Classe que originou o erro de IO: " + e.getClass().getCanonicalName());;
299
300                Throwable cause = null;
301                if ((cause = e.getCause()) != null){
302                    if (cause instanceof javax.security.auth.login.LoginException){
303                        //DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), "PIN incorreto!", this.setup);
304                        DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), this.setup.getLang("ExpressoCertLoginMessages", "LoginApplet003"), this.setup);
305                    } else {
306                        if (setup.getParameter("debug").equalsIgnoreCase("true")) {
307                            System.out.println("Exception lançada: " + cause.getClass().getCanonicalName());
308                        }
309                    }
310                }
311                else {
312                    if (e instanceof java.net.ConnectException){
313                        //DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
314                        //        "Não foi possível fazer a conexão com o servidor do Expresso.\n" +
315                        //        "Verifique suas configurações de rede/proxy.", this.setup);
316                        DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
317                                this.setup.getLang("ExpressoCertLoginMessages", "LoginApplet004"), this.setup);
318                    } else {
319                        if (setup.getParameter("debug").equalsIgnoreCase("true")) {
320                            System.out.println("Exception lançada: " + e.getClass().getCanonicalName());
321                        }
322                    }
323                }
324
325                                Thread.yield();
326                tryAgain = true;
327                        }
328                        catch (ProviderException e) {
329                                // Tentar novamente / cancel
330                                //JOptionPane.showMessageDialog(this, "Token foi removido! Favor inserir seu token");
331
332                                dc.destroy();
333                                System.gc();
334
335                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
336                    e.printStackTrace();
337                }
338
339/*
340                                JOptionPane optionPane = new JOptionPane("Token foi removido\nDeseja tentar carregá-lo novamente?",
341                                                JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
342                                JDialog dialog = new JDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), true);
343                                dialog.setContentPane(optionPane);
344                                //Posicionando no centro da tela.
345
346                                Dimension mySize = dialog.getSize();
347                                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
348                                dialog.setLocation(screenSize.width/2 - (mySize.width/2), screenSize.height/2 - (mySize.height/2));
349                                dialog.setVisible(true);
350
351                                Object selectedValue = optionPane.getValue();
352
353                                if (selectedValue == null){
354
355                                }
356                                else {
357                                        if (selectedValue instanceof Integer){
358                                                Integer
359                                        }
360                                }
361*/
362
363                                int resultado = DialogBuilder.showConfirmDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
364                                                //"Deseja tentar carregá-lo novamente?",
365                        this.setup.getLang("ExpressoCertLoginMessages", "LoginApplet005"),
366                                                JOptionPane.QUESTION_MESSAGE,
367                                                JOptionPane.OK_CANCEL_OPTION, this.setup);
368
369/*                              int resultado = JOptionPane.showConfirmDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this),
370                                                "Deseja tentar carregá-lo novamente?",
371                                                "Token foi removido!",
372                                                JOptionPane.OK_CANCEL_OPTION,
373                                                JOptionPane.QUESTION_MESSAGE);
374*/
375
376                                if (resultado == JOptionPane.OK_OPTION){
377                                        tryAgain = true;
378                                }
379                                else {
380                                        tryAgain = false;
381                                }
382
383                                Thread.yield();
384                        }
385
386                }
387                while (tryAgain);
388
389                // chama o método que cria a interface na thread de lançamento de eventos (Event Dispatching Thread).
390                //try
391                //{
392                //      SwingUtilities.invokeAndWait(new Runnable(){
393
394                                /* (non-Javadoc)
395                                 * @see java.lang.Runnable#run()
396                                 */
397                //              public void run() {
398                //                      createGUI();
399                //              }
400
401                //      });
402                //} catch (Exception e){
403                //      System.out.println("Método createGUI não pôde ser carregado: " + e.getMessage());
404                //}
405
406        }
407
408        /*
409
410        public void doLogin(String[] credentials){
411
412                if (Integer.valueOf(credentials[0]) == 0){
413
414                        // Pega usuário e senha de credentials[1] e credentials[2], respectivamente
415                        // adiciona na página e faz o submit.
416                        JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
417                        JSObject loginForm =  (JSObject) document.getMember("flogin");
418                        JSObject loginField = (JSObject) loginForm.getMember("user");
419                        loginField.setMember("value", credentials[1]);
420
421                        JSObject passwdField = (JSObject) loginForm.getMember("passwd");
422                        passwdField.setMember("value", credentials[2]);
423
424                        loginForm.call("submit", null);
425
426                }
427                else if (Integer.valueOf(credentials[0]) == 6){
428
429                        //JOptionPane.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), credentials[1]);
430                        DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), credentials[1]);
431                        String redirect = this.getCodeBase().toExternalForm() + "login.php?cd=98&ts=202";
432                        try {
433                                this.getAppletContext().showDocument(new URL(redirect));
434                        } catch (MalformedURLException e) {
435                                // TODO Bloco catch gerado automaticamente
436                                e.printStackTrace();
437                        }
438                }
439                else {
440                        // Mostra mensagem de erro para o usuário
441                        //JOptionPane.showMessageDialog(this, credentials[1]);
442                        DialogBuilder.showMessageDialog((Frame) SwingUtilities.getAncestorOfClass(Frame.class, this), credentials[1]);
443                }
444
445        }
446
447        */
448
449        /**
450         * Destrói a Applet, executando códigos para desregistrar tokens, keystores, etc.
451         */
452        @Override
453        public void stop() {
454                //super.destroy();
455        if (setup.getParameter("debug").equalsIgnoreCase("true")) {
456            System.out.println("Finalizando Applet de Login!");
457        }
458               
459                this.dc.destroy();
460                this.dc = null;
461                //Component[] components = this.getComponents();
462                //for (Component component : components){
463                //      this.remove(component);
464                //      component = null;
465                //}
466                System.gc();
467        }
468
469        /**
470         * Cria a interface e seleciona o Painel que será exibido de acordo com o parâmetro useCertificate
471         */
472        /*
473        private void createGUI(){
474
475                this.setLayout(new FlowLayout());
476                this.getContentPane().setBackground(Color.WHITE);
477
478                JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
479                JSObject loginForm =  (JSObject) document.getMember("flogin");
480                JSObject loginField = (JSObject) loginForm.getMember("user");
481
482                uid = loginField.getMember("value").toString();
483
484                pinPanel = new PinCodePanel(uid, true); // mostra pinCodeField
485                alreadyLoadedPanel = new PinCodePanel(uid, false); // não mostra pinCodeField
486                loginPanel = new LoginPanel(uid);
487
488                switch (useCertificate){
489                        case DigitalCertificate.KEYSTORE_NOT_DETECTED:
490                                // Mostra interface de login com usuário e senha
491                                this.getContentPane().add(loginPanel);
492                                break;
493                        case DigitalCertificate.KEYSTORE_ALREADY_LOADED:
494                                // Mostra interface de login sem pedir o pin
495                                this.getContentPane().add(alreadyLoadedPanel);
496                                break;
497                        default:
498                                // Mostra interface de login pedindo o pin
499                                this.getContentPane().add(pinPanel);
500
501                }
502
503                this.setVisible(true);
504
505        }
506        */
507
508        /**
509         * Ação executada quando o Botão cancel de PinPanel for pressionado
510         *
511         */
512        /*
513        private void cancelButtonActionPerformed(){
514
515                pinPanel.setVisible(false);
516                this.remove(pinPanel);
517                this.add(loginPanel);
518                loginPanel.setVisible(true);
519                this.setVisible(true);
520                pinPanel.clearPasswordField();
521
522        }
523        */
524
525        /**
526         * Ação realizada quando o usuário pressiona o botão Ok ou Prossegir
527         * nas telas de login com pin ou sem o pin, respectivamente
528         *
529         */
530        /*
531        private void okButtonActionPerformed(){
532                // atribui o valor da senha para o atributo Pin
533                char[] pin = pinPanel.getPin();
534                String[] returnCode = null;
535
536                // abre a keystore com o pin e recupera as credenciais do usuário
537                try {
538                        dc.openKeyStore(pin);
539
540                        returnCode = dc.getCredentials(new String(pin));
541
542                        assert (returnCode != null): "Valor de returnCode não pode ser nulo";
543
544                        if (Integer.valueOf(returnCode[0]) == 0){
545
546                                // Pega usuário e senha de returnCode[1] e returnCode[2], respectivamente
547                                // adiciona na página e faz o submit.
548                                JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
549                                JSObject loginForm =  (JSObject) document.getMember("flogin");
550                                JSObject loginField = (JSObject) loginForm.getMember("user");
551                                loginField.setMember("value", returnCode[1]);
552
553                                JSObject passwdField = (JSObject) loginForm.getMember("passwd");
554                                passwdField.setMember("value", returnCode[2]);
555
556                                this.pinPanel.clearPasswordField();
557                                loginForm.call("submit", null);
558
559                        }
560                        else {
561                                // Mostra mensagem de erro para o usuário
562                                showGetCredentialsError(returnCode[1]);
563                        }
564
565                } catch (SSLHandshakeException e){
566                        e.printStackTrace();
567                        JOptionPane.showMessageDialog(this, "Não foi possível validar o certificado do servidor!");
568                } catch (HttpException e) {
569                        e.printStackTrace();
570                } catch (GeneralSecurityException e){
571                        e.printStackTrace();
572                } catch (IOException e) {
573                        JOptionPane.showMessageDialog(this, "Senha não confere!");
574                } catch (ProviderException e) {
575                        JOptionPane.showMessageDialog(this, "Token foi removido!");
576                } finally {
577                        this.pinPanel.clearPasswordField();
578                }
579
580        }
581        */
582
583        /**
584         * Ação realizada quando o usuário pressiona o botão acessar na
585         * tela de login com usuário e senha
586         *
587         */
588        /*
589        private void acessarButtonActionPerformed(){
590
591                // Pega usuário e senha dos campos tfUsername e pfPasswd, respectivamente,
592                // adiciona na página e faz o submit.
593                String username = this.loginPanel.tfUsername.getText();
594                String passwd = String.valueOf(this.loginPanel.pfPasswd.getPassword());
595
596                JSObject document = (JSObject) JSObject.getWindow( this ).getMember("document");
597                JSObject loginForm =  (JSObject) document.getMember("flogin");
598                JSObject loginField = (JSObject) loginForm.getMember("user");
599                loginField.setMember("value", username);
600
601                JSObject passwdField = (JSObject) loginForm.getMember("passwd");
602                passwdField.setMember("value", passwd);
603
604                this.loginPanel.clearPasswordField();
605                loginForm.call("submit", null);
606
607        }
608        */
609
610        /**
611         * Mostra mensagem "Campo PIN não foi preenchido!" quando o botão Ok for pressionado
612         *  e o campo pin estiver vazio
613         *
614         */
615        /*
616        private void okButtonPinEmpty(){
617                JOptionPane.showMessageDialog(this, "Campo PIN não foi preenchido!");
618        }
619        */
620
621        /**
622         * Mostra mensagem de erro recebida de dc.getCredentials();
623         * TODO: Mudar este método para ser mais genérico... Todas as mensagens de erro devem ser passadas para este
624         *              método para serem exibidas.
625         * @param errorMsg Mensagem de erro que deve ser exibida
626         */
627        /*
628        private void showGetCredentialsError(String errorMsg){
629                JOptionPane.showMessageDialog(this, errorMsg);
630        }
631
632        private final class PinCodePanel extends JPanel  implements ActionListener{
633*/
634                /**
635                 * Gerado automaticamente
636                 */
637        /*
638                private static final long serialVersionUID = 1003857725229120014L;
639
640                JPanel pNorte, pCentro, pSul;
641                JButton btOk, btCancel;
642                JLabel lTitle, lPin;
643                JPasswordField pfPin;
644
645                // TODO: Implementar um construtor default (sem parâmetros);
646                public PinCodePanel(String uid, boolean showPinField){
647
648                        this.setLayout(new BorderLayout());
649                        Dimension panelsDimension = new Dimension(300, 42);
650                        Dimension fieldsDimension = new Dimension(80, 20);
651
652                        pNorte = new JPanel(new FlowLayout(FlowLayout.CENTER));
653                        pNorte.setBackground(Color.WHITE);
654                        pNorte.setPreferredSize(panelsDimension);
655
656                        pCentro = new JPanel(new FlowLayout(FlowLayout.CENTER));
657                        pCentro.setBackground(Color.WHITE);
658                        pCentro.setPreferredSize(panelsDimension);
659
660                        pSul = new JPanel(new FlowLayout(FlowLayout.CENTER));
661                        pSul.setBackground(Color.WHITE);
662                        pSul.setPreferredSize(panelsDimension);
663
664                        JPanel pTitle = new JPanel(new GridLayout(2, 0));
665                        pTitle.setBackground(Color.WHITE);
666                        JLabel lTitle2 = null;
667
668
669                        if (showPinField){
670                                lTitle = new JLabel("Entre com o seu PIN:");
671                                lTitle.setHorizontalTextPosition(SwingConstants.CENTER);
672
673                                pfPin = new JPasswordField(20);
674                                pfPin.setPreferredSize(fieldsDimension);
675                                pfPin.addActionListener(this);
676                                pfPin.setActionCommand("ok");
677                                pCentro.add(pfPin);
678                                btOk = new JButton("Ok");
679                                btCancel = new JButton("Cancel");
680                        }
681                        else {
682                                lTitle = new JLabel("Token inserido e desbloqueado");
683                                lTitle.setHorizontalTextPosition(SwingConstants.CENTER);
684                                lTitle2 = new JLabel(" pelo usuário " + uid + " foi detectado:");
685                                lTitle2.setHorizontalTextPosition(SwingConstants.CENTER);
686                                btOk = new JButton("Prossegir");
687                        }
688
689                        JPanel pTitle1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
690                        pTitle1.setPreferredSize(new Dimension(300, 20));
691                        pTitle1.setBackground(Color.WHITE);
692                        pTitle1.add(lTitle);
693                        pTitle.add(pTitle1);
694                        if (lTitle2 != null) {
695                                JPanel pTitle2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
696                                pTitle2.setPreferredSize(new Dimension(300,20));
697                                pTitle2.setBackground(Color.WHITE);
698                                pTitle.add(pTitle2);
699                                pTitle2.add(lTitle2);
700                        }
701
702                        pNorte.add(pTitle);
703
704                        btOk.setMnemonic(KeyEvent.VK_ENTER);
705                        btOk.setActionCommand("ok");
706                        btOk.addActionListener(this);
707                        pSul.add(btOk);
708
709                        if (btCancel != null){
710                                btCancel.setActionCommand("cancel");
711                                btCancel.addActionListener(this);
712                                pSul.add(btCancel);
713                        }
714
715                        this.add(pNorte, BorderLayout.NORTH);
716                        this.add(pCentro, BorderLayout.CENTER);
717                        this.add(pSul, BorderLayout.SOUTH);
718                }
719
720                // design ruim!!! azar :-S
721                public char[] getPin() {
722                        if (pfPin == null){
723                                return null;
724                        }
725                        return pfPin.getPassword();
726                }
727
728                void clearPasswordField(){
729                        if (pfPin != null){
730                                pfPin.setText("");
731                        }
732                }
733
734                public void actionPerformed(ActionEvent evt) {
735
736                        String command = evt.getActionCommand();
737
738                        // Atribui o valor digitado para o campo
739                        // senha e esconde a interface e assina o certificado
740                        if (command.equals("ok")){
741
742                                if (pfPin != null && pfPin.getPassword().length <= 0){
743                                        // Mostra um aviso de que o campo PIN não foi preenchido
744                                        okButtonPinEmpty();
745                                }
746                                else {
747                                        okButtonActionPerformed();
748                                }
749
750                        }
751                        else if (command.equals("cancel")){
752                                cancelButtonActionPerformed();
753                        }
754                }
755
756
757        }
758
759        private final class LoginPanel extends JPanel implements ActionListener{
760*/
761                /**
762                 *
763                 */
764        /*
765                private static final long serialVersionUID = -8604718192554937222L;
766                JButton btAcessar;
767                JTextField tfUsername;
768                JPasswordField pfPasswd;
769
770                public LoginPanel(String uid){
771
772                        this.setLayout(new BorderLayout());
773
774                        JPanel panelCredentials = new JPanel(new GridLayout(2, 0));
775                        panelCredentials.setBackground(Color.WHITE);
776                        panelCredentials.setPreferredSize(new Dimension(280, 84));
777
778                        JPanel panelUsername = new JPanel(new FlowLayout(FlowLayout.CENTER));
779                        panelUsername.setBackground(Color.WHITE);
780                        panelUsername.setPreferredSize(new Dimension(300, 42));
781
782                        JLabel labelUsername = new JLabel("Usuário");
783                        panelUsername.add(labelUsername);
784                        labelUsername.setPreferredSize(new Dimension(100, 40));
785
786                        tfUsername = new JTextField(15);
787                        tfUsername.setText(uid);
788                        panelUsername.add(tfUsername);
789
790                        JPanel panelPasswd = new JPanel(new FlowLayout(FlowLayout.CENTER));
791                        panelPasswd.setPreferredSize(new Dimension(300, 42));
792                        JLabel labelPasswd = new JLabel("Senha");
793                        panelPasswd.add(labelPasswd);
794                        panelPasswd.setBackground(Color.WHITE);
795                        labelPasswd.setPreferredSize(new Dimension(100, 20));
796
797                        pfPasswd = new JPasswordField(15);
798                        panelPasswd.add(pfPasswd);
799
800                        panelCredentials.add(panelUsername);
801                        panelCredentials.add(panelPasswd);
802                        this.add(panelCredentials, BorderLayout.CENTER);
803
804                        btAcessar = new JButton("Acessar");
805                        btAcessar.setActionCommand("acessar");
806                        btAcessar.addActionListener(this);
807                        JPanel panelBtAcessar = new JPanel(new FlowLayout(FlowLayout.CENTER));
808                        panelBtAcessar.setBackground(Color.WHITE);
809                        panelBtAcessar.setPreferredSize(new Dimension(300, 42));
810                        panelBtAcessar.add(btAcessar);
811
812                        this.add(panelBtAcessar, BorderLayout.SOUTH);
813                        this.setVisible(true);
814
815                }
816
817                public void actionPerformed(ActionEvent e) {
818                        if (e.getActionCommand().equals("acessar")){
819                                acessarButtonActionPerformed();
820                        }
821
822                }
823
824                void clearPasswordField(){
825                        pfPasswd.setText("");
826                }
827
828        }
829        */
830
831}
Note: See TracBrowser for help on using the repository browser.