package org.wiztools.restclient.persistence; import java.io.File; import nu.xom.Attribute; import nu.xom.Element; import nu.xom.Elements; import org.wiztools.commons.StringUtil; import org.wiztools.restclient.bean.KeyStoreType; import org.wiztools.restclient.bean.SSLHostnameVerifier; import org.wiztools.restclient.bean.SSLKeyStoreBean; import org.wiztools.restclient.bean.SSLReq; import org.wiztools.restclient.bean.SSLReqBean; import org.wiztools.restclient.util.Util; /** * * @author subwiz */ class XmlSslUtil { private XmlSslUtil() {} static Element getSslReq(SSLReq req) { Element eSsl = new Element("ssl"); if(req.isTrustAllCerts()) { Element e = new Element("ignore-cert-errs"); eSsl.appendChild(e); } { // Hostname verifier Element e = new Element("hostname-verifier"); e.appendChild(req.getHostNameVerifier().name()); eSsl.appendChild(e); } // Key store if(req.getKeyStore() != null) { Element e = new Element("keystore"); e.addAttribute(new Attribute("type", req.getKeyStore().getType().name())); e.addAttribute(new Attribute("file", req.getKeyStore().getFile().getAbsolutePath())); e.addAttribute(new Attribute("password", Util.base64encode(new String(req.getKeyStore().getPassword())))); eSsl.appendChild(e); } // Trust store if(req.getTrustStore() != null) { Element e = new Element("truststore"); e.addAttribute(new Attribute("type", req.getTrustStore().getType().name())); e.addAttribute(new Attribute("file", req.getTrustStore().getFile().getAbsolutePath())); e.addAttribute(new Attribute("password", Util.base64encode(new String(req.getTrustStore().getPassword())))); eSsl.appendChild(e); } return eSsl; } static SSLReq getSslReq(Element eSsl) { SSLReqBean out = new SSLReqBean(); Elements eChildren = eSsl.getChildElements(); for(int i=0; i<eChildren.size(); i++) { Element e = eChildren.get(i); final String name = e.getLocalName(); if(null != name) switch (name) { case "trust-self-signed-cert": // backward-compatibility... case "ignore-cert-errs": out.setTrustAllCerts(true); break; case "hostname-verifier": out.setHostNameVerifier(SSLHostnameVerifier.valueOf(e.getValue())); break; case "keystore": final SSLKeyStoreBean keyStore = new SSLKeyStoreBean(); { // type: final String typeStr = e.getAttributeValue("type"); if(StringUtil.isNotEmpty(typeStr)) keyStore.setType(KeyStoreType.valueOf(typeStr)); } keyStore.setFile(new File(e.getAttributeValue("file"))); keyStore.setPassword(Util.base64decode(e.getAttributeValue("password")).toCharArray()); out.setKeyStore(keyStore); break; case "truststore": final SSLKeyStoreBean trustStore = new SSLKeyStoreBean(); { // type: final String typeStr = e.getAttributeValue("type"); if(StringUtil.isNotEmpty(typeStr)) trustStore.setType(KeyStoreType.valueOf(typeStr)); } trustStore.setFile(new File(e.getAttributeValue("file"))); trustStore.setPassword(Util.base64decode(e.getAttributeValue("password")).toCharArray()); out.setTrustStore(trustStore); break; } } return out; } }