package grith.jgrith.cred; import grisu.jcommons.exceptions.CredentialException; import grith.jgrith.cred.callbacks.AbstractCallback; import grith.jgrith.cred.callbacks.StaticCallback; import grith.jgrith.cred.details.FileDetail; import grith.jgrith.cred.details.PasswordDetail; import grith.jgrith.plainProxy.PlainProxy; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.globus.common.CoGProperties; import org.ietf.jgss.GSSCredential; public class X509Cred extends AbstractCred { public static X509Cred create(char[] passphrase) { X509Cred temp = new X509Cred(); temp.setCallback(new StaticCallback(passphrase)); return temp; } protected FileDetail certFile = new FileDetail("X509 certificate file"); protected FileDetail keyFile = new FileDetail("X509 key file"); protected PasswordDetail password = new PasswordDetail( "X509 certificate password", "Please enter your certificate passphrase"); public X509Cred() { this(CoGProperties.getDefault().getUserCertFile(), CoGProperties .getDefault().getUserKeyFile()); } public X509Cred(AbstractCallback callback) { super(callback); } public X509Cred(AbstractCallback callback, String certFile, String keyFile) { super(callback); this.certFile.set(certFile); this.keyFile.set(keyFile); init(); } public X509Cred(String certFile, String keyFile) { this.certFile.set(certFile); this.keyFile.set(keyFile); } @Override public GSSCredential createGSSCredentialInstance() { try { char[] passphrase = password.getValue(); if (passphrase == null) { throw new CredentialException("No passphrase provided."); } String cert = certFile.getValue(); String key = keyFile.getValue(); return PlainProxy.init(cert, key, passphrase, getProxyLifetimeInSeconds() / 3600); } catch (Exception e) { throw new CredentialException("Can't init certificate: " + e.getLocalizedMessage(), e); } } public String getCertificateFile() { return certFile.getValue(); } public String getCertificateKey() { return keyFile.getValue(); } public String getPassword() { return new String(password.getValue()); } @Override protected void initCred(Map<PROPERTY, Object> config) { char[] pwTemp = (char[]) config.get(PROPERTY.Password); Object certTemp = config.get(PROPERTY.CertFile); if ((certTemp == null) || StringUtils.isBlank((String) certTemp)) { if (StringUtils.isBlank(certFile.getValue())) { certTemp = CoGProperties.getDefault().getUserCertFile(); certFile.set((String) certTemp); } } else { certFile.set((String) certTemp); } Object keyTemp = config.get(PROPERTY.KeyFile); if ((keyTemp == null) || StringUtils.isBlank((String) keyTemp)) { if (StringUtils.isBlank(keyFile.getValue())) { keyTemp = CoGProperties.getDefault().getUserKeyFile(); keyFile.set((String) keyTemp); } } else { keyFile.set((String) keyTemp); } password.set(pwTemp); } @Override public boolean isRenewable() { return true; } }