package at.gv.egovernment.moa.spss.util; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.gv.egovernment.moa.spss.server.logging.IaikLog; import at.gv.egovernment.moa.spss.server.logging.TransactionId; import iaik.pki.store.certstore.directory.DirectoryStoreException; import iaik.pki.store.certstore.utils.DirectoryCertStoreConverter; public class CertStoreConverter { private static final Logger logger = LoggerFactory.getLogger(CertStoreConverter.class); public static boolean convert(String certStoreRoot, TransactionId transId) { String certStoreSubjectDN = certStoreRoot + File.separator + "subjectdn"; logger.error("checking for new cert store format {} -> {}", certStoreRoot, certStoreSubjectDN); File certStoreDirectory = new File(certStoreRoot); if (certStoreDirectory.isDirectory() && certStoreDirectory.exists()) { File file = new File(certStoreSubjectDN); if (file.isDirectory() && file.exists()) { // Is new Format! logger.error("Cert store is allready new format!"); return false; } else { try { logger.error( "###########################################################################################"); logger.error( "###########################################################################################"); logger.error("The certificate store @ {} will now be converted into the new format!", certStoreDirectory.getAbsolutePath()); String backup = certStoreRoot; if (certStoreRoot.endsWith(File.separator)) { backup = certStoreRoot.substring(0, certStoreRoot.length() - File.separator.length()); } String timestamp = String.valueOf(System.currentTimeMillis()); backup = backup + "_" + timestamp; logger.error("Creating a backup of the certstore @ {}", backup); File backupDirectory = new File(backup); try { FileUtils.copyDirectory(certStoreDirectory, backupDirectory); } catch (IOException e) { logger.error("Failed to create certstore backup!", e); throw new RuntimeException("Failed to create certstore backup!", e); } logger.error("deleting original certstore @ {}", certStoreRoot); try { FileUtils.deleteDirectory(certStoreDirectory); } catch (IOException e1) { logger.error("Failed to delete old certstore!", e1); throw new RuntimeException("Failed to delete old certstore!", e1); } certStoreDirectory.mkdir(); DirectoryCertStoreConverter directoryCertStoreConverter = new DirectoryCertStoreConverter(); try { logger.error("running conversion of certstore @ {}", certStoreRoot); directoryCertStoreConverter.convert(backupDirectory.getAbsolutePath(), certStoreDirectory.getAbsolutePath(), true, false, new IaikLog("DirectoryCertStoreConverter"), transId); } catch (DirectoryStoreException e) { logger.error("Failed to run conversion of old certstore!", e); try { FileUtils.copyDirectory(backupDirectory, certStoreDirectory); } catch (IOException e1) { logger.error("!!!!Failed to restore original certstore!!!! CHECK LOGS", e1); throw new RuntimeException("!!!!Failed to restore original certstore!!!! CHECK LOGS", e); } throw new RuntimeException("Failed to run conversion of old certstore!", e); } logger.error("Conversion of certstore succseeded"); logger.error("Certstore in new format is located @ {}", certStoreDirectory.getAbsolutePath()); logger.error("Backup of Certstore in old format is located @ {}", certStoreDirectory.getAbsolutePath()); } finally { logger.error( "###########################################################################################"); logger.error( "###########################################################################################"); } return true; } } else { logger.error("Certstore does not exist yet"); } return false; } }