@Override public void replicate(ConfigManager manager, ConfigRequest request) throws IOException { if (!request.applies(CertificateManager.FEATURE)) { return; } boolean chainCertificate = false; boolean caCertificate = false; File dir = manager.getGlobalDataDirectory(); String sipCert = m_certificateManager.getCommunicationsCertificate(); FileUtils.writeStringToFile(new File(dir, "ssl.crt"), sipCert); String sipKey = m_certificateManager.getCommunicationsPrivateKey(); FileUtils.writeStringToFile(new File(dir, "ssl.key"), sipKey); String webCert = m_certificateManager.getWebCertificate(); FileUtils.writeStringToFile(new File(dir, "ssl-web.crt"), webCert); String webKey = m_certificateManager.getWebPrivateKey(); FileUtils.writeStringToFile(new File(dir, "ssl-web.key"), webKey); String chainCert = m_certificateManager.getChainCertificate(); if (chainCert != null) { FileUtils.writeStringToFile(new File(dir, "server-chain.crt"), chainCert); chainCertificate = true; } String caCert = m_certificateManager.getCACertificate(); if (caCert != null) { FileUtils.writeStringToFile(new File(dir, "ca-bundle.crt"), caCert); caCertificate = true; } Writer writer = new FileWriter(new File(dir, "ssl.conf")); try { write(writer, chainCertificate, caCertificate); } finally { IOUtils.closeQuietly(writer); } String domain = Domain.getDomain().getName(); JavaKeyStore sslSip = new JavaKeyStore(); sslSip.addKey(domain, sipCert, sipKey); sslSip.storeIfDifferent(new File(dir, "ssl.keystore")); JavaKeyStore sslWeb = new JavaKeyStore(); sslWeb.addKey(domain, webCert, webKey); sslWeb.storeIfDifferent(new File(dir, "ssl-web.keystore")); File authDir = new File(dir, "authorities"); authDir.mkdir(); JavaKeyStore store = new JavaKeyStore(); for (String authority : m_certificateManager.getAuthorities()) { String authCert = m_certificateManager.getAuthorityCertificate(authority); FileUtils.writeStringToFile(new File(authDir, authority + ".crt"), authCert); store.addAuthority(authority, authCert); } OutputStream authoritiesStore = null; try { store.storeIfDifferent(new File(dir, "authorities.jks")); } finally { IOUtils.closeQuietly(authoritiesStore); } }
void write( Writer wtr, IvrSettings settings, Domain domain, Location location, String mwiAddresses, int mwiPort, Address restApi, Address adminApi, Address apacheApi, Address imApi, Address imbotApi, Address fsEvent) throws IOException { KeyValueConfiguration config = KeyValueConfiguration.equalsSeparated(wtr); config.writeSettings(settings.getSettings()); config.write("freeswitch.eventSocketPort", fsEvent.getPort()); // potential bug: name "operator" could be changed by admin. this should be configurable // and linked with vm dialing rule config.write("ivr.operatorAddr", "sip:operator@" + domain.getName()); // required services if (mwiAddresses == null) { throw new ConfigException("MWI feature needs to be enabled. No addresses found."); } config.write("ivr.mwiAddresses", mwiAddresses); config.write("ivr.mwiPort", mwiPort); if (adminApi == null) { throw new ConfigException("Admin feature needs to be enabled. No addresses found."); } config.write("ivr.configUrl", adminApi.toString()); if (apacheApi != null) { config.write("ivr.emailAddressUrl", apacheApi.toString()); } // optional services if (restApi != null) { config.write("ivr.3pccSecureUrl", restApi.toString()); config.write("ivr.callHistoryUrl", restApi.toString() + "/cdr/"); } if (imApi != null) { config.write("ivr.openfireHost", imApi.getAddress()); config.write("ivr.openfireXmlRpcPort", imApi.getPort()); } if (imbotApi != null) { config.write("ivr.sendIMUrl", imbotApi.toString()); } }