From 801dcdb463faaf84538bbd2e0b209c3d21737a5b Mon Sep 17 00:00:00 2001 From: Danny Lau Date: Sat, 25 May 2024 00:22:01 +0800 Subject: [PATCH 01/61] #1214 Only take files that are good for processing --- .../software/SPDF/config/AppConfig.java | 26 +++ .../pipeline/PipelineDirectoryProcessor.java | 19 +- .../software/SPDF/utils/FileMonitor.java | 162 ++++++++++++++++++ 3 files changed, 202 insertions(+), 5 deletions(-) create mode 100644 src/main/java/stirling/software/SPDF/utils/FileMonitor.java diff --git a/src/main/java/stirling/software/SPDF/config/AppConfig.java b/src/main/java/stirling/software/SPDF/config/AppConfig.java index 16618e1e..3723e4f8 100644 --- a/src/main/java/stirling/software/SPDF/config/AppConfig.java +++ b/src/main/java/stirling/software/SPDF/config/AppConfig.java @@ -2,8 +2,10 @@ package stirling.software.SPDF.config; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Properties; +import java.util.function.Predicate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; @@ -108,4 +110,28 @@ public class AppConfig { public boolean missingActivSecurity() { return false; } + + @Bean(name = "watchedFoldersDir") + public String watchedFoldersDir() { + return "./pipeline/watchedFolders/"; + } + + @Bean(name = "finishedFoldersDir") + public String finishedFoldersDir() { + return "./pipeline/finishedFolders/"; + } + + @Bean(name = "directoryFilter") + public Predicate processPDFOnlyFilter() { + return path -> { + if (Files.isDirectory(path)) { + return !path.toString() + .contains( + "processing"); + } else { + String fileName = path.getFileName().toString(); + return fileName.endsWith(".pdf"); + } + }; + } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java index c61b29e9..ce7e1b94 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java @@ -19,6 +19,7 @@ import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import org.springframework.scheduling.annotation.Scheduled; @@ -28,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; +import stirling.software.SPDF.utils.FileMonitor; @Service public class PipelineDirectoryProcessor { @@ -35,11 +37,18 @@ public class PipelineDirectoryProcessor { private static final Logger logger = LoggerFactory.getLogger(PipelineDirectoryProcessor.class); @Autowired private ObjectMapper objectMapper; @Autowired private ApiDocService apiDocService; - - final String watchedFoldersDir = "./pipeline/watchedFolders/"; - final String finishedFoldersDir = "./pipeline/finishedFolders/"; - @Autowired PipelineProcessor processor; + @Autowired FileMonitor fileMonitor; + + final String watchedFoldersDir; + final String finishedFoldersDir; + + public PipelineDirectoryProcessor( + @Qualifier("watchedFoldersDir") String watchedFoldersDir, + @Qualifier("finishedFoldersDir") String finishedFoldersDir) { + this.watchedFoldersDir = watchedFoldersDir; + this.finishedFoldersDir = finishedFoldersDir; + } @Scheduled(fixedRate = 60000) public void scanFolders() { @@ -130,7 +139,7 @@ public class PipelineDirectoryProcessor { throws IOException { try (Stream paths = Files.list(dir)) { if ("automated".equals(operation.getParameters().get("fileInput"))) { - return paths.filter(path -> !Files.isDirectory(path) && !path.equals(jsonFile)) + return paths.filter(path -> !Files.isDirectory(path) && !path.equals(jsonFile) && fileMonitor.isFileReadyForProcessing(path)) .map(Path::toFile) .toArray(File[]::new); } else { diff --git a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java new file mode 100644 index 00000000..feff9c16 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java @@ -0,0 +1,162 @@ +package stirling.software.SPDF.utils; + +import static java.nio.file.StandardWatchEventKinds.*; + +import java.io.IOException; +import java.nio.file.*; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +public class FileMonitor { + private static final Logger logger = LoggerFactory.getLogger(FileMonitor.class); + private final Map path2KeyMapping; + private final Set newlyDiscoveredFiles; + private final ConcurrentHashMap.KeySetView readyForProcessingFiles; + private final WatchService watchService; + private final Predicate pathFilter; + private Set stagingFiles; + + /** + * @param rootDirectory the root directory to monitor + * @param pathFilter the filter to apply to the paths, return true if the path should be + * monitored, false otherwise + * @throws IOException + */ + @Autowired + public FileMonitor( + @Qualifier("watchedFoldersDir") String rootDirectory, + @Qualifier("directoryFilter") Predicate pathFilter) + throws IOException { + this.newlyDiscoveredFiles = new HashSet<>(); + this.path2KeyMapping = new HashMap<>(); + this.stagingFiles = new HashSet<>(); + this.pathFilter = pathFilter; + this.readyForProcessingFiles = ConcurrentHashMap.newKeySet(); + this.watchService = FileSystems.getDefault().newWatchService(); + + Path path = Path.of(rootDirectory); + recursivelyRegisterEntry(path); + + logger.info("Created a new file tracker for directory: {}", rootDirectory); + } + + private boolean shouldNotProcess(Path path) { + return !pathFilter.test(path); + } + + private void recursivelyRegisterEntry(Path dir) throws IOException { + WatchKey key = dir.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); + path2KeyMapping.put(dir, key); + logger.info("Registered directory: {}", dir); + + try (Stream directoryVisitor = Files.walk(dir, 1)) { + final Iterator iterator = directoryVisitor.iterator(); + while (iterator.hasNext()) { + Path path = iterator.next(); + if (path.equals(dir) || shouldNotProcess(path)) continue; + + if (Files.isDirectory(path)) { + recursivelyRegisterEntry(path); + } else if (Files.isRegularFile(path)) { + handleFileCreation(path); + } + } + } + } + + @Scheduled(fixedRate = 5000) + public void trackFiles() { + /* + All files observed changes in the last iteration will be considered as staging files. + If those files are not modified in current iteration, they will be considered as ready for processing. + */ + stagingFiles = new HashSet<>(newlyDiscoveredFiles); + readyForProcessingFiles.clear(); + WatchKey key; + while ((key = watchService.poll()) != null) { + final Path watchingDir = (Path) key.watchable(); + key.pollEvents() + .forEach( + (evt) -> { + final Path path = (Path) evt.context(); + final WatchEvent.Kind kind = evt.kind(); + if (shouldNotProcess(path)) return; + + try { + if (Files.isDirectory(path)) { + if (kind == ENTRY_CREATE) { + handleDirectoryCreation(path); + } + /* + we don't need to handle directory deletion or modification + - directory deletion will be handled by key.reset() + - directory modification indicates a new file creation or deletion, which is handled by below + */ + } + Path relativePathFromRoot = watchingDir.resolve(path); + if (kind == ENTRY_CREATE) { + handleFileCreation(relativePathFromRoot); + } else if (kind == ENTRY_DELETE) { + handleFileRemoval(relativePathFromRoot); + } else if (kind == ENTRY_MODIFY) { + handleFileModification(relativePathFromRoot); + } + } catch (Exception e) { + logger.error("Error while processing file: {}", path, e); + } + }); + + boolean isKeyValid = key.reset(); + if (!isKeyValid) { // key is invalid when the directory itself is no longer exists + path2KeyMapping.remove((Path) key.watchable()); + if (path2KeyMapping.isEmpty()) { + logger.warn( + "FileMonitor is not monitoring any directory, no even the root directory."); + } + } + } + readyForProcessingFiles.addAll(stagingFiles); + } + + private void handleDirectoryCreation(Path dir) throws IOException { + WatchKey key = dir.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); + path2KeyMapping.put(dir, key); + } + + private void handleFileRemoval(Path path) { + newlyDiscoveredFiles.remove(path); + stagingFiles.remove(path); + } + + private void handleFileCreation(Path path) { + newlyDiscoveredFiles.add(path); + stagingFiles.remove(path); + } + + private void handleFileModification(Path path) { + // the logic is the same + handleFileCreation(path); + } + + /** + * Check if the file is ready for processing. + * + *

A file is ready for processing if it is not being modified for 5000ms. + * + * @param path the path of the file + * @return true if the file is ready for processing, false otherwise + */ + public boolean isFileReadyForProcessing(Path path) { + return readyForProcessingFiles.contains(path); + } +} From cd6f3862f6086665199b786d11964e6159a330a0 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Tue, 28 May 2024 10:27:44 +0200 Subject: [PATCH 02/61] add invalid Id Token message --- .../software/SPDF/controller/web/AccountWebController.java | 2 ++ src/main/resources/messages_ar_AR.properties | 1 + src/main/resources/messages_bg_BG.properties | 1 + src/main/resources/messages_ca_CA.properties | 1 + src/main/resources/messages_cs_CZ.properties | 1 + src/main/resources/messages_de_DE.properties | 1 + src/main/resources/messages_el_GR.properties | 1 + src/main/resources/messages_en_GB.properties | 1 + src/main/resources/messages_en_US.properties | 1 + src/main/resources/messages_es_ES.properties | 1 + src/main/resources/messages_eu_ES.properties | 1 + src/main/resources/messages_fr_FR.properties | 1 + src/main/resources/messages_hi_IN.properties | 1 + src/main/resources/messages_hu_HU.properties | 1 + src/main/resources/messages_id_ID.properties | 1 + src/main/resources/messages_it_IT.properties | 1 + src/main/resources/messages_ja_JP.properties | 1 + src/main/resources/messages_ko_KR.properties | 1 + src/main/resources/messages_nl_NL.properties | 1 + src/main/resources/messages_pl_PL.properties | 1 + src/main/resources/messages_pt_BR.properties | 1 + src/main/resources/messages_pt_PT.properties | 1 + src/main/resources/messages_ro_RO.properties | 1 + src/main/resources/messages_ru_RU.properties | 1 + src/main/resources/messages_sk_SK.properties | 1 + src/main/resources/messages_sr_LATN_RS.properties | 1 + src/main/resources/messages_sv_SE.properties | 1 + src/main/resources/messages_tr_TR.properties | 1 + src/main/resources/messages_uk_UA.properties | 1 + src/main/resources/messages_zh_CN.properties | 1 + src/main/resources/messages_zh_TW.properties | 1 + src/main/resources/templates/misc/flatten.html | 1 - 32 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java index b0490fb5..904a8ba0 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java @@ -129,6 +129,8 @@ public class AccountWebController { case "invalid_request": erroroauth = "login.oauth2invalidRequest"; break; + case "invalid_id_token": + erroroauth = "login.oauth2InvalidIdToken"; default: break; } diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 18b8e74c..85cdc661 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index 7f164568..012f2136 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 814e8bbf..c09e158d 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index 3e25e4a7..ef8858d8 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 6a5cc4ce..457ed462 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Ungültige Benutzerinformationsantwort login.oauth2invalidRequest=ungültige Anfrage login.oauth2AccessDenied=Zugriff abgelehnt login.oauth2InvalidTokenResponse=Ungültige Token-Antwort +login.oauth2InvalidIdToken=Ungültiges ID-Token #auto-redact diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index 335a1339..6677f478 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index cf4b6cf3..760cf23e 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 5a2258b4..041296e1 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 4f186c40..c7682dca 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 4784293c..d3ad41d5 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index bd87d628..eb3780c1 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index 9cb61c44..183148f4 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 49366bed..7604de8e 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index f1678612..45006806 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index bd1fd5d3..2fc60fd1 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Risposta relativa alle informazioni utente n login.oauth2invalidRequest=Richiesta non valida login.oauth2AccessDenied=Accesso negato login.oauth2InvalidTokenResponse=Risposta token non valida +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 30bdb928..527736b8 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 8af64f62..8bfed7ee 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index bdc0f8a7..0a1f75a6 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 5f61a111..6a7fdd9d 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index b1fe46ca..853ac33f 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index 439e8d36..1ee8657d 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index 439c75fb..4032943e 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 27b9fd8a..b87c23b3 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_sk_SK.properties b/src/main/resources/messages_sk_SK.properties index 9d5f5ed9..f488f459 100644 --- a/src/main/resources/messages_sk_SK.properties +++ b/src/main/resources/messages_sk_SK.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_sr_LATN_RS.properties b/src/main/resources/messages_sr_LATN_RS.properties index 8adf67bf..f6e4543d 100644 --- a/src/main/resources/messages_sr_LATN_RS.properties +++ b/src/main/resources/messages_sr_LATN_RS.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 621bdbe1..127d3718 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index 560501b2..f277a083 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index bef38428..75336bc5 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 2d7cd4b5..cda654d6 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 2afd7e61..120bff9d 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -457,6 +457,7 @@ login.oauth2InvalidUserInfoResponse=Invalid User Info Response login.oauth2invalidRequest=Invalid Request login.oauth2AccessDenied=Access Denied login.oauth2InvalidTokenResponse=Invalid Token Response +login.oauth2InvalidIdToken=Invalid Id Token #auto-redact diff --git a/src/main/resources/templates/misc/flatten.html b/src/main/resources/templates/misc/flatten.html index a5ca814e..bf6c7382 100644 --- a/src/main/resources/templates/misc/flatten.html +++ b/src/main/resources/templates/misc/flatten.html @@ -25,7 +25,6 @@ -
From 5d70217961afc0247295d91a44ae558d7a364941 Mon Sep 17 00:00:00 2001 From: "GitHub Action action@github.com" Date: Tue, 28 May 2024 17:33:09 +0000 Subject: [PATCH 03/61] :memo: Sync README > Made via sync_files.yml --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b6afec3..159a6e8e 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ Stirling PDF currently supports 28! | English (US) (en_US) | ![100%](https://geps.dev/progress/100) | | Arabic (العربية) (ar_AR) | ![41%](https://geps.dev/progress/41) | | German (Deutsch) (de_DE) | ![100%](https://geps.dev/progress/100) | -| French (Français) (fr_FR) | ![95%](https://geps.dev/progress/95) | +| French (Français) (fr_FR) | ![94%](https://geps.dev/progress/94) | | Spanish (Español) (es_ES) | ![96%](https://geps.dev/progress/96) | | Simplified Chinese (简体中文) (zh_CN) | ![96%](https://geps.dev/progress/96) | | Traditional Chinese (繁體中文) (zh_TW) | ![95%](https://geps.dev/progress/95) | @@ -183,7 +183,7 @@ Stirling PDF currently supports 28! | Japanese (日本語) (ja_JP) | ![88%](https://geps.dev/progress/88) | | Dutch (Nederlands) (nl_NL) | ![86%](https://geps.dev/progress/86) | | Greek (Ελληνικά) (el_GR) | ![86%](https://geps.dev/progress/86) | -| Turkish (Türkçe) (tr_TR) | ![99%](https://geps.dev/progress/99) | +| Turkish (Türkçe) (tr_TR) | ![98%](https://geps.dev/progress/98) | | Indonesia (Bahasa Indonesia) (id_ID) | ![79%](https://geps.dev/progress/79) | | Hindi (हिंदी) (hi_IN) | ![80%](https://geps.dev/progress/80) | | Hungarian (Magyar) (hu_HU) | ![79%](https://geps.dev/progress/79) | From ab7acb5db39e3fe5138884d9b0050d9f94aa508b Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Tue, 28 May 2024 19:44:35 +0100 Subject: [PATCH 04/61] changes credit dev-cb in cloudron forum --- src/main/resources/static/css/home.css | 17 +++++++++-------- src/main/resources/static/css/navbar.css | 2 +- .../resources/static/css/theme/componentes.css | 6 ++++-- src/main/resources/static/css/theme/font.css | 2 +- src/main/resources/static/css/theme/theme.css | 2 +- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/resources/static/css/home.css b/src/main/resources/static/css/home.css index a6f89ed0..8b70dc7f 100644 --- a/src/main/resources/static/css/home.css +++ b/src/main/resources/static/css/home.css @@ -5,7 +5,7 @@ font-size: 16px; margin-bottom: 2rem; padding: 0.75rem 3.5rem; - border: 0.1rem solid var(--md-sys-color-outline-variant); + border: 1px solid var(--md-sys-color-outline-variant); border-radius: 3rem; outline-color: var(--md-sys-color-outline-variant); } @@ -19,12 +19,12 @@ .features-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 3fr)); - gap: 25px 30px; + gap: 30px 30px; } .feature-card { - border: 2px solid var(--md-sys-color-surface-5); - border-radius: 2rem; + border: 1px solid var(--md-sys-color-surface-5); + border-radius: 1.75rem; padding: 1.25rem; display: flex; flex-direction: column; @@ -47,13 +47,13 @@ } .feature-card .card-text { - flex: 1; + font-size: .875rem; } .feature-card:hover { cursor: pointer; - transform: scale(1.1); - box-shadow: var(--md-sys-elevation-3); + transform: scale(1.025); + box-shadow: var(--md-sys-elevation-2); } .card-title.text-primary { @@ -79,11 +79,12 @@ } #tool-text { - margin: 0.5rem 0.5rem 0rem; + margin: 0.0rem 0 0 1.25rem; } .card-title { margin-bottom: 1rem; + font-size: 1.1rem; } /* Only show the favorite icons when the parent card is being hovered over */ diff --git a/src/main/resources/static/css/navbar.css b/src/main/resources/static/css/navbar.css index ddeab5aa..a8845f29 100644 --- a/src/main/resources/static/css/navbar.css +++ b/src/main/resources/static/css/navbar.css @@ -75,7 +75,7 @@ } .icon-text { - margin-left: 4px; + margin-left: 8px; margin-right: 4px; display: inline-flex; flex-direction: column; diff --git a/src/main/resources/static/css/theme/componentes.css b/src/main/resources/static/css/theme/componentes.css index d767d59d..7e3f744e 100644 --- a/src/main/resources/static/css/theme/componentes.css +++ b/src/main/resources/static/css/theme/componentes.css @@ -187,8 +187,8 @@ td { .feature-card .nav-icon { vertical-align: middle; font-size: 2rem !important; - padding: 0.5rem; - border-radius: 1.25rem; + padding: 0.75rem; + border-radius: 0.9rem; color: var(--md-sys-color-surface); } @@ -798,6 +798,8 @@ textarea.form-control { } .nav-link { + display: flex; + align-items: center; transition: none !important; padding: 0.5rem 1rem !important; border: 1px transparent; diff --git a/src/main/resources/static/css/theme/font.css b/src/main/resources/static/css/theme/font.css index dfb1c1b8..f245dd32 100644 --- a/src/main/resources/static/css/theme/font.css +++ b/src/main/resources/static/css/theme/font.css @@ -7,7 +7,7 @@ .material-symbols-rounded { font-family: 'Material Symbols Rounded'; - font-weight: normal; + font-weight: 300; font-style: normal; font-size: 24px; line-height: 1; diff --git a/src/main/resources/static/css/theme/theme.css b/src/main/resources/static/css/theme/theme.css index 3c9565d1..4f7be33e 100644 --- a/src/main/resources/static/css/theme/theme.css +++ b/src/main/resources/static/css/theme/theme.css @@ -30,5 +30,5 @@ } .no-fill { - font-variation-settings: var(--md-sys-icon-fill-0); + /* font-variation-settings: var(--md-sys-icon-fill-0); */ } \ No newline at end of file From 6c790299aa6edf28ab808d9bb10969fd62c8e4f5 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Tue, 28 May 2024 19:48:02 +0100 Subject: [PATCH 05/61] readd hover --- src/main/resources/static/css/home.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/static/css/home.css b/src/main/resources/static/css/home.css index 8b70dc7f..07a1350f 100644 --- a/src/main/resources/static/css/home.css +++ b/src/main/resources/static/css/home.css @@ -52,7 +52,7 @@ .feature-card:hover { cursor: pointer; - transform: scale(1.025); + transform: scale(1.08); box-shadow: var(--md-sys-elevation-2); } From b7dc248f93f73f20223c8a9f95e1b39655dec91b Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Tue, 28 May 2024 19:56:09 +0100 Subject: [PATCH 06/61] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0b3c26da..811cb15b 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ plugins { import com.github.jk1.license.render.* group = 'stirling.software' -version = '0.24.6' +version = '0.25.0' //17 is lowest but we support and recommend 21 sourceCompatibility = '17' From 50fc13b30cfd4bc263b07506e5f07cc551485dc6 Mon Sep 17 00:00:00 2001 From: "GitHub Action action@github.com" Date: Tue, 28 May 2024 18:56:27 +0000 Subject: [PATCH 07/61] :floppy_disk: Sync Versions > Made via sync_files.yml --- chart/stirling-pdf/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/stirling-pdf/Chart.yaml b/chart/stirling-pdf/Chart.yaml index aa960f02..68eaee65 100644 --- a/chart/stirling-pdf/Chart.yaml +++ b/chart/stirling-pdf/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.24.6 +appVersion: 0.25.0 description: locally hosted web application that allows you to perform various operations on PDF files home: https://github.com/Stirling-Tools/Stirling-PDF From 2ab5bc1e1822f172a173b5a7c0e345c5beeb17cd Mon Sep 17 00:00:00 2001 From: IT Creativity + Art Team Date: Wed, 29 May 2024 09:56:21 +0300 Subject: [PATCH 08/61] Update messages_bg_BG.properties Updated/improved Bulgarian language strings. Thank you. --- src/main/resources/messages_bg_BG.properties | 64 ++++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index 012f2136..a389b67a 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -59,8 +59,8 @@ deleteCurrentUserMessage=Не може да се изтрие вписания deleteUsernameExistsMessage=Потребителското име не съществува и не може да бъде изтрито. downgradeCurrentUserMessage=Не може да се понижи ролята на текущия потребител downgradeCurrentUserLongMessage=Не може да се понижи ролята на текущия потребител. Следователно текущият потребител няма да бъде показан. -userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user. -userAlreadyExistsWebMessage=The user already exists as an web user. +userAlreadyExistsOAuthMessage=Потребителят вече съществува като OAuth2 потребител. +userAlreadyExistsWebMessage=Потребителят вече съществува като уеб-потребител. error=Грешка oops=Опаа! help=Помощ @@ -105,18 +105,18 @@ pipelineOptions.validateButton=Валидирай ############# # NAVBAR # ############# -navbar.favorite=Favorites +navbar.favorite=Любими navbar.darkmode=Тъмна тема -navbar.language=Languages +navbar.language=Езици navbar.settings=Настройки -navbar.allTools=Tools -navbar.multiTool=Multi Tools -navbar.sections.organize=Organize -navbar.sections.convertTo=Convert to PDF -navbar.sections.convertFrom=Convert from PDF -navbar.sections.security=Sign & Security -navbar.sections.advance=Advanced -navbar.sections.edit=View & Edit +navbar.allTools=Инструменти +navbar.multiTool=Мулти инструменти +navbar.sections.organize=Организирайте +navbar.sections.convertTo=Преобразуване в PDF +navbar.sections.convertFrom=Преобразуване от PDF +navbar.sections.security=Подписване и сигурност +navbar.sections.advance=Разширено +navbar.sections.edit=Преглед и редактиране ############# # SETTINGS # @@ -185,7 +185,7 @@ adminUserSettings.internalApiUser=Вътрешен API потребител adminUserSettings.forceChange=Принудете потребителя да промени потребителското име/парола при влизане adminUserSettings.submit=Съхранете потребителя adminUserSettings.changeUserRole=Промяна на ролята на потребителя -adminUserSettings.authenticated=Authenticated +adminUserSettings.authenticated=Удостоверен ############# # HOME-PAGE # @@ -267,7 +267,7 @@ home.fileToPDF.desc=Преобразуване почти всеки файл к fileToPDF.tags=трансформация,формат,документ,изображение,слайд,текст,преобразуване,офис,документи,word,excel,powerpoint home.ocr.title=OCR / Почистващи сканирания -home.ocr.desc=Почистване, сканира и открива текст от изображения към PDF и го добавя отново като текст. +home.ocr.desc=Почиства, сканира и открива текст от изображения в PDF и го добавя отново като текст. ocr.tags=разпознаване,текст,изображение,сканиране,четене,идентифициране,откриване,редактиране @@ -313,7 +313,7 @@ home.flatten.desc=Премахнете всички интерактивни е flatten.tags=статичен,деактивиран,неинтерактивен,рационализиран home.repair.title=Поправи -home.repair.desc=Опитва се да поправи повреден/счупен PDF +home.repair.desc=Опитва се да поправи повреден PDF repair.tags=поправка,възстановяване,корекция,възстановяване home.removeBlanks.title=Премахване на празни страници @@ -364,7 +364,7 @@ home.autoSplitPDF.title=Автоматично разделяне на стра home.autoSplitPDF.desc=Автоматично разделяне на сканиран PDF файл с QR код за разделяне на физически сканирани страници autoSplitPDF.tags=QR-базиран,отделен,сканиране-сегмент,организиране -home.sanitizePdf.title=Дезинфенкцирам +home.sanitizePdf.title=Обеззаразяване home.sanitizePdf.desc=Премахване на скриптове и други елементи от PDF файлове sanitizePdf.tags=чисти,сигурни,безопасни,премахване-заплахи @@ -382,8 +382,8 @@ home.MarkdownToPDF.desc=Преобразува всеки Markdown файл къ MarkdownToPDF.tags=маркиране,уеб-съдържание,трансформация,преобразуване -home.getPdfInfo.title=Вземете ЦЯЛАТА информация към PDF -home.getPdfInfo.desc=Взема всяка възможна информация от PDF файлове +home.getPdfInfo.title=Вземете ЦЯЛАТА информация от PDF +home.getPdfInfo.desc=Взима всяка възможна информация от PDF файлове getPdfInfo.tags=информация,данни,статистики,статистика @@ -405,7 +405,7 @@ home.autoRedact.title=Автоматично редактиране home.autoRedact.desc=Автоматично редактира (зачернява) текст в PDF въз основа на въведен текст autoRedact.tags=Редактиране,Скриване,затъмняване,черен,маркер,скрит -home.tableExtraxt.title=PDF to CSV +home.tableExtraxt.title=PDF в CSV home.tableExtraxt.desc=Извлича таблици от PDF, като ги конвертира в CSV tableExtraxt.tags=CSV,извличане на таблица,извличане,конвертиране @@ -452,12 +452,12 @@ login.locked=Вашият акаунт е заключен. login.signinTitle=Моля впишете се login.ssoSignIn=Влизане чрез еднократно влизане login.oauth2AutoCreateDisabled=OAUTH2 Автоматично създаване на потребител е деактивирано -login.oauth2RequestNotFound=Authorization request not found -login.oauth2InvalidUserInfoResponse=Invalid User Info Response -login.oauth2invalidRequest=Invalid Request -login.oauth2AccessDenied=Access Denied -login.oauth2InvalidTokenResponse=Invalid Token Response -login.oauth2InvalidIdToken=Invalid Id Token +login.oauth2RequestNotFound=Заявката за оторизация не е намерена +login.oauth2InvalidUserInfoResponse=Невалидна информация за потребителя +login.oauth2invalidRequest=Невалидна заявка +login.oauth2AccessDenied=Отказан достъп +login.oauth2InvalidTokenResponse=Невалиден отговор на токена +login.oauth2InvalidIdToken=Невалиден токен за идентификатор #auto-redact @@ -638,7 +638,7 @@ scalePages.submit=Подайте #certSign -certSign.title=Подписване на сертификат +certSign.title=Подписване със сертификат certSign.header=Подпишете PDF с вашия сертификат (В процес на работа) certSign.selectPDF=Изберете PDF файл за подписване: certSign.jksNote=Забележка: Ако вашият тип сертификат не е в списъка по-долу, моля, конвертирайте го във файл на Java Keystore (.jks) с помощта на инструмента за команден ред keytool. След това изберете опцията за .jks файл по-долу. @@ -758,7 +758,7 @@ extractImages.submit=Извличане fileToPDF.title=Файл към PDF fileToPDF.header=Конвертирайте всеки файл към PDF fileToPDF.credit=Тази услуга използва LibreOffice и Unoconv за преобразуване на файлове. -fileToPDF.supportedFileTypesInfo=Supported File types +fileToPDF.supportedFileTypesInfo=Поддържание файлови типове fileToPDF.supportedFileTypes=Поддържаните типове файлове трябва да включват по-долу, но за пълен актуализиран списък на поддържаните формати, моля, вижте документацията на LibreOffice fileToPDF.submit=Преобразуване към PDF @@ -767,10 +767,10 @@ fileToPDF.submit=Преобразуване към PDF compress.title=Компресиране compress.header=Компресиране на PDF compress.credit=Тази услуга използва Ghostscript за PDF компресиране/оптимизиране. -compress.selectText.1=Ръчен режим - От 1 до 4 +compress.selectText.1=Ръчен режим - от 1 до 4 compress.selectText.2=Ниво на оптимизация: compress.selectText.3=4 (Ужасно за текстови изображения) -compress.selectText.4=Автоматичен режим - Автоматично настройва качеството, за да получи PDF точен размер +compress.selectText.4=Автоматичен режим - Автоматично настройва качеството, за да получи PDF с точен размер compress.selectText.5=Очакван PDF размер (напр. 25МБ, 10.8МБ, 25КБ) compress.submit=Компресиране @@ -811,7 +811,7 @@ pdfOrganiser.placeholder=(напр. 1,3,2 или 4-8,2,10-12 или 2n-1) #multiTool multiTool.title=PDF Мулти инструмент multiTool.header=PDF Мулти инструмент -multiTool.uploadPrompts=File Name +multiTool.uploadPrompts=Име на файл #view pdf viewPdf.title=Преглед на PDF @@ -910,8 +910,8 @@ watermark.selectText.7=Непрозрачност (0% - 100%): watermark.selectText.8=Тип воден знак: watermark.selectText.9=Изображение за воден знак: watermark.submit=Добавяне на воден знак -watermark.type.1=Text -watermark.type.2=Image +watermark.type.1=Текст +watermark.type.2=Изображение #Change permissions From 7e8b86e6eb72dd2835dc9769436cc4e996174c7a Mon Sep 17 00:00:00 2001 From: albanobattistella <34811668+albanobattistella@users.noreply.github.com> Date: Wed, 29 May 2024 12:08:25 +0200 Subject: [PATCH 09/61] Update messages_it_IT.properties --- src/main/resources/messages_it_IT.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 2fc60fd1..9f74c12f 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -417,7 +417,7 @@ autoSizeSplitPDF.tags=pdf,diviso,documento,organizzazione home.overlay-pdfs.title=Sovrapposizione di PDF home.overlay-pdfs.desc=Sovrappone i PDF sopra un altro PDF -overlay-pdfs.tags=Svrapponi +overlay-pdfs.tags=Sovrapponi home.split-by-sections.title=Dividi PDF per sezioni home.split-by-sections.desc=Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole @@ -457,7 +457,7 @@ login.oauth2InvalidUserInfoResponse=Risposta relativa alle informazioni utente n login.oauth2invalidRequest=Richiesta non valida login.oauth2AccessDenied=Accesso negato login.oauth2InvalidTokenResponse=Risposta token non valida -login.oauth2InvalidIdToken=Invalid Id Token +login.oauth2InvalidIdToken=Id Token non valido #auto-redact From 65b9544942d7792b845d8722fe7d2560162dcba6 Mon Sep 17 00:00:00 2001 From: Danny Lau Date: Wed, 29 May 2024 23:01:53 +0800 Subject: [PATCH 10/61] #1214 Fix unable to create FileMonitor if the root directory does not exist --- .../software/SPDF/utils/FileMonitor.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java index feff9c16..c11352ef 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java +++ b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java @@ -24,13 +24,12 @@ public class FileMonitor { private final ConcurrentHashMap.KeySetView readyForProcessingFiles; private final WatchService watchService; private final Predicate pathFilter; + private final Path rootDir; private Set stagingFiles; /** * @param rootDirectory the root directory to monitor - * @param pathFilter the filter to apply to the paths, return true if the path should be - * monitored, false otherwise - * @throws IOException + * @param pathFilter the filter to apply to the paths, return true if the path should be monitored, false otherwise */ @Autowired public FileMonitor( @@ -43,11 +42,7 @@ public class FileMonitor { this.pathFilter = pathFilter; this.readyForProcessingFiles = ConcurrentHashMap.newKeySet(); this.watchService = FileSystems.getDefault().newWatchService(); - - Path path = Path.of(rootDirectory); - recursivelyRegisterEntry(path); - - logger.info("Created a new file tracker for directory: {}", rootDirectory); + this.rootDir = Path.of(rootDirectory); } private boolean shouldNotProcess(Path path) { @@ -82,6 +77,20 @@ public class FileMonitor { */ stagingFiles = new HashSet<>(newlyDiscoveredFiles); readyForProcessingFiles.clear(); + + if (path2KeyMapping.isEmpty()) { + logger.warn( + "not monitoring any directory, even the root directory itself: {}", rootDir); + if (Files.exists( + rootDir)) { // if the root directory exists, re-register the root directory + try { + recursivelyRegisterEntry(rootDir); + } catch (IOException e) { + logger.error("unable to register monitoring", e); + } + } + } + WatchKey key; while ((key = watchService.poll()) != null) { final Path watchingDir = (Path) key.watchable(); @@ -119,10 +128,6 @@ public class FileMonitor { boolean isKeyValid = key.reset(); if (!isKeyValid) { // key is invalid when the directory itself is no longer exists path2KeyMapping.remove((Path) key.watchable()); - if (path2KeyMapping.isEmpty()) { - logger.warn( - "FileMonitor is not monitoring any directory, no even the root directory."); - } } } readyForProcessingFiles.addAll(stagingFiles); From f61bbd312f647f7f7fc8f82433c4f30821beefe5 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Wed, 29 May 2024 22:09:09 +0200 Subject: [PATCH 11/61] feat: Force UTF-8 encoding of input characters --- src/main/java/stirling/software/SPDF/utils/FileToPdf.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java index 2a891c08..a381583c 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java +++ b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java @@ -42,6 +42,7 @@ public class FileToPdf { List command = new ArrayList<>(); if (!htmlFormatsInstalled) { command.add("weasyprint"); + command.add("-e utf-8"); command.add(tempInputFile.toString()); command.add(tempOutputFile.toString()); From 316b4e42afbac31696dc188bb2de1ab783d47a03 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 29 May 2024 23:36:14 +0100 Subject: [PATCH 12/61] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 159a6e8e..6f04fe12 100644 --- a/README.md +++ b/README.md @@ -213,10 +213,10 @@ For example in the settings.yml you have ```yaml system: - defaultLocale: 'en-US' + enableLogin: 'true' ``` -To have this via an environment variable you would have ``SYSTEM_DEFAULTLOCALE`` +To have this via an environment variable you would have ``SYSTEM_ENABLELOGIN`` The Current list of settings is From 76dc90d58716be6ab5128110127859b113027997 Mon Sep 17 00:00:00 2001 From: Paul Canham Date: Thu, 30 May 2024 09:42:23 +0100 Subject: [PATCH 13/61] fi: type correction around google OAUTH2 provider --- .../stirling/software/SPDF/model/ApplicationProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java b/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java index c2253b21..8b78e130 100644 --- a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java +++ b/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java @@ -357,7 +357,7 @@ public class ApplicationProperties { public Provider get(String registrationId) throws Exception { switch (registrationId) { - case "gogole": + case "google": return getGoogle(); case "github": return getGithub(); From 1572404e6faad18f46724ead3d1638397f18fb03 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Thu, 30 May 2024 11:42:49 +0200 Subject: [PATCH 14/61] Fix: Can't select the Draw tool in View #1328 --- src/main/resources/templates/view-pdf.html | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/resources/templates/view-pdf.html b/src/main/resources/templates/view-pdf.html index bce0576f..f99c72c1 100644 --- a/src/main/resources/templates/view-pdf.html +++ b/src/main/resources/templates/view-pdf.html @@ -321,10 +321,7 @@ See https://github.com/adobe-type-tools/cmap-resources - - @@ -334,21 +331,14 @@ See https://github.com/adobe-type-tools/cmap-resources - - - -

- From dfb8ba857f9c819b55d100319f8410f3956f87cd Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Thu, 30 May 2024 11:52:13 +0200 Subject: [PATCH 15/61] add properties Docker --- exampleYmlFiles/docker-compose-latest-security-with-sso.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exampleYmlFiles/docker-compose-latest-security-with-sso.yml b/exampleYmlFiles/docker-compose-latest-security-with-sso.yml index 592daeff..a71d88da 100644 --- a/exampleYmlFiles/docker-compose-latest-security-with-sso.yml +++ b/exampleYmlFiles/docker-compose-latest-security-with-sso.yml @@ -27,6 +27,8 @@ services: SECURITY_OAUTH2_CLIENTID: ".apps.googleusercontent.com" # Client ID from your provider SECURITY_OAUTH2_CLIENTSECRET: "" # Client Secret from your provider SECURITY_OAUTH2_SCOPES: "openid,profile,email" # Expected OAuth2 Scope + SECURITY_OAUTH2_USEASUSERNAME: "email" # Default is 'email'; custom fields can be used as the username + SECURITY_OAUTH2_PROVIDER: "google" # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak' PUID: 1002 PGID: 1002 UMASK: "022" From 7ac41d7863504df07b919cb7e45c131059106087 Mon Sep 17 00:00:00 2001 From: "GitHub Action action@github.com" Date: Thu, 30 May 2024 19:54:03 +0000 Subject: [PATCH 16/61] :memo: Sync README > Made via sync_files.yml --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f04fe12..9ec41855 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ Stirling PDF currently supports 28! | Indonesia (Bahasa Indonesia) (id_ID) | ![79%](https://geps.dev/progress/79) | | Hindi (हिंदी) (hi_IN) | ![80%](https://geps.dev/progress/80) | | Hungarian (Magyar) (hu_HU) | ![79%](https://geps.dev/progress/79) | -| Bulgarian (Български) (bg_BG) | ![96%](https://geps.dev/progress/96) | +| Bulgarian (Български) (bg_BG) | ![99%](https://geps.dev/progress/99) | | Sebian Latin alphabet (Srpski) (sr_LATN_RS) | ![81%](https://geps.dev/progress/81) | | Ukrainian (Українська) (uk_UA) | ![87%](https://geps.dev/progress/87) | | Slovakian (Slovensky) (sk_SK) | ![96%](https://geps.dev/progress/96) | From 059296d444f6869e74a7f37388274112dddaa777 Mon Sep 17 00:00:00 2001 From: onyxfin Date: Thu, 30 May 2024 22:01:29 +0200 Subject: [PATCH 17/61] Add files via upload --- src/main/resources/static/images/flags/hr.svg | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/resources/static/images/flags/hr.svg diff --git a/src/main/resources/static/images/flags/hr.svg b/src/main/resources/static/images/flags/hr.svg new file mode 100644 index 00000000..44fed27d --- /dev/null +++ b/src/main/resources/static/images/flags/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From aef0d32b5b9d2ec3bf671d7d366d843117ed0631 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Fri, 31 May 2024 11:31:07 +0200 Subject: [PATCH 18/61] add remove digital signature --- Endpoint-groups.md | 93 ++++++++-------- Version-groups.md | 103 +++++++++--------- .../SPDF/config/EndpointConfiguration.java | 2 + .../security/RemoveCertSignController.java | 71 ++++++++++++ .../controller/web/SecurityWebController.java | 7 ++ src/main/resources/messages_ar_AR.properties | 11 ++ src/main/resources/messages_bg_BG.properties | 11 ++ src/main/resources/messages_ca_CA.properties | 11 ++ src/main/resources/messages_cs_CZ.properties | 11 ++ src/main/resources/messages_de_DE.properties | 11 ++ src/main/resources/messages_el_GR.properties | 11 ++ src/main/resources/messages_en_GB.properties | 11 ++ src/main/resources/messages_en_US.properties | 11 ++ src/main/resources/messages_es_ES.properties | 11 ++ src/main/resources/messages_eu_ES.properties | 11 ++ src/main/resources/messages_fr_FR.properties | 11 ++ src/main/resources/messages_hi_IN.properties | 11 ++ src/main/resources/messages_hu_HU.properties | 11 ++ src/main/resources/messages_id_ID.properties | 11 ++ src/main/resources/messages_it_IT.properties | 11 ++ src/main/resources/messages_ja_JP.properties | 11 ++ src/main/resources/messages_ko_KR.properties | 11 ++ src/main/resources/messages_nl_NL.properties | 11 ++ src/main/resources/messages_pl_PL.properties | 11 ++ src/main/resources/messages_pt_BR.properties | 11 ++ src/main/resources/messages_pt_PT.properties | 11 ++ src/main/resources/messages_ro_RO.properties | 11 ++ src/main/resources/messages_ru_RU.properties | 11 ++ src/main/resources/messages_sk_SK.properties | 11 ++ .../resources/messages_sr_LATN_RS.properties | 11 ++ src/main/resources/messages_sv_SE.properties | 11 ++ src/main/resources/messages_tr_TR.properties | 11 ++ src/main/resources/messages_uk_UA.properties | 11 ++ src/main/resources/messages_zh_CN.properties | 11 ++ src/main/resources/messages_zh_TW.properties | 11 ++ .../resources/templates/fragments/navbar.html | 6 +- src/main/resources/templates/home.html | 3 + .../templates/security/remove-cert-sign.html | 35 ++++++ 38 files changed, 551 insertions(+), 99 deletions(-) create mode 100644 src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java create mode 100644 src/main/resources/templates/security/remove-cert-sign.html diff --git a/Endpoint-groups.md b/Endpoint-groups.md index d88ce058..9f906586 100644 --- a/Endpoint-groups.md +++ b/Endpoint-groups.md @@ -1,46 +1,47 @@ -| Operation | PageOps | Convert | Security | Other | CLI | Python | OpenCV | LibreOffice | OCRmyPDF | Java | Javascript | -|---------------------|---------|---------|----------|-------|------|--------|--------|-------------|----------|----------|------------| -| adjust-contrast | ✔️ | | | | | | | | | | ✔️ | -| auto-split-pdf | ✔️ | | | | | | | | | ✔️ | | -| crop | ✔️ | | | | | | | | | ✔️ | | -| extract-page | ✔️ | | | | | | | | | ✔️ | | -| merge-pdfs | ✔️ | | | | | | | | | ✔️ | | -| multi-page-layout | ✔️ | | | | | | | | | ✔️ | | -| pdf-organizer | ✔️ | | | | | | | | | ✔️ | ✔️ | -| pdf-to-single-page | ✔️ | | | | | | | | | ✔️ | | -| remove-pages | ✔️ | | | | | | | | | ✔️ | | -| rotate-pdf | ✔️ | | | | | | | | | ✔️ | | -| scale-pages | ✔️ | | | | | | | | | ✔️ | | -| split-pdfs | ✔️ | | | | | | | | | ✔️ | | -| file-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | | -| img-to-pdf | | ✔️ | | | | | | | | ✔️ | | -| pdf-to-html | | ✔️ | | | ✔️ | | | ✔️ | | | | -| pdf-to-img | | ✔️ | | | | | | | | ✔️ | | -| pdf-to-pdfa | | ✔️ | | | ✔️ | | | | ✔️ | | | -| pdf-to-markdown | | ✔️ | | | | | | | | ✔️ | | -| pdf-to-presentation | | ✔️ | | | ✔️ | | | ✔️ | | | | -| pdf-to-text | | ✔️ | | | ✔️ | | | ✔️ | | | | -| pdf-to-word | | ✔️ | | | ✔️ | | | ✔️ | | | | -| pdf-to-xml | | ✔️ | | | ✔️ | | | ✔️ | | | | -| xlsx-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | | -| add-password | | | ✔️ | | | | | | | ✔️ | | -| add-watermark | | | ✔️ | | | | | | | ✔️ | | -| cert-sign | | | ✔️ | | | | | | | ✔️ | | -| change-permissions | | | ✔️ | | | | | | | ✔️ | | -| remove-password | | | ✔️ | | | | | | | ✔️ | | -| sanitize-pdf | | | ✔️ | | | | | | | ✔️ | | -| add-image | | | | ✔️ | | | | | | ✔️ | | -| add-page-numbers | | | | ✔️ | | | | | | ✔️ | | -| auto-rename | | | | ✔️ | | | | | | ✔️ | | -| change-metadata | | | | ✔️ | | | | | | ✔️ | | -| compare | | | | ✔️ | | | | | | | ✔️ | -| compress-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | -| extract-image-scans | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | -| extract-images | | | | ✔️ | | | | | | ✔️ | | -| flatten | | | | ✔️ | | | | | | | ✔️ | -| get-info-on-pdf | | | | ✔️ | | | | | | ✔️ | | -| ocr-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | -| remove-blanks | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | -| repair | | | | ✔️ | ✔️ | | | ✔️ | | | | -| show-javascript | | | | ✔️ | | | | | | | ✔️ | -| sign | | | | ✔️ | | | | | | | ✔️ | \ No newline at end of file +| Operation | PageOps | Convert | Security | Other | CLI | Python | OpenCV | LibreOffice | OCRmyPDF | Java | Javascript | +| ------------------- | ------- | ------- | -------- | ----- | --- | ------ | ------ | ----------- | -------- | ---- | ---------- | +| adjust-contrast | ✔️ | | | | | | | | | | ✔️ | +| auto-split-pdf | ✔️ | | | | | | | | | ✔️ | | +| crop | ✔️ | | | | | | | | | ✔️ | | +| extract-page | ✔️ | | | | | | | | | ✔️ | | +| merge-pdfs | ✔️ | | | | | | | | | ✔️ | | +| multi-page-layout | ✔️ | | | | | | | | | ✔️ | | +| pdf-organizer | ✔️ | | | | | | | | | ✔️ | ✔️ | +| pdf-to-single-page | ✔️ | | | | | | | | | ✔️ | | +| remove-pages | ✔️ | | | | | | | | | ✔️ | | +| rotate-pdf | ✔️ | | | | | | | | | ✔️ | | +| scale-pages | ✔️ | | | | | | | | | ✔️ | | +| split-pdfs | ✔️ | | | | | | | | | ✔️ | | +| file-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | | +| img-to-pdf | | ✔️ | | | | | | | | ✔️ | | +| pdf-to-html | | ✔️ | | | ✔️ | | | ✔️ | | | | +| pdf-to-img | | ✔️ | | | | | | | | ✔️ | | +| pdf-to-pdfa | | ✔️ | | | ✔️ | | | | ✔️ | | | +| pdf-to-markdown | | ✔️ | | | | | | | | ✔️ | | +| pdf-to-presentation | | ✔️ | | | ✔️ | | | ✔️ | | | | +| pdf-to-text | | ✔️ | | | ✔️ | | | ✔️ | | | | +| pdf-to-word | | ✔️ | | | ✔️ | | | ✔️ | | | | +| pdf-to-xml | | ✔️ | | | ✔️ | | | ✔️ | | | | +| xlsx-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | | +| add-password | | | ✔️ | | | | | | | ✔️ | | +| add-watermark | | | ✔️ | | | | | | | ✔️ | | +| cert-sign | | | ✔️ | | | | | | | ✔️ | | +| remove-cert-sign | | | ✔️ | | | | | | | ✔️ | | +| change-permissions | | | ✔️ | | | | | | | ✔️ | | +| remove-password | | | ✔️ | | | | | | | ✔️ | | +| sanitize-pdf | | | ✔️ | | | | | | | ✔️ | | +| add-image | | | | ✔️ | | | | | | ✔️ | | +| add-page-numbers | | | | ✔️ | | | | | | ✔️ | | +| auto-rename | | | | ✔️ | | | | | | ✔️ | | +| change-metadata | | | | ✔️ | | | | | | ✔️ | | +| compare | | | | ✔️ | | | | | | | ✔️ | +| compress-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | +| extract-image-scans | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | +| extract-images | | | | ✔️ | | | | | | ✔️ | | +| flatten | | | | ✔️ | | | | | | | ✔️ | +| get-info-on-pdf | | | | ✔️ | | | | | | ✔️ | | +| ocr-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | +| remove-blanks | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | +| repair | | | | ✔️ | ✔️ | | | ✔️ | | | | +| show-javascript | | | | ✔️ | | | | | | | ✔️ | +| sign | | | | ✔️ | | | | | | | ✔️ | \ No newline at end of file diff --git a/Version-groups.md b/Version-groups.md index 8c37e22d..2495ae4d 100644 --- a/Version-groups.md +++ b/Version-groups.md @@ -1,52 +1,53 @@ -| Technology | Ultra-Lite | Full | -|----------------|:----------:|:----:| -| Java | ✔️ | ✔️ | -| JavaScript | ✔️ | ✔️ | -| Libre | | ✔️ | -| Python | | ✔️ | -| OpenCV | | ✔️ | -| OCRmyPDF | | ✔️ | +| Technology | Ultra-Lite | Full | +| ---------- | :--------: | :---: | +| Java | ✔️ | ✔️ | +| JavaScript | ✔️ | ✔️ | +| Libre | | ✔️ | +| Python | | ✔️ | +| OpenCV | | ✔️ | +| OCRmyPDF | | ✔️ | -Operation | Ultra-Lite | Full --------------------------|------------|----- -add-page-numbers | ✔️ | ✔️ -add-password | ✔️ | ✔️ -add-image | ✔️ | ✔️ -add-watermark | ✔️ | ✔️ -adjust-contrast | ✔️ | ✔️ -auto-split-pdf | ✔️ | ✔️ -auto-redact | ✔️ | ✔️ -auto-rename | ✔️ | ✔️ -cert-sign | ✔️ | ✔️ -crop | ✔️ | ✔️ -change-metadata | ✔️ | ✔️ -change-permissions | ✔️ | ✔️ -compare | ✔️ | ✔️ -extract-page | ✔️ | ✔️ -extract-images | ✔️ | ✔️ -flatten | ✔️ | ✔️ -get-info-on-pdf | ✔️ | ✔️ -img-to-pdf | ✔️ | ✔️ -markdown-to-pdf | ✔️ | ✔️ -merge-pdfs | ✔️ | ✔️ -multi-page-layout | ✔️ | ✔️ -overlay-pdf | ✔️ | ✔️ -pdf-organizer | ✔️ | ✔️ -pdf-to-csv | ✔️ | ✔️ -pdf-to-img | ✔️ | ✔️ -pdf-to-single-page | ✔️ | ✔️ -remove-pages | ✔️ | ✔️ -remove-password | ✔️ | ✔️ -rotate-pdf | ✔️ | ✔️ -sanitize-pdf | ✔️ | ✔️ -scale-pages | ✔️ | ✔️ -sign | ✔️ | ✔️ -show-javascript | ✔️ | ✔️ -split-by-size-or-count | ✔️ | ✔️ -split-pdf-by-sections | ✔️ | ✔️ -split-pdfs | ✔️ | ✔️ -compress-pdf | | ✔️ -extract-image-scans | | ✔️ -ocr-pdf | | ✔️ -pdf-to-pdfa | | ✔️ -remove-blanks | | ✔️ +| Operation | Ultra-Lite | Full | +| ---------------------- | ---------- | ---- | +| add-page-numbers | ✔️ | ✔️ | +| add-password | ✔️ | ✔️ | +| add-image | ✔️ | ✔️ | +| add-watermark | ✔️ | ✔️ | +| adjust-contrast | ✔️ | ✔️ | +| auto-split-pdf | ✔️ | ✔️ | +| auto-redact | ✔️ | ✔️ | +| auto-rename | ✔️ | ✔️ | +| cert-sign | ✔️ | ✔️ | +| remove-cert-sign | ✔️ | ✔️ | +| crop | ✔️ | ✔️ | +| change-metadata | ✔️ | ✔️ | +| change-permissions | ✔️ | ✔️ | +| compare | ✔️ | ✔️ | +| extract-page | ✔️ | ✔️ | +| extract-images | ✔️ | ✔️ | +| flatten | ✔️ | ✔️ | +| get-info-on-pdf | ✔️ | ✔️ | +| img-to-pdf | ✔️ | ✔️ | +| markdown-to-pdf | ✔️ | ✔️ | +| merge-pdfs | ✔️ | ✔️ | +| multi-page-layout | ✔️ | ✔️ | +| overlay-pdf | ✔️ | ✔️ | +| pdf-organizer | ✔️ | ✔️ | +| pdf-to-csv | ✔️ | ✔️ | +| pdf-to-img | ✔️ | ✔️ | +| pdf-to-single-page | ✔️ | ✔️ | +| remove-pages | ✔️ | ✔️ | +| remove-password | ✔️ | ✔️ | +| rotate-pdf | ✔️ | ✔️ | +| sanitize-pdf | ✔️ | ✔️ | +| scale-pages | ✔️ | ✔️ | +| sign | ✔️ | ✔️ | +| show-javascript | ✔️ | ✔️ | +| split-by-size-or-count | ✔️ | ✔️ | +| split-pdf-by-sections | ✔️ | ✔️ | +| split-pdfs | ✔️ | ✔️ | +| compress-pdf | | ✔️ | +| extract-image-scans | | ✔️ | +| ocr-pdf | | ✔️ | +| pdf-to-pdfa | | ✔️ | +| remove-blanks | | ✔️ | diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index b145b478..43180753 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -116,6 +116,7 @@ public class EndpointConfiguration { addEndpointToGroup("Security", "change-permissions"); addEndpointToGroup("Security", "add-watermark"); addEndpointToGroup("Security", "cert-sign"); + addEndpointToGroup("Security", "remove-cert-sign"); addEndpointToGroup("Security", "sanitize-pdf"); addEndpointToGroup("Security", "auto-redact"); @@ -200,6 +201,7 @@ public class EndpointConfiguration { addEndpointToGroup("Java", "extract-images"); addEndpointToGroup("Java", "change-metadata"); addEndpointToGroup("Java", "cert-sign"); + addEndpointToGroup("Java", "remove-cert-sign"); addEndpointToGroup("Java", "multi-page-layout"); addEndpointToGroup("Java", "scale-pages"); addEndpointToGroup("Java", "add-page-numbers"); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java new file mode 100644 index 00000000..98d1e3a7 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java @@ -0,0 +1,71 @@ +package stirling.software.SPDF.controller.api.security; + +import java.io.ByteArrayOutputStream; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.github.pixee.security.Filenames; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.SPDF.utils.WebResponseUtils; + +@RestController +@RequestMapping("/api/v1/security") +@Tag(name = "Security", description = "Security APIs") +public class RemoveCertSignController { + + private static final Logger logger = LoggerFactory.getLogger(RemoveCertSignController.class); + + @PostMapping(consumes = "multipart/form-data", value = "/remove-cert-sign") + @Operation( + summary = "Remove digital signature from PDF", + description = + "This endpoint accepts a PDF file and returns the PDF file without the digital signature. Input: PDF, Output: PDF") + public ResponseEntity removeCertSignPDF(@ModelAttribute PDFFile request) + throws Exception { + MultipartFile pdf = request.getFileInput(); + + // Convert MultipartFile to byte[] + byte[] pdfBytes = pdf.getBytes(); + + // Create a ByteArrayOutputStream to hold the resulting PDF + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + // Load the PDF document + PDDocument document = Loader.loadPDF(pdfBytes); + + // Get the document catalog + PDDocumentCatalog catalog = document.getDocumentCatalog(); + + // Get the AcroForm + PDAcroForm acroForm = catalog.getAcroForm(); + if (acroForm != null) { + // Remove signature fields + acroForm.getFields().removeIf(field -> field instanceof PDSignatureField); + } + + // Save the modified document to the ByteArrayOutputStream + document.save(baos); + document.close(); + + // Return the modified PDF as a response + return WebResponseUtils.boasToWebResponse( + baos, + Filenames.toSimpleFileName(pdf.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + + "_unsigned.pdf"); + } +} diff --git a/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java b/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java index 68b16d89..927e9bb8 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java @@ -53,6 +53,13 @@ public class SecurityWebController { return "security/cert-sign"; } + @GetMapping("/remove-cert-sign") + @Hidden + public String certUnSignForm(Model model) { + model.addAttribute("currentPage", "remove-cert-sign"); + return "security/remove-cert-sign"; + } + @GetMapping("/sanitize-pdf") @Hidden public String sanitizeForm(Model model) { diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 85cdc661..3888584d 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -332,6 +332,10 @@ home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=الاسم certSign.submit=تسجيل PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=إزالة الفراغات removeBlanks.header=إزالة الصفحات الفارغة diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index a389b67a..bbdbc104 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -332,6 +332,10 @@ home.certSign.title=Подпишете със сертификат home.certSign.desc=Подписва PDF със сертификат/ключ (PEM/P12) certSign.tags=удостоверяване,PEM,P12,официален,шифроване +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Оформление с няколко страници home.pageLayout.desc=Слейте няколко страници от PDF документ в една страница pageLayout.tags=сливане,комбиниран,единичен изглед,организиране @@ -655,6 +659,13 @@ certSign.name=Име certSign.submit=Подпишете PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Премахване на празни места removeBlanks.header=Премахване на празни страници diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index c09e158d..e4310f13 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -332,6 +332,10 @@ home.certSign.title=Signa amb Certificat home.certSign.desc=Sign PDF amb Certificate/Clau (PEM/P12) certSign.tags=authentica,PEM,P12,official,encripta +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Nom certSign.submit=Firma PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Elimina els espais en blanc removeBlanks.header=Elimina les pàgines en blanc diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index ef8858d8..58ae8463 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -332,6 +332,10 @@ home.certSign.title=Podpis s certifikátem home.certSign.desc=Podpis PDF s certifikátem/klíčem (PEM/P12) certSign.tags=autentizace,PEM,P12,oficiální,šifrování +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Vícestránkové rozložení home.pageLayout.desc=Sloučení více stránek dokumentu PDF do jedné stránky pageLayout.tags=sloučit,kompozitní,jedno zobrazení,organizovat @@ -655,6 +659,13 @@ certSign.name=Název certSign.submit=Podepsat PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Odebrat prázdné stránky removeBlanks.header=Odebrat prázdné stránky diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 457ed462..57d528d3 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -332,6 +332,10 @@ home.certSign.title=Mit Zertifikat signieren home.certSign.desc=Ein PDF mit einem Zertifikat/Schlüssel (PEM/P12) signieren certSign.tags=authentifizieren,pem,p12,offiziell,verschlüsseln +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Mehrseitiges Layout home.pageLayout.desc=Mehrere Seiten eines PDF zu einer Seite zusammenführen pageLayout.tags=zusammenführen,zusammensetzen,einzelansicht,organisieren @@ -655,6 +659,13 @@ certSign.name=Name certSign.submit=PDF signieren +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Leere Seiten entfernen removeBlanks.header=Leere Seiten entfernen diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index 6677f478..a1984be8 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -332,6 +332,10 @@ home.certSign.title=Υπογραφή με Πιστοποιητικό home.certSign.desc=Υπογραφή ενός PDF αρχείου με ένα Πιστοποιητικό/Κλειδί (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Διάταξη πολλών σελίδων home.pageLayout.desc=Συγχώνευση πολλαπλών σελίδων ενός εγγράφου PDF σε μία μόνο σελίδα pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Όνομα certSign.submit=Υπογραφή PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Αφαίρεση Κενών removeBlanks.header=Αφαίρεση Κενών Σελίδων diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 760cf23e..544227f1 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -332,6 +332,10 @@ home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Name certSign.submit=Sign PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Remove Blanks removeBlanks.header=Remove Blank Pages diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 041296e1..46467dad 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -332,6 +332,10 @@ home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Name certSign.submit=Sign PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Remove Blanks removeBlanks.header=Remove Blank Pages diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index c7682dca..62368133 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -332,6 +332,10 @@ home.certSign.title=Firmar con certificado home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12) certSign.tags=autentificar,PEM,P12,oficial,encriptar +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Diseño de varias páginas home.pageLayout.desc=Unir varias páginas de un documento PDF en una sola página pageLayout.tags=unir,compuesto,vista única,organizar @@ -655,6 +659,13 @@ certSign.name=Nombre certSign.submit=Firmar PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Eliminar espacios en blanco removeBlanks.header=Eliminar páginas en blanco diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index d3ad41d5..405be891 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -332,6 +332,10 @@ home.certSign.title=Sinatu ziurtagiriarekin home.certSign.desc=Sinatu PDF bat Ziurtagiri/Gako batekin (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Zenbait orrialderen diseinua home.pageLayout.desc=Elkartu orri bakar batean PDF dokumentu baten zenbait orrialde pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Izena certSign.submit=Sinatu PDFa +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Ezabatu zuriuneak removeBlanks.header=Ezabatu orrialde zuriak diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index eb3780c1..57671c51 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -332,6 +332,10 @@ home.certSign.title=Signer avec un certificat home.certSign.desc=Signez un PDF avec un certificat ou une clé (PEM/P12). certSign.tags=signer,chiffrer,certificat,authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Fusionner des pages home.pageLayout.desc=Fusionnez plusieurs pages d’un PDF en une seule. pageLayout.tags=fusionner,merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Nom certSign.submit=Signer +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Supprimer les pages vierges removeBlanks.header=Supprimer les pages vierges diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index 183148f4..7b933cd2 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -332,6 +332,10 @@ home.certSign.title=प्रमाणपत्र के साथ हस्त home.certSign.desc=पीडीएफ़ को प्रमाणपत्र/कुंजी (PEM/P12) के साथ हस्ताक्षरित करता है। certSign.tags=प्रमाणीकरण, PEM, P12, आधिकारिक, एन्क्रिप्ट +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=मल्टी-पेज लेआउट home.pageLayout.desc=पीडीएफ़ दस्तावेज़ के कई पेजों को एक ही पेज में मर्ज करता है। pageLayout.tags=मर्ज, संयोजित, एकल दृश्य, संगठित @@ -655,6 +659,13 @@ certSign.name=नाम certSign.submit=पीडीएफ़ पर हस्ताक्षर करें +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=खाली पेज हटाएं removeBlanks.header=खाली पेज हटाएं diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 7604de8e..4bef0665 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -332,6 +332,10 @@ home.certSign.title=Aláírás Tanúsítvánnyal home.certSign.desc=PDF aláírása tanúsítvánnyal/kulccsal (PEM/P12) certSign.tags=hitelesítés,PEM,P12,hivatalos,segitít,álca +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Több oldal elrendezése home.pageLayout.desc=Több oldal egyesítése egy PDF dokumentumban egyetlen oldallá pageLayout.tags=egyesítés,kompozit,egy oldal,megszervez @@ -655,6 +659,13 @@ certSign.name=Név certSign.submit=PDF aláírása +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Üres oldalak eltávolítása removeBlanks.header=Üres oldalak eltávolítása diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index 45006806..b078892d 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -332,6 +332,10 @@ home.certSign.title=Tanda tangani dengan Sertifikat home.certSign.desc=Menandatangani PDF dengan Certificate/Key (PEM/P12) certSign.tags=mengotentikasi, PEM, P12, resmi, mengenkripsi +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Tata Letak Multi-Halaman home.pageLayout.desc=Menggabungkan beberapa halaman dokumen PDF menjadi satu halaman pageLayout.tags=menggabungkan, komposit, tampilan tunggal, mengatur @@ -655,6 +659,13 @@ certSign.name=Nama certSign.submit=Tanda tangani PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Hapus Halaman Kosong removeBlanks.header=Remove Blank Pages diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 9f74c12f..4ed322ba 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -332,6 +332,10 @@ home.certSign.title=Firma con certificato home.certSign.desc=Firma un PDF con un certificato/chiave (PEM/P12) certSign.tags=autenticare,PEM,P12,ufficiale,crittografare +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Layout multipagina home.pageLayout.desc=Unisci più pagine di un documento PDF in un'unica pagina pageLayout.tags=unire,comporre,visualizzazione singola,organizzare @@ -655,6 +659,13 @@ certSign.name=Nome certSign.submit=Firma PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Rimuovi spazi vuoti removeBlanks.header=Rimuovi pagine vuote diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 527736b8..700363c8 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -332,6 +332,10 @@ home.certSign.title=証明書による署名 home.certSign.desc=証明書/キーを使用してPDFに署名します。 (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=マルチページレイアウト home.pageLayout.desc=PDFの複数のページを1ページに結合します。 pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=名前 certSign.submit=PDFに署名 +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=空白の削除 removeBlanks.header=空白ページの削除 diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 8bfed7ee..94045ef3 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -332,6 +332,10 @@ home.certSign.title=인증서로 서명 home.certSign.desc=PDF 문서에 인증서 또는 키로 서명합니다. (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=다중 페이지 레이아웃 home.pageLayout.desc=PDF 문서의 여러 페이지를 한 페이지로 합칩니다. pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=이름 certSign.submit=PDF 서명 +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=빈 페이지 제거 removeBlanks.header=빈 페이지 제거 diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index 0a1f75a6..bd9abc2c 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -332,6 +332,10 @@ home.certSign.title=Ondertekenen met certificaat home.certSign.desc=Ondertekent een PDF met een certificaat/sleutel (PEM/P12) certSign.tags=authenticeren,PEM,P12,officieel,versleutelen +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-pagina indeling home.pageLayout.desc=Voeg meerdere pagina's van een PDF-document samen op één pagina pageLayout.tags=samenvoegen,composiet,enkel-zicht,organiseren @@ -655,6 +659,13 @@ certSign.name=Naam certSign.submit=PDF ondertekenen +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Verwijder blanco's removeBlanks.header=Verwijder lege pagina's diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 6a7fdd9d..9eb70812 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -332,6 +332,10 @@ home.certSign.title=Podpisz certyfikatem home.certSign.desc=Podpisz dokument PDF za pomocą certyfikatu/klucza prywatnego (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Układ wielu stron home.pageLayout.desc=Scal wiele stron dokumentu PDF w jedną stronę pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Nazwa certSign.submit=Podpisz PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Usuń puste removeBlanks.header=Usuń puste strony diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 853ac33f..e95eff74 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -332,6 +332,10 @@ home.certSign.title=Assinar com Certificado home.certSign.desc=Assinar um PDF com um Certificado/Chave (PEM/P12) certSign.tags=autenticar,PEM,P12,oficial,criptografar +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Layout de Múltiplas Páginas home.pageLayout.desc=Mesclar várias páginas de um documento PDF em uma única página pageLayout.tags=mesclar,composto,vista-única,organizar @@ -655,6 +659,13 @@ certSign.name=Nome certSign.submit=Assinar PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Remover Páginas em Branco removeBlanks.header=Remover Páginas em Branco diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index 1ee8657d..99751ec7 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -332,6 +332,10 @@ home.certSign.title=Assinar com Certificado home.certSign.desc=Assinar um PDF com um Certificado/Chave (PEM/P12) certSign.tags=autenticar,PEM,P12,oficial,criptografar +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Layout de Múltiplas Páginas home.pageLayout.desc=Juntar várias páginas de um documento PDF em uma única página pageLayout.tags=juntar,composto,vista-única,organizar @@ -655,6 +659,13 @@ certSign.name=Nome certSign.submit=Assinar PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Remover Páginas em Branco removeBlanks.header=Remover Páginas em Branco diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index 4032943e..11d67688 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -332,6 +332,10 @@ home.certSign.title=Semnare cu certificat home.certSign.desc=Semnează un PDF cu un certificat/cheie (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Numele certSign.submit=Semnează PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Elimină pagini goale removeBlanks.header=Elimină pagini goale diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index b87c23b3..40d882e9 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -332,6 +332,10 @@ home.certSign.title=Подписать сертификатом home.certSign.desc=Подписать PDF сертификатом/ключом (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Объединить страницы home.pageLayout.desc=Объединение нескольких страниц документа PDF в одну страницу pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Имя certSign.submit=Подписать PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Удалить Пустые removeBlanks.header=Удалить Пустые Страницы diff --git a/src/main/resources/messages_sk_SK.properties b/src/main/resources/messages_sk_SK.properties index f488f459..3066982d 100644 --- a/src/main/resources/messages_sk_SK.properties +++ b/src/main/resources/messages_sk_SK.properties @@ -332,6 +332,10 @@ home.certSign.title=Podpísať s certifikátom home.certSign.desc=Podpísať PDF s certifikátom/kľúčom (PEM/P12) certSign.tags=autentifikovať,PEM,P12,oficiálne,šifrovať +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Viacstranové usporiadanie home.pageLayout.desc=Zlúčte viacero stránok PDF dokumentu do jednej stránky pageLayout.tags=zlúčiť,zjednotiť,jednostranový pohľad,organizovať @@ -655,6 +659,13 @@ certSign.name=Meno certSign.submit=Podpísať PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Odstrániť prázdne stránky removeBlanks.header=Odstrániť prázdne stránky diff --git a/src/main/resources/messages_sr_LATN_RS.properties b/src/main/resources/messages_sr_LATN_RS.properties index f6e4543d..7939f5a9 100644 --- a/src/main/resources/messages_sr_LATN_RS.properties +++ b/src/main/resources/messages_sr_LATN_RS.properties @@ -332,6 +332,10 @@ home.certSign.title=Potpis sa sertifikatom home.certSign.desc=Potpisuje PDF sa sertifikatom/ključem (PEM/P12) certSign.tags=autentifikacija,PEM,P12,zvanično,šifrovanje +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Višestruki prikaz stranica home.pageLayout.desc=Spaja više stranica PDF dokumenta u jednu stranicu pageLayout.tags=spajanje,kompozit,pojedinačan-prikaz,organizacija @@ -655,6 +659,13 @@ certSign.name=Ime certSign.submit=Potpiši PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Ukloni prazne stranice removeBlanks.header=Ukloni prazne stranice diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 127d3718..f1a04de0 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -332,6 +332,10 @@ home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Namn certSign.submit=Skriv under PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Ta bort tomrum removeBlanks.header=Ta bort tomma sidor diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index f277a083..2999eec3 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -332,6 +332,10 @@ home.certSign.title=Sertifika ile İmzala home.certSign.desc=Bir PDF'i Sertifika/Anahtar (PEM/P12) ile imzalar certSign.tags=doğrula,PEM,P12,resmi,şifrele +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Çoklu-Sayfa Düzeni home.pageLayout.desc=Bir PDF belgesinin çoklu sayfalarını tek bir sayfada birleştirir pageLayout.tags=birleştir,kompozit,tek-görünüm,düzenle @@ -655,6 +659,13 @@ certSign.name=İsim certSign.submit=PDF'i İmzala +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Boşları Kaldır removeBlanks.header=Boş Sayfaları Kaldır diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index 75336bc5..9fb68d2d 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -332,6 +332,10 @@ home.certSign.title=Підписати сертифікатом home.certSign.desc=Підписати PDF сертифікатом/ключем (PEM/P12) certSign.tags=authenticate,PEM,P12,official,encrypt +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=Об'єднати сторінки home.pageLayout.desc=Об'єднання кількох сторінок документа PDF в одну сторінку pageLayout.tags=merge,composite,single-view,organize @@ -655,6 +659,13 @@ certSign.name=Ім'я certSign.submit=Підписати PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=Видалити порожні removeBlanks.header=Видалити порожні сторінки diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index cda654d6..e165d91b 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -332,6 +332,10 @@ home.certSign.title=使用证书签署 home.certSign.desc=使用证书/密钥(PEM/P12)对PDF进行签署 certSign.tags=身份验证、PEM、P12、官方、加密 +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=多页布局 home.pageLayout.desc=将PDF文档的多个页面合并成一页 pageLayout.tags=合并、组合、单视图、整理 @@ -655,6 +659,13 @@ certSign.name=名称 certSign.submit=签署 PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=删除空白 removeBlanks.header=删除空白页 diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 120bff9d..59f606d1 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -332,6 +332,10 @@ home.certSign.title=使用憑證簽章 home.certSign.desc=使用憑證/金鑰(PEM/P12)簽章 PDF certSign.tags=驗證,PEM,P12,官方,加密 +home.removeCertSign.title=Remove Certificate Sign +home.removeCertSign.desc=Remove certificate signature from PDF +removeCertSign.tags=authenticate,PEM,P12,official,decrypt + home.pageLayout.title=多頁面版面配置 home.pageLayout.desc=將 PDF 檔案的多個頁面合併到單一頁面 pageLayout.tags=合併,複合,單一檢視,組織 @@ -655,6 +659,13 @@ certSign.name=名稱 certSign.submit=簽章 PDF +#removeCertSign +removeCertSign.title=Remove Certificate Signature +removeCertSign.header=Remove the digital certificate from the PDF +removeCertSign.selectPDF=Select a PDF file: +removeCertSign.submit=Remove Signature + + #removeBlanks removeBlanks.title=移除空白頁面 removeBlanks.header=移除空白頁面 diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index c296ab7d..9860a231 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -22,8 +22,7 @@