package org.digidoc4j.testutils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.cert.X509Certificate;
import org.digidoc4j.Configuration;
import org.digidoc4j.impl.bdoc.tsl.TslLoader;
import eu.europa.esig.dss.DSSException;
import eu.europa.esig.dss.DSSUtils;
public class TSLHelper {
/**
* This might be needed to validate already created containers that use test certificates but are timestamped by live TSA
* @param configuration the configuration to add the certificate.
* @return the same configuration with certificate added to TSL
*/
public static Configuration addSkTsaCertificateToTsl(Configuration configuration) {
return addCertificateFromFileToTsl(configuration, "testFiles/SK_TSA.pem.crt");
}
public static Configuration addCertificateFromFileToTsl(Configuration configuration, String fileName) {
try {
FileInputStream fileInputStream = new FileInputStream(fileName);
X509Certificate certificate = DSSUtils.loadCertificate(fileInputStream).getCertificate();
configuration.getTSL().addTSLCertificate(certificate);
fileInputStream.close();
return configuration;
} catch (DSSException | IOException e) {
throw new RuntimeException(e);
}
}
public static long getCacheLastModificationTime() {
File cachedFile = getCachedFile(TslLoader.fileCacheDirectory);
return cachedFile.lastModified();
}
public static boolean isTslCacheEmpty() {
if(!TslLoader.fileCacheDirectory.exists()) {
return true;
}
File[] cachedFiles = TslLoader.fileCacheDirectory.listFiles();
return cachedFiles == null || cachedFiles.length == 0;
}
public static void deleteTSLCache() {
TslLoader.invalidateCache();
}
private static File getCachedFile(File cacheDirectory) {
File cachedFile = null;
if(cacheDirectory.exists()) {
File[] files = cacheDirectory.listFiles();
if(files != null && files.length > 0) {
cachedFile = files[0];
long modificationTime = cachedFile.lastModified();
for(File file: files) {
if(file.lastModified() > modificationTime) {
cachedFile = file;
}
}
}
}
return cachedFile;
}
}