package com.frontier42.keepass.ant; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.Properties; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Property; import com.frontier42.keepass.KeepassDatabase; import com.frontier42.keepass.KeepassEntry; import com.frontier42.keepass.KeepassGroup; public class KeepassProperty extends Property { private File truststore; private String truststoreType="jks"; private String truststorePassword; private File keystore; private String keystoreType="jks"; private String keystorePassword; private String masterKey; public String getMasterKey() { return masterKey; } public void setMasterKey(String masterkey) { this.masterKey = masterkey; } public File getTruststore() { return truststore; } public void setTruststore(File truststore) { this.truststore = truststore; } public String getTruststoreType() { return truststoreType; } public void setTruststoreType(String truststoreType) { this.truststoreType = truststoreType; } public String getTruststorePassword() { return truststorePassword; } public void setTruststorePassword(String truststorePassword) { this.truststorePassword = truststorePassword; } public File getKeystore() { return keystore; } public void setKeystore(File keystore) { this.keystore = keystore; } public String getKeystoreType() { return keystoreType; } public void setKeystoreType(String keystoreType) { this.keystoreType = keystoreType; } public String getKeystorePassword() { return keystorePassword; } public void setKeystorePassword(String keystorePassword) { this.keystorePassword = keystorePassword; } @Override protected void loadUrl(URL url) throws BuildException { Properties props = new Properties(); log("Loading " + url, Project.MSG_WARN); try { UrlStreamHelper helper=new UrlStreamHelper(); InputStream is = null; if (url.getProtocol().toLowerCase().startsWith("http")){ helper.setTruststore(getTruststore()); helper.setTruststorePassword(getTruststorePassword()); helper.setKeystore(getKeystore()); helper.setKeystorePassword(getKeystorePassword()); helper.setKeystoreType(getKeystoreType()); is = helper.openStream(url); } is = helper.openStream(url); KeepassStreamReader reader=new KeepassStreamReader(); KeepassDatabase database=reader.load(is, getMasterKey()); String pPrefix=""; log("prefix:"+this.getPrefix(), Project.MSG_INFO); for(KeepassGroup group:database.getGroups()){ addProperty(pPrefix, group, props); } //System.out.println("groups:"+database.getGroups().size()); //KeepassDatabaseFactory.openDecryptedStrem(is, getPassword()); /* try { props.load(is); } finally { if (is != null) { is.close(); } } */ addProperties(props); } catch (Exception ex) { ex.printStackTrace(); throw new BuildException(ex, getLocation()); } } protected void addProperty(String pPrefix, KeepassGroup group, Properties props){ log("Group:"+group.getName(), Project.MSG_INFO); for(KeepassEntry entry:group.getEntries()){ String entryPrefix=pPrefix+group.getName()+"."+entry.getTitle(); log("Entry:"+entry.getTitle(), Project.MSG_INFO); props.put(entryPrefix+".username",entry.getUsername()); props.put(entryPrefix+".password",entry.getPassword()); } } @Override public void execute() throws BuildException { super.execute(); } }