/** * Returns the cached password. If the password is not in the cache, the default password (if no * password is set) or <code>null</code> (if a password is set) is returned. * @return The cached password or <code>null</code> if the password is not in the cache */ public synchronized byte[] getPassword() { resetExpiration(); if ((password==null || password.length<=0) && !configuration.getPasswordFile().exists()) return FileEncryptionConstants.DEFAULT_PASSWORD; else return password; }
public boolean getIncludeSentTime() { return getBooleanParameter(PARAMETER_INCLUDE_SENT_TIME, DEFAULT_INCLUDE_SENT_TIME); }
/** * Returns a list of all available UI themes. */ public List<Theme> getThemes() { List<Theme> themes = new ArrayList<Theme>(); themes.addAll(getBuiltInThemes()); themes.addAll(getExternalThemes()); return themes; }
if (password == null) throw new PasswordException(); File passwordFile = configuration.getPasswordFile(); boolean correct = FileEncryptionUtil.isPasswordCorrect(password, passwordFile); if (!correct) files.add(configuration.getIdentitiesFile()); files.add(configuration.getAddressBookFile()); File[] emailFolders = new File[] {configuration.getInboxDir(), configuration.getOutboxDir(), configuration.getSentFolderDir(), configuration.getTrashFolderDir()};; for (File dir: emailFolders) files.addAll(Arrays.asList(dir.listFiles()));
atLeast(1).of(configuration).getKeyDerivationParametersFile(); will(returnValue(derivParametersFile)); }}); atLeast(1).of(configuration).getPasswordFile(); will(returnValue(passwordFile)); }}); allowing(configuration).getPasswordCacheDuration(); will(returnValue(1)); }});
@After public void tearDown() throws Exception { TestUtil.createConfiguration(testDir).getKeyDerivationParametersFile().delete(); assertTrue("Directory not empty: <" + testDir.getAbsolutePath() + ">", testDir.delete()); }
i2pBoteDir = getI2PBoteDirectory(); if (!i2pBoteDir.exists() && !i2pBoteDir.mkdirs()) log.error("Cannot create directory: <" + i2pBoteDir.getAbsolutePath() + ">"); File ks = getSSLKeyStoreFile(); if (!ks.exists()) createKeyStore(ks);
configuration = new Configuration(); identities = new Identities(configuration.getIdentitiesFile(), passwordCache); addressBook = new AddressBook(configuration.getAddressBookFile(), passwordCache); initializeFolderAccess(passwordCache); initializeExternalThemeDir();
/** * Clears the password after a certain time if {@link #getPassword()} hasn't been called. * @see Configuration#getPasswordCacheDuration() */ @Override public void run() { while (!Thread.interrupted()) { try { TimeUnit.MINUTES.sleep(1); } catch (InterruptedException e) { break; } try { long durationMilliseconds = TimeUnit.MILLISECONDS.convert(configuration.getPasswordCacheDuration(), TimeUnit.MINUTES); boolean isEmpty = password==null || password.length==0; if (System.currentTimeMillis()>lastReset+durationMilliseconds && !isEmpty) // cache empty passwords forever clear(); } catch (RuntimeException e) { // catch unexpected exceptions to keep the thread running log.error("Exception caught in PasswordCache loop", e); } } log.debug("PasswordCache thread exiting."); } }
try { try { if (configuration.isDeliveryCheckEnabled()) { log.debug("Processing sent emails in directory '" + sentFolder.getStorageDirectory() + "'."); FolderIterator<Email> iterator = sentFolder.iterate(); TimeUnit.MINUTES.sleep(configuration.getDeliveryCheckInterval());
sessionProperties.putAll(configuration.getI2CPOptions()); File destinationKeyFile = configuration.getDestinationKeyFile(); FileReader fileReader = null; try {
private void migrateAddressBookIfNeeded(Configuration configuration, PasswordHolder passwordHolder) throws FileNotFoundException, IOException, GeneralSecurityException, PasswordException { File addressBookFile = configuration.getAddressBookFile(); if (!addressBookFile.exists()) return; BufferedReader input = null; try { InputStream encryptedStream = new EncryptedInputStream(new FileInputStream(addressBookFile), passwordHolder); input = new BufferedReader(new InputStreamReader(encryptedStream)); // No PasswordException occurred, so read the input stream and call migrateAddressBook() if needed List<String> lines = Util.readLines(encryptedStream); if (!isAddressBookFileMigrated(lines)) migrateAddressBook(lines, configuration, passwordHolder); } finally { if (input != null) input.close(); } }
File oldIdentitiesFile = new File(configuration.getIdentitiesFile().getParentFile(), "identities.txt"); if (oldIdentitiesFile.exists()) { log.debug("Migrating identities file: <" + oldIdentitiesFile + ">"); File newIdentitiesFile = configuration.getIdentitiesFile(); encrypt(oldIdentitiesFile, newIdentitiesFile); oldIdentitiesFile.delete(); File oldAddrBookFile = new File(configuration.getAddressBookFile().getParentFile(), "addressBook.txt"); if (oldAddrBookFile.exists()) { log.debug("Migrating address book: <" + oldIdentitiesFile + ">"); File newAddrBookFile = configuration.getAddressBookFile(); encrypt(oldAddrBookFile, newAddrBookFile); oldAddrBookFile.delete(); migrateEmailsIfNeeded(configuration.getInboxDir()); migrateEmailsIfNeeded(configuration.getOutboxDir()); migrateEmailsIfNeeded(configuration.getSentFolderDir()); migrateEmailsIfNeeded(configuration.getTrashFolderDir());
@After public void tearDown() throws Exception { assertTrue("Can't delete file: " + identitiesFile.getAbsolutePath(), identitiesFile.delete()); File derivParamsFile = TestUtil.createConfiguration(testDir).getKeyDerivationParametersFile(); assertTrue("Can't delete file: " + derivParamsFile, derivParamsFile.delete()); assertTrue("Can't delete directory: " + testDir.getAbsolutePath(), testDir.delete()); }
private void migrateAddressBook(List<String> lines, Configuration configuration, PasswordHolder passwordHolder) throws IOException, GeneralSecurityException, PasswordException { AddressBook addressBook = new AddressBook(configuration.getAddressBookFile(), passwordHolder); for (String line: lines) { String[] fields = line.split("\\t", 2); try { EmailDestination destination = new EmailDestination(fields[0]); String name = null; if (fields.length > 1) name = fields[1]; Contact contact = new Contact(name, destination); addressBook.add(contact); } catch (GeneralSecurityException e) { log.error("Not a valid Email Destination: <" + fields[0] + ">", e); } } addressBook.save(); } }
@After public void tearDown() throws Exception { // Current tests don't cause this to be written out //assertTrue("Can't delete file: " + addressBookFile.getAbsolutePath(), addressBookFile.delete()); File derivParamsFile = TestUtil.createConfiguration(testDir).getKeyDerivationParametersFile(); assertTrue("Can't delete file: " + derivParamsFile, derivParamsFile.delete()); assertTrue("Can't delete directory: " + testDir.getAbsolutePath(), testDir.delete()); }
/** * Tests if a password is correct and stores it in the cache if it is. * If the password is not correct, a <code>PasswordException</code> is thrown. * @param password * @throws IOException * @throws GeneralSecurityException * @throws PasswordException */ @Override public void tryPassword(byte[] password) throws IOException, GeneralSecurityException, PasswordException { File passwordFile = configuration.getPasswordFile(); boolean correct = FileEncryptionUtil.isPasswordCorrect(password, passwordFile); if (correct) { // Don't cache tried password if none is set. This check is needed // because IMAP doesn't support a blank password, so the user // inputs a random string. if (passwordFile.exists()) passwordCache.setPassword(password); } else throw new PasswordException(); }
public boolean getHideLocale() { return getBooleanParameter(PARAMETER_HIDE_LOCALE, DEFAULT_HIDE_LOCALE); }
File derivParamFile = configuration.getKeyDerivationParametersFile(); if (derivParamFile.exists()) derivedKey = FileEncryptionUtil.getEncryptionKey(password, derivParamFile);
File passwordFile = configuration.getPasswordFile();