Java tutorial
/* * Copyright (c) 2014. * * BaasBox - info-at-baasbox.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.baasbox.configuration; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.exception.ExceptionUtils; import com.baasbox.BBConfiguration; import com.baasbox.service.logging.BaasBoxLogger; import com.baasbox.util.ConfigurationFileContainer; import com.fasterxml.jackson.databind.ObjectMapper; public class IosCertificateHandler implements IPropertyChangeCallback { static String sep = System.getProperty("file.separator") != null ? System.getProperty("file.separator") : "/"; static String folder = BBConfiguration.getPushCertificateFolder(); @Override public void change(Object iCurrentValue, Object iNewValue) { if (iNewValue == null) { return; } String folder = BBConfiguration.getPushCertificateFolder(); File f = new File(folder); if (!f.exists()) { f.mkdirs(); } ConfigurationFileContainer newValue = null; ConfigurationFileContainer currentValue = null; if (iNewValue != null && iNewValue instanceof ConfigurationFileContainer) { newValue = (ConfigurationFileContainer) iNewValue; } if (iCurrentValue != null) { if (iCurrentValue instanceof String) { try { currentValue = new ObjectMapper().readValue(iCurrentValue.toString(), ConfigurationFileContainer.class); } catch (Exception e) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("unable to convert value to ConfigurationFileContainer"); } } else if (iCurrentValue instanceof ConfigurationFileContainer) { currentValue = (ConfigurationFileContainer) iCurrentValue; } } if (currentValue != null) { File oldFile = new File(folder + sep + currentValue.getName()); if (oldFile.exists()) { try { FileUtils.forceDelete(oldFile); } catch (Exception e) { BaasBoxLogger.error(ExceptionUtils.getMessage(e)); } } } if (newValue != null) { File newFile = new File(folder + sep + newValue.getName()); try { if (!newFile.exists()) { newFile.createNewFile(); } } catch (IOException ioe) { throw new RuntimeException("unable to create file:" + ExceptionUtils.getMessage(ioe)); } ByteArrayInputStream bais = new ByteArrayInputStream(newValue.getContent()); try { FileUtils.copyInputStreamToFile(bais, newFile); bais.close(); } catch (IOException ioe) { //TODO:more specific exception throw new RuntimeException(ExceptionUtils.getMessage(ioe)); } } else { BaasBoxLogger.warn("Ios Certificate Handler invoked with wrong parameters"); //TODO:throw an exception? } } public static void init() { String folder = BBConfiguration.getPushCertificateFolder(); File f = new File(folder); if (!f.exists()) { f.mkdirs(); } ConfigurationFileContainer prod = Push.PROFILE1_PRODUCTION_IOS_CERTIFICATE.getValueAsFileContainer(); ConfigurationFileContainer sandbox = Push.PROFILE1_SANDBOX_IOS_CERTIFICATE.getValueAsFileContainer(); ConfigurationFileContainer prod2 = Push.PROFILE2_PRODUCTION_IOS_CERTIFICATE.getValueAsFileContainer(); ConfigurationFileContainer sandbox2 = Push.PROFILE2_SANDBOX_IOS_CERTIFICATE.getValueAsFileContainer(); ConfigurationFileContainer prod3 = Push.PROFILE3_PRODUCTION_IOS_CERTIFICATE.getValueAsFileContainer(); ConfigurationFileContainer sandbox3 = Push.PROFILE3_SANDBOX_IOS_CERTIFICATE.getValueAsFileContainer(); if (prod != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating production certificate for default profile:" + prod.getName()); File prodCertificate = new File(folder + sep + prod.getName()); if (!prodCertificate.exists()) { try { prodCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(prod.getContent()); FileUtils.copyInputStreamToFile(bais, prodCertificate); } catch (Exception e) { prodCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } if (sandbox != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating sandbox certificate for default profile:" + sandbox.getName()); File sandboxCertificate = new File(folder + sep + sandbox.getName()); if (!sandboxCertificate.exists()) { try { sandboxCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(sandbox.getContent()); FileUtils.copyInputStreamToFile(bais, sandboxCertificate); } catch (Exception e) { sandboxCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } if (prod2 != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating production certificate for profile 2:" + prod2.getName()); File prodCertificate = new File(folder + sep + prod2.getName()); if (!prodCertificate.exists()) { try { prodCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(prod.getContent()); FileUtils.copyInputStreamToFile(bais, prodCertificate); } catch (Exception e) { prodCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } if (sandbox2 != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating sandbox certificate for profile 2:" + sandbox2.getName()); File sandboxCertificate = new File(folder + sep + sandbox2.getName()); if (!sandboxCertificate.exists()) { try { sandboxCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(sandbox.getContent()); FileUtils.copyInputStreamToFile(bais, sandboxCertificate); } catch (Exception e) { sandboxCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } if (prod3 != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating production certificate for profile 3:" + prod3.getName()); File prodCertificate = new File(folder + sep + prod3.getName()); if (!prodCertificate.exists()) { try { prodCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(prod3.getContent()); FileUtils.copyInputStreamToFile(bais, prodCertificate); } catch (Exception e) { prodCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } if (sandbox3 != null) { if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Creating sandbox certificate for profile 3:" + sandbox3.getName()); File sandboxCertificate = new File(folder + sep + sandbox3.getName()); if (!sandboxCertificate.exists()) { try { sandboxCertificate.createNewFile(); ByteArrayInputStream bais = new ByteArrayInputStream(sandbox.getContent()); FileUtils.copyInputStreamToFile(bais, sandboxCertificate); } catch (Exception e) { sandboxCertificate.delete(); throw new RuntimeException( "Unable to create file for certificate:" + ExceptionUtils.getMessage(e)); } } } } public static File getCertificate(String name) { return new File(BBConfiguration.getPushCertificateFolder() + sep + name); } }