1 package org.columba.mail.pgp; 17 18 import java.util.Hashtable ; 19 import java.util.Map ; 20 import java.util.Properties ; 21 22 import org.columba.mail.gui.util.PGPPassphraseDialog; 23 import org.waffel.jscf.JSCFConnection; 24 import org.waffel.jscf.JSCFException; 25 import org.waffel.jscf.JSCFStatement; 26 27 35 public class PGPPassChecker { 36 private static PGPPassChecker myInstance = null; 37 38 private Map passwordMap = new Hashtable (); 39 40 46 public static PGPPassChecker getInstance() { 47 if (myInstance == null) { 48 myInstance = new PGPPassChecker(); 49 } 50 51 return myInstance; 52 } 53 54 69 public boolean checkPassphrase(JSCFConnection con) throws JSCFException { 70 boolean stmtCheck = false; 71 JSCFStatement stmt = con.createStatement(); 72 73 Properties props = con.getProperties(); 76 77 while (!stmtCheck && (this.checkPassphraseDialog(con) == true)) { 78 stmtCheck = stmt.checkPassphrase(); 79 80 if (!stmtCheck) { 81 this.passwordMap.remove(props.get("USERID")); 82 } 83 } 84 85 return stmtCheck; 86 } 87 88 private boolean checkPassphraseDialog(JSCFConnection con) { 89 String passphrase = ""; 90 Properties props = con.getProperties(); 91 92 if (this.passwordMap.containsKey(props.get("USERID"))) { 93 passphrase = (String ) this.passwordMap.get(props.get("USERID")); 94 } 95 96 props.put("PASSWORD", passphrase); 97 98 boolean ret = true; 99 100 PGPPassphraseDialog dialog = new PGPPassphraseDialog(); 101 102 if (passphrase.length() == 0) { 103 dialog.showDialog((String ) props.get("USERID"), (String ) props 104 .get("PASSWORD"), false); 105 106 if (dialog.success()) { 107 passphrase = new String (dialog.getPassword(), 0, dialog 108 .getPassword().length); 109 props.put("PASSWORD", passphrase); 110 111 boolean save = dialog.getSave(); 112 113 if (save) { 115 this.passwordMap.put(props.get("USERID"), passphrase); 116 } 117 118 ret = true; 119 } else { 120 ret = false; 121 } 122 } 123 124 con.setProperties(props); 125 126 return ret; 127 } 128 } 129 | Popular Tags |