feat: v0.1.2, support DEFAULT certs, optimize error message
This commit is contained in:
@@ -2,5 +2,44 @@ package me.hatter.tool.signpdf.main;
|
||||
|
||||
public interface SignPdfConstant {
|
||||
String NAME = "sign-pdf";
|
||||
String VERSION = "0.1.1";
|
||||
String VERSION = "0.1.2";
|
||||
|
||||
String DEFAULT_CERTS = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIB+DCCAX6gAwIBAgIVALe/Gyof7wdOqA5Hw+BfxLKsKctUMAoGCCqGSM49BAMC\n" +
|
||||
"MCQxIjAgBgNVBAMMGUhhdHRlciBFQyBJbnRlcm1lZGlhdGUgQ0EwHhcNMjMxMDMw\n" +
|
||||
"MDAwMDAwWhcNMzMxMDMwMDAwMDAwWjAcMRowGAYDVQQDDBFIYXR0ZXIgU2lnbmlu\n" +
|
||||
"ZyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABNA3bQZm7Fz93A7wjR4TZnfZ/yZD\n" +
|
||||
"JDA/bMOyU0R1Xj2nyp164jWut7Y7k+wEUQObOqb6mtml3YK24kDSc75+vTBAzSsz\n" +
|
||||
"JWVpS4XgYGZ1u41L7Ns7un56uZocnuP2liFcSqN4MHYwDgYDVR0PAQH/BAQDAgWg\n" +
|
||||
"MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYE\n" +
|
||||
"FP9cz42+U6fP5YZXpJLM/TschPmkMB8GA1UdIwQYMBaAFKWHFKtlvWFHtpitgmmc\n" +
|
||||
"MK8CJAY8MAoGCCqGSM49BAMCA2gAMGUCMQCjs/EbpNpOa6LoKRqEu6AdKaKA4mlN\n" +
|
||||
"2xIVU6cIViwv4Lj0K/nmPHnAnPOu4yiLr1UCMFKcIfdZBn5mQ9DoT6Rbefy4SH6P\n" +
|
||||
"drQlvOTIBRQh9kiQoA2clTG1d8DFc0PpRF9pXA==\n" +
|
||||
"-----END CERTIFICATE-----\n" +
|
||||
"-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIB5DCCAWugAwIBAgIUPQMQohzxKUPB5kNVqucFbULevIMwCgYIKoZIzj0EAwIw\n" +
|
||||
"HDEaMBgGA1UEAwwRSGF0dGVyIEVDIFJvb3QgQ0EwHhcNMjMxMDI5MDAwMDAwWhcN\n" +
|
||||
"MzMxMDI5MDAwMDAwWjAkMSIwIAYDVQQDDBlIYXR0ZXIgRUMgSW50ZXJtZWRpYXRl\n" +
|
||||
"IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEImblRzI8dv8ea7y8kR2X0ZM56BF3\n" +
|
||||
"tjjzjIJ7zmXaMO3DU9JbCdXZJoogLytTuKA5hmSPD0aXbnzQ89mZ7KWVA2qI2cjH\n" +
|
||||
"wN5u+KtQM2oPvhH0nhMVFifcM7IeP6quihqko2YwZDAOBgNVHQ8BAf8EBAMCAQYw\n" +
|
||||
"EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUpYcUq2W9YUe2mK2CaZwwrwIk\n" +
|
||||
"BjwwHwYDVR0jBBgwFoAUeYIe16r9vuTceUDXG0CAbI9Pp+owCgYIKoZIzj0EAwID\n" +
|
||||
"ZwAwZAIwd9dqszZM7lKcf+LtDc0VkbNlBZVIS0jjZfUn6nUXOizfjNM3UzLcMKVO\n" +
|
||||
"TQP1pb2XAjAeISWnbTaxxQPCG/6mzfMw9CfqPS6ECuHfrXyfAw45AI7CpUArDhZW\n" +
|
||||
"ZKV6vlnkzHc=\n" +
|
||||
"-----END CERTIFICATE-----\n" +
|
||||
"-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIB3DCCAWKgAwIBAgIUBmlMvQ8s4PNWa2dFxhZH6gpVEpUwCgYIKoZIzj0EAwIw\n" +
|
||||
"HDEaMBgGA1UEAwwRSGF0dGVyIEVDIFJvb3QgQ0EwIBcNMjMxMDI5MDAwMDAwWhgP\n" +
|
||||
"MjA2MzEwMjkwMDAwMDBaMBwxGjAYBgNVBAMMEUhhdHRlciBFQyBSb290IENBMHYw\n" +
|
||||
"EAYHKoZIzj0CAQYFK4EEACIDYgAE3hLba+pjLyUPUiXO6DcSM0326f4yuziZiKNU\n" +
|
||||
"rBKfgJ7GZ6Yydlh2Ke33vyhoBcvTQlHP4ocWGwm0RdJ0Wz+99tkxegv8VskEqIEo\n" +
|
||||
"CU/U78w6DbcWvzQAAKfXUfGjjNpBo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T\n" +
|
||||
"AQH/BAUwAwEB/zAdBgNVHQ4EFgQUeYIe16r9vuTceUDXG0CAbI9Pp+owHwYDVR0j\n" +
|
||||
"BBgwFoAUeYIe16r9vuTceUDXG0CAbI9Pp+owCgYIKoZIzj0EAwIDaAAwZQIxANym\n" +
|
||||
"CiIqwtBXwcvn887Z9dnrdWXDEpJanID2nvwqa57ACIhTTu3d/UzFdOM6GWDR8AIw\n" +
|
||||
"bC9qIy+izBeFPfbggsz6U9nF5++LbtRHBFQ2InWoI4GZd074SGPcYRalMV3AUZ5m\n" +
|
||||
"-----END CERTIFICATE-----\n";
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ import me.hatter.tool.signpdf.options.SignOptions;
|
||||
import me.hatter.tool.signpdf.sign.CreateSignature;
|
||||
import me.hatter.tool.signpdf.sign.SigUtils;
|
||||
import me.hatter.tool.signpdf.time.TSAClient;
|
||||
import me.hatter.tools.commons.exception.JumpOutException;
|
||||
import me.hatter.tools.commons.io.RFile;
|
||||
import me.hatter.tools.commons.log.LogTool;
|
||||
import me.hatter.tools.commons.log.LogTools;
|
||||
import me.hatter.tools.commons.security.cert.X509CertUtil;
|
||||
import me.hatter.tools.commons.security.key.KeyUtil;
|
||||
import me.hatter.tools.commons.string.StringUtil;
|
||||
@@ -21,8 +24,17 @@ import java.security.cert.X509Certificate;
|
||||
import java.util.List;
|
||||
|
||||
public class SignPdfMain {
|
||||
private static final LogTool log = LogTools.getLogTool(SignPdfMain.class);
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
try {
|
||||
inner_main(args);
|
||||
} catch (JumpOutException jumpOutException) {
|
||||
log.error("Sign PDF failed, message: " + jumpOutException.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void inner_main(String[] args) throws Exception {
|
||||
final SignPdfArgs signPdfArgs = SignPdfArgsUtil.parseArgs(args);
|
||||
if (signPdfArgs == null) {
|
||||
return;
|
||||
@@ -36,8 +48,12 @@ public class SignPdfMain {
|
||||
|
||||
checkFiles(inFile, outFile);
|
||||
|
||||
final List<X509Certificate> certs = X509CertUtil.parseX509CertificateList(
|
||||
RFile.from(signPdfArgs.certs).string());
|
||||
final List<X509Certificate> certs;
|
||||
if (StringUtil.equals("DEFAULT", signPdfArgs.certs)) {
|
||||
certs = X509CertUtil.parseX509CertificateList(SignPdfConstant.DEFAULT_CERTS);
|
||||
} else {
|
||||
certs = X509CertUtil.parseX509CertificateList(RFile.from(signPdfArgs.certs).string());
|
||||
}
|
||||
final X509Certificate[] certificateChain = certs.toArray(new X509Certificate[0]);
|
||||
|
||||
final ContentSigner contentSigner = buildContentSigner(signPdfArgs, certificateChain);
|
||||
@@ -50,28 +66,28 @@ public class SignPdfMain {
|
||||
|
||||
private static void checkFiles(File inFile, File outFile) {
|
||||
if (!inFile.exists()) {
|
||||
throw new RuntimeException("PDF file in not exists.");
|
||||
throw new JumpOutException("PDF file in not exists.");
|
||||
}
|
||||
if (outFile.exists()) {
|
||||
throw new RuntimeException("PDF file out exists.");
|
||||
throw new JumpOutException("PDF file out exists.");
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkSginPdfArgs(SignPdfArgs signPdfArgs) {
|
||||
if (StringUtil.isEmpty(signPdfArgs.in) || StringUtil.isEmpty(signPdfArgs.out)) {
|
||||
throw new RuntimeException("PDF file in/out cannot be empty.");
|
||||
throw new JumpOutException("PDF file in/out cannot be empty.");
|
||||
}
|
||||
if (StringUtil.isEmpty(signPdfArgs.certs)) {
|
||||
throw new RuntimeException("Certificate chain file cannot be empty.");
|
||||
throw new JumpOutException("Certificate chain file cannot be empty, or you can use 'DEFAULT'");
|
||||
}
|
||||
if (StringUtil.isEmpty(signPdfArgs.slot) && StringUtil.isEmpty(signPdfArgs.key)) {
|
||||
throw new RuntimeException("Sign key file or slot cannot be empty.");
|
||||
throw new JumpOutException("Sign key file or slot cannot be empty.");
|
||||
}
|
||||
if (StringUtil.isNotEmpty(signPdfArgs.slot) && StringUtil.isNotEmpty(signPdfArgs.key)) {
|
||||
throw new RuntimeException("Sign key file and slot cannot both provided.");
|
||||
throw new JumpOutException("Sign key file and slot cannot both provided.");
|
||||
}
|
||||
if (StringUtil.isNotEmpty(signPdfArgs.slot) && StringUtil.isEmpty(signPdfArgs.pin)) {
|
||||
throw new RuntimeException("PIN cannot be empty");
|
||||
throw new JumpOutException("PIN cannot be empty");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user