aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2026-06-23 11:24:09 +0200
committerJakob Heher <jakob.heher@iaik.tugraz.at>2026-06-23 11:24:09 +0200
commit24dec3a37192b8d5dbd04b1c3e491fb66cb24152 (patch)
treee192639f125d8b2850ce71871b4facc77ba7deb1
parent23b124e85c690625b08e06380d5f2ead0bb2f784 (diff)
downloadpdf-as-4-24dec3a37192b8d5dbd04b1c3e491fb66cb24152.tar.gz
pdf-as-4-24dec3a37192b8d5dbd04b1c3e491fb66cb24152.tar.bz2
pdf-as-4-24dec3a37192b8d5dbd04b1c3e491fb66cb24152.zip
add a test case for placeholder signing via soap api
-rw-r--r--pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt3
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java56
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties2
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties3
-rw-r--r--pdf-as-web/src/test/resources/data/placeholder.pdfbin0 -> 96953 bytes
5 files changed, 56 insertions, 8 deletions
diff --git a/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt b/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
index 892d6a91..f5003687 100644
--- a/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
+++ b/pdf-as-pdfbox-3/src/main/kotlin/at/gv/egiz/pdfas/lib/impl/pdfbox3/Placeholder.kt
@@ -106,8 +106,7 @@ object PDFBoxPlaceholderExtractor : PlaceholderExtractor {
fun extract(document: PDDocument, targetPlaceholderID: String?, matchMode: Int): SignaturePlaceholderData? {
placeholderNamesOfExistingSignatures =
document.signatureDictionaries.asSequence()
- .map { it.signaturePlaceholderId }
- .filterNotNull()
+ .mapNotNull { it.signaturePlaceholderId }
.toSet()
document.pages.forEachIndexed { i, page ->
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
index 18eff611..df794d2f 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java
@@ -4,6 +4,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+import org.apache.pdfbox.Loader;
import org.junit.jupiter.api.Assertions;
import tools.jackson.databind.json.JsonMapper;
import com.jayway.jsonpath.JsonPath;
@@ -19,10 +20,7 @@ import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import java.io.File;
-import java.util.Arrays;
-import java.util.Base64;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
@SpringBootTest(properties = {
"management.endpoint.metrics.enabled=true",
@@ -83,6 +81,56 @@ public class JsonApiTest extends TestUtils.CanWatchOperationCount {
@Test
@SneakyThrows
+ public void sign_with_placeholder() {
+ try (val watcher = OperationCountWatcher("operation:sign", "status:ok")) {
+ final String pdf = Base64.getEncoder().encodeToString(
+ IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/placeholder.pdf")));
+
+ final String signRequestID = UUID.randomUUID().toString();
+ final String signRequest = om.writeValueAsString(
+ Map.of(
+ "requestID", signRequestID,
+ "inputData", pdf,
+ "parameters", Map.of(
+ "connector", "jks",
+ "transactionId", UUID.randomUUID().toString(),
+ "configurationOverrides", Map.of(
+ "propertyEntries", List.of(
+ Map.of("key", "enable_placeholder_search", "value", "true"),
+ Map.of("key", "placeholder_mode", "value", "0"),
+ Map.of("key", "placeholder_id", "value", "1")
+ )
+ )
+ )
+ )
+ );
+
+ final String signResponse = mvc.perform(
+ post("/api/v2/sign/single")
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON)
+ .content(signRequest)
+ )
+ .andExpect(status().isOk())
+ .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$.requestID").value(signRequestID))
+ .andExpect(jsonPath("$.signedPDF").isNotEmpty())
+ .andExpect(jsonPath("$.verificationResponse").exists())
+ .andReturn().getResponse().getContentAsString();
+
+ final byte[] signedPDF = Base64.getDecoder().decode(JsonPath.<String>read(signResponse, "$.signedPDF"));
+ Assertions.assertArrayEquals(
+ new byte[]{'%', 'P', 'D', 'F', '-'}, Arrays.copyOfRange(signedPDF, 0, 5),
+ "Signed data looks PDF-ish (%PDF- header)");
+
+ try (val doc = Loader.loadPDF(signedPDF)) {
+ Assertions.assertEquals(1, doc.getNumberOfPages(), "The placeholder on page 1 should be found & used");
+ }
+ }
+ }
+
+ @Test
+ @SneakyThrows
public void verify_single() {
try (val watcher = OperationCountWatcher("operation:verify", "status:ok")) {
final String pdf = Base64.getEncoder().encodeToString(
diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties
index 128cb883..34f78e6f 100644
--- a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties
+++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties
@@ -101,5 +101,3 @@ include.01 = profiles/*.properties
# Legt das Standard-Signaturprofil fest
sig_obj.type.default=SIGNATURBLOCK_SMALL_DE_NOTE
-
-
diff --git a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
index 242920df..c26164c4 100644
--- a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
+++ b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
@@ -57,6 +57,9 @@ whitelist.url.01=^.*$
allow.ext.overwrite=true
ext.overwrite.wl.01=sig_obj.type.defadult
+ext.overwrite.wl.02=enable_placeholder_search
+ext.overwrite.wl.03=placeholder_mode
+ext.overwrite.wl.04=placeholder_id
default.protectPDF = true
diff --git a/pdf-as-web/src/test/resources/data/placeholder.pdf b/pdf-as-web/src/test/resources/data/placeholder.pdf
new file mode 100644
index 00000000..146da8bf
--- /dev/null
+++ b/pdf-as-web/src/test/resources/data/placeholder.pdf
Binary files differ