package org.cagrid.gaards.credentials;
import java.io.File;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.security.cert.X509Certificate;
import javax.xml.namespace.QName;
import org.apache.axis.utils.ClassUtils;
import org.apache.commons.io.FileUtils;
import org.cagrid.gaards.pki.CertUtil;
import org.cagrid.gaards.pki.KeyUtil;
import org.globus.gsi.GlobusCredential;
public class EncodingUtil {
public static final String CLIENT_WSDD = "client-config.wsdd";
public static final QName X509_CREDENTIAL = new QName("http://gaards.cagrid.org/credentials",
"X509CredentialDescriptor");
public static final QName DORIAN_USER_CREDENTIAL = new QName("http://gaards.cagrid.org/credentials",
"DorianUserCredentialDescriptor");
public static void serialize(File f, X509CredentialDescriptor des) throws Exception {
String str = serialize(des);
FileUtils.writeStringToFile(f, str);
}
public static String serialize(X509CredentialDescriptor des) throws Exception {
if (des instanceof DorianUserCredentialDescriptor) {
return serialize(DORIAN_USER_CREDENTIAL, des);
} else {
return serialize(X509_CREDENTIAL, des);
}
}
public static X509CredentialDescriptor deserialize(File f) throws Exception {
String str = FileUtils.readFileToString(f);
return deserialize(str);
}
public static X509CredentialDescriptor encode(GlobusCredential cred) throws Exception {
return encode(cred, new X509CredentialDescriptor());
}
public static X509CredentialDescriptor encode(GlobusCredential cred, X509CredentialDescriptor des) throws Exception {
des.setIdentity(cred.getIdentity());
EncodedCertificates list = new EncodedCertificates();
X509Certificate[] chain = cred.getCertificateChain();
if (chain != null) {
String[] certs = new String[chain.length];
for (int i = 0; i < chain.length; i++) {
certs[i] = CertUtil.writeCertificate(chain[i]);
}
list.setEncodedCertificate(certs);
}
des.setEncodedCertificates(list);
des.setEncodedKey(KeyUtil.writePrivateKey(cred.getPrivateKey(), (String) null));
return des;
}
public static X509CredentialDescriptor deserialize(String s) throws Exception {
InputStream resourceAsStream = ClassUtils.getResourceAsStream(EncodingUtil.class, CLIENT_WSDD);
if (s.indexOf(DORIAN_USER_CREDENTIAL.getLocalPart()) != -1) {
return gov.nih.nci.cagrid.common.Utils.deserializeObject(new StringReader(s),
DorianUserCredentialDescriptor.class, resourceAsStream);
} else {
return gov.nih.nci.cagrid.common.Utils.deserializeObject(new StringReader(s),
X509CredentialDescriptor.class, resourceAsStream);
}
}
public static String serialize(QName ns, Object o) throws Exception {
InputStream resourceAsStream = ClassUtils.getResourceAsStream(EncodingUtil.class, CLIENT_WSDD);
StringWriter writer = new StringWriter();
gov.nih.nci.cagrid.common.Utils.serializeObject(o, ns, writer, resourceAsStream);
return writer.toString();
}
public static Object deserialize(String s, Class c) throws Exception {
InputStream resourceAsStream = ClassUtils.getResourceAsStream(EncodingUtil.class, CLIENT_WSDD);
return gov.nih.nci.cagrid.common.Utils.deserializeObject(new StringReader(s), c, resourceAsStream);
}
}