mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			248 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
package stirling.software.SPDF.config;
 | 
						|
 | 
						|
import java.util.HashSet;
 | 
						|
import java.util.List;
 | 
						|
import java.util.Map;
 | 
						|
import java.util.Set;
 | 
						|
import java.util.concurrent.ConcurrentHashMap;
 | 
						|
 | 
						|
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.context.annotation.DependsOn;
 | 
						|
import org.springframework.stereotype.Service;
 | 
						|
 | 
						|
import stirling.software.SPDF.model.ApplicationProperties;
 | 
						|
 | 
						|
@Service
 | 
						|
@DependsOn({"bookAndHtmlFormatsInstalled"})
 | 
						|
public class EndpointConfiguration {
 | 
						|
    private static final Logger logger = LoggerFactory.getLogger(EndpointConfiguration.class);
 | 
						|
    private Map<String, Boolean> endpointStatuses = new ConcurrentHashMap<>();
 | 
						|
    private Map<String, Set<String>> endpointGroups = new ConcurrentHashMap<>();
 | 
						|
 | 
						|
    private final ApplicationProperties applicationProperties;
 | 
						|
 | 
						|
    private boolean bookAndHtmlFormatsInstalled;
 | 
						|
 | 
						|
    @Autowired
 | 
						|
    public EndpointConfiguration(
 | 
						|
            ApplicationProperties applicationProperties,
 | 
						|
            @Qualifier("bookAndHtmlFormatsInstalled") boolean bookAndHtmlFormatsInstalled) {
 | 
						|
        this.applicationProperties = applicationProperties;
 | 
						|
        this.bookAndHtmlFormatsInstalled = bookAndHtmlFormatsInstalled;
 | 
						|
        init();
 | 
						|
        processEnvironmentConfigs();
 | 
						|
    }
 | 
						|
 | 
						|
    public void enableEndpoint(String endpoint) {
 | 
						|
        endpointStatuses.put(endpoint, true);
 | 
						|
    }
 | 
						|
 | 
						|
    public void disableEndpoint(String endpoint) {
 | 
						|
        if (!endpointStatuses.containsKey(endpoint) || endpointStatuses.get(endpoint) != false) {
 | 
						|
            logger.info("Disabling {}", endpoint);
 | 
						|
            endpointStatuses.put(endpoint, false);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean isEndpointEnabled(String endpoint) {
 | 
						|
        if (endpoint.startsWith("/")) {
 | 
						|
            endpoint = endpoint.substring(1);
 | 
						|
        }
 | 
						|
        return endpointStatuses.getOrDefault(endpoint, true);
 | 
						|
    }
 | 
						|
 | 
						|
    public void addEndpointToGroup(String group, String endpoint) {
 | 
						|
        endpointGroups.computeIfAbsent(group, k -> new HashSet<>()).add(endpoint);
 | 
						|
    }
 | 
						|
 | 
						|
    public void enableGroup(String group) {
 | 
						|
        Set<String> endpoints = endpointGroups.get(group);
 | 
						|
        if (endpoints != null) {
 | 
						|
            for (String endpoint : endpoints) {
 | 
						|
                enableEndpoint(endpoint);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public void disableGroup(String group) {
 | 
						|
        Set<String> endpoints = endpointGroups.get(group);
 | 
						|
        if (endpoints != null) {
 | 
						|
            for (String endpoint : endpoints) {
 | 
						|
                disableEndpoint(endpoint);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public void init() {
 | 
						|
        // Adding endpoints to "PageOps" group
 | 
						|
        addEndpointToGroup("PageOps", "remove-pages");
 | 
						|
        addEndpointToGroup("PageOps", "merge-pdfs");
 | 
						|
        addEndpointToGroup("PageOps", "split-pdfs");
 | 
						|
        addEndpointToGroup("PageOps", "pdf-organizer");
 | 
						|
        addEndpointToGroup("PageOps", "rotate-pdf");
 | 
						|
        addEndpointToGroup("PageOps", "multi-page-layout");
 | 
						|
        addEndpointToGroup("PageOps", "scale-pages");
 | 
						|
        addEndpointToGroup("PageOps", "adjust-contrast");
 | 
						|
        addEndpointToGroup("PageOps", "crop");
 | 
						|
        addEndpointToGroup("PageOps", "auto-split-pdf");
 | 
						|
        addEndpointToGroup("PageOps", "extract-page");
 | 
						|
        addEndpointToGroup("PageOps", "pdf-to-single-page");
 | 
						|
        addEndpointToGroup("PageOps", "split-by-size-or-count");
 | 
						|
        addEndpointToGroup("PageOps", "overlay-pdf");
 | 
						|
        addEndpointToGroup("PageOps", "split-pdf-by-sections");
 | 
						|
 | 
						|
        // Adding endpoints to "Convert" group
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-img");
 | 
						|
        addEndpointToGroup("Convert", "img-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-pdfa");
 | 
						|
        addEndpointToGroup("Convert", "file-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "xlsx-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-word");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-presentation");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-text");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-html");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-xml");
 | 
						|
        addEndpointToGroup("Convert", "html-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "url-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "markdown-to-pdf");
 | 
						|
        addEndpointToGroup("Convert", "pdf-to-csv");
 | 
						|
 | 
						|
        // Adding endpoints to "Security" group
 | 
						|
        addEndpointToGroup("Security", "add-password");
 | 
						|
        addEndpointToGroup("Security", "remove-password");
 | 
						|
        addEndpointToGroup("Security", "change-permissions");
 | 
						|
        addEndpointToGroup("Security", "add-watermark");
 | 
						|
        addEndpointToGroup("Security", "cert-sign");
 | 
						|
        addEndpointToGroup("Security", "sanitize-pdf");
 | 
						|
        addEndpointToGroup("Security", "auto-redact");
 | 
						|
 | 
						|
        // Adding endpoints to "Other" group
 | 
						|
        addEndpointToGroup("Other", "ocr-pdf");
 | 
						|
        addEndpointToGroup("Other", "add-image");
 | 
						|
        addEndpointToGroup("Other", "compress-pdf");
 | 
						|
        addEndpointToGroup("Other", "extract-images");
 | 
						|
        addEndpointToGroup("Other", "change-metadata");
 | 
						|
        addEndpointToGroup("Other", "extract-image-scans");
 | 
						|
        addEndpointToGroup("Other", "sign");
 | 
						|
        addEndpointToGroup("Other", "flatten");
 | 
						|
        addEndpointToGroup("Other", "repair");
 | 
						|
        addEndpointToGroup("Other", "remove-blanks");
 | 
						|
        addEndpointToGroup("Other", "remove-annotations");
 | 
						|
        addEndpointToGroup("Other", "compare");
 | 
						|
        addEndpointToGroup("Other", "add-page-numbers");
 | 
						|
        addEndpointToGroup("Other", "auto-rename");
 | 
						|
        addEndpointToGroup("Other", "get-info-on-pdf");
 | 
						|
        addEndpointToGroup("Other", "show-javascript");
 | 
						|
 | 
						|
        // CLI
 | 
						|
        addEndpointToGroup("CLI", "compress-pdf");
 | 
						|
        addEndpointToGroup("CLI", "extract-image-scans");
 | 
						|
        addEndpointToGroup("CLI", "repair");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-pdfa");
 | 
						|
        addEndpointToGroup("CLI", "file-to-pdf");
 | 
						|
        addEndpointToGroup("CLI", "xlsx-to-pdf");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-word");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-presentation");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-text");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-html");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-xml");
 | 
						|
        addEndpointToGroup("CLI", "ocr-pdf");
 | 
						|
        addEndpointToGroup("CLI", "html-to-pdf");
 | 
						|
        addEndpointToGroup("CLI", "url-to-pdf");
 | 
						|
        addEndpointToGroup("CLI", "book-to-pdf");
 | 
						|
        addEndpointToGroup("CLI", "pdf-to-book");
 | 
						|
 | 
						|
        // Calibre
 | 
						|
        addEndpointToGroup("Calibre", "book-to-pdf");
 | 
						|
        addEndpointToGroup("Calibre", "pdf-to-book");
 | 
						|
 | 
						|
        // python
 | 
						|
        addEndpointToGroup("Python", "extract-image-scans");
 | 
						|
        addEndpointToGroup("Python", "remove-blanks");
 | 
						|
        addEndpointToGroup("Python", "html-to-pdf");
 | 
						|
        addEndpointToGroup("Python", "url-to-pdf");
 | 
						|
 | 
						|
        // openCV
 | 
						|
        addEndpointToGroup("OpenCV", "extract-image-scans");
 | 
						|
        addEndpointToGroup("OpenCV", "remove-blanks");
 | 
						|
 | 
						|
        // LibreOffice
 | 
						|
        addEndpointToGroup("LibreOffice", "repair");
 | 
						|
        addEndpointToGroup("LibreOffice", "file-to-pdf");
 | 
						|
        addEndpointToGroup("LibreOffice", "xlsx-to-pdf");
 | 
						|
        addEndpointToGroup("LibreOffice", "pdf-to-word");
 | 
						|
        addEndpointToGroup("LibreOffice", "pdf-to-presentation");
 | 
						|
        addEndpointToGroup("LibreOffice", "pdf-to-text");
 | 
						|
        addEndpointToGroup("LibreOffice", "pdf-to-html");
 | 
						|
        addEndpointToGroup("LibreOffice", "pdf-to-xml");
 | 
						|
 | 
						|
        // OCRmyPDF
 | 
						|
        addEndpointToGroup("OCRmyPDF", "compress-pdf");
 | 
						|
        addEndpointToGroup("OCRmyPDF", "pdf-to-pdfa");
 | 
						|
        addEndpointToGroup("OCRmyPDF", "ocr-pdf");
 | 
						|
 | 
						|
        // Java
 | 
						|
        addEndpointToGroup("Java", "merge-pdfs");
 | 
						|
        addEndpointToGroup("Java", "remove-pages");
 | 
						|
        addEndpointToGroup("Java", "split-pdfs");
 | 
						|
        addEndpointToGroup("Java", "pdf-organizer");
 | 
						|
        addEndpointToGroup("Java", "rotate-pdf");
 | 
						|
        addEndpointToGroup("Java", "pdf-to-img");
 | 
						|
        addEndpointToGroup("Java", "img-to-pdf");
 | 
						|
        addEndpointToGroup("Java", "add-password");
 | 
						|
        addEndpointToGroup("Java", "remove-password");
 | 
						|
        addEndpointToGroup("Java", "change-permissions");
 | 
						|
        addEndpointToGroup("Java", "add-watermark");
 | 
						|
        addEndpointToGroup("Java", "add-image");
 | 
						|
        addEndpointToGroup("Java", "extract-images");
 | 
						|
        addEndpointToGroup("Java", "change-metadata");
 | 
						|
        addEndpointToGroup("Java", "cert-sign");
 | 
						|
        addEndpointToGroup("Java", "multi-page-layout");
 | 
						|
        addEndpointToGroup("Java", "scale-pages");
 | 
						|
        addEndpointToGroup("Java", "add-page-numbers");
 | 
						|
        addEndpointToGroup("Java", "auto-rename");
 | 
						|
        addEndpointToGroup("Java", "auto-split-pdf");
 | 
						|
        addEndpointToGroup("Java", "sanitize-pdf");
 | 
						|
        addEndpointToGroup("Java", "crop");
 | 
						|
        addEndpointToGroup("Java", "get-info-on-pdf");
 | 
						|
        addEndpointToGroup("Java", "extract-page");
 | 
						|
        addEndpointToGroup("Java", "pdf-to-single-page");
 | 
						|
        addEndpointToGroup("Java", "markdown-to-pdf");
 | 
						|
        addEndpointToGroup("Java", "show-javascript");
 | 
						|
        addEndpointToGroup("Java", "auto-redact");
 | 
						|
        addEndpointToGroup("Java", "pdf-to-csv");
 | 
						|
        addEndpointToGroup("Java", "split-by-size-or-count");
 | 
						|
        addEndpointToGroup("Java", "overlay-pdf");
 | 
						|
        addEndpointToGroup("Java", "split-pdf-by-sections");
 | 
						|
        addEndpointToGroup("Java", "remove-blanks");
 | 
						|
 | 
						|
        // Javascript
 | 
						|
        addEndpointToGroup("Javascript", "pdf-organizer");
 | 
						|
        addEndpointToGroup("Javascript", "sign");
 | 
						|
        addEndpointToGroup("Javascript", "compare");
 | 
						|
        addEndpointToGroup("Javascript", "adjust-contrast");
 | 
						|
    }
 | 
						|
 | 
						|
    private void processEnvironmentConfigs() {
 | 
						|
        List<String> endpointsToRemove = applicationProperties.getEndpoints().getToRemove();
 | 
						|
        List<String> groupsToRemove = applicationProperties.getEndpoints().getGroupsToRemove();
 | 
						|
        if (!bookAndHtmlFormatsInstalled) {
 | 
						|
            groupsToRemove.add("Calibre");
 | 
						|
        }
 | 
						|
        if (endpointsToRemove != null) {
 | 
						|
            for (String endpoint : endpointsToRemove) {
 | 
						|
                disableEndpoint(endpoint.trim());
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (groupsToRemove != null) {
 | 
						|
            for (String group : groupsToRemove) {
 | 
						|
                disableGroup(group.trim());
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |