diff --git a/README.md b/README.md index a3f26f30..5541c810 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ A preconfigured Docker image is available, including OCR and media conversion to **The default admin password is "admin". Don't forget to change it before going to production.** - Master branch, can be unstable. Not recommended for production use: `sismics/docs:latest` -- Latest stable version: `sismics/docs:v1.8` +- Latest stable version: `sismics/docs:v1.9` The data directory is `/data`. Don't forget to mount a volume on it. @@ -106,7 +106,7 @@ version: '3' services: # Teedy Application teedy-server: - image: sismics/docs:v1.8 + image: sismics/docs:v1.9 restart: unless-stopped ports: # Map internal port to host @@ -129,7 +129,7 @@ version: '3' services: # Teedy Application teedy-server: - image: sismics/docs:v1.8 + image: sismics/docs:v1.9 restart: unless-stopped ports: # Map internal port to host @@ -185,7 +185,7 @@ Manual installation #### Requirements -- Java 8 with the [Java Cryptography Extension](http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html) +- Java 11 - Tesseract 3 or 4 for OCR - ffmpeg for video thumbnails - mediainfo for video metadata extraction @@ -199,7 +199,7 @@ The latest release is downloadable here: at.favre.lib bcrypt - 0.9.0 diff --git a/docs-core/src/main/java/com/sismics/docs/core/listener/async/WebhookAsyncListener.java b/docs-core/src/main/java/com/sismics/docs/core/listener/async/WebhookAsyncListener.java index 841f6ec0..f45f6278 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/listener/async/WebhookAsyncListener.java +++ b/docs-core/src/main/java/com/sismics/docs/core/listener/async/WebhookAsyncListener.java @@ -86,7 +86,7 @@ public class WebhookAsyncListener { } }); - RequestBody body = RequestBody.create(JSON, "{\"event\": \"" + event.name() + "\", \"id\": \"" + id + "\"}"); + RequestBody body = RequestBody.create("{\"event\": \"" + event.name() + "\", \"id\": \"" + id + "\"}", JSON); for (String webhookUrl : webhookUrlList) { Request request = new Request.Builder() diff --git a/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java b/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java index f60dc575..0d7ec204 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java +++ b/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java @@ -80,7 +80,7 @@ public class AppContext { List> indexingHandlerList = Lists.newArrayList( new ClasspathScanner().findClasses(IndexingHandler.class, "com.sismics.docs.core.util.indexing")); for (Class handlerClass : indexingHandlerList) { - IndexingHandler handler = handlerClass.newInstance(); + IndexingHandler handler = handlerClass.getDeclaredConstructor().newInstance(); if (handler.accept()) { indexingHandler = handler; break; diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/AuthenticationUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/AuthenticationUtil.java index bf023d5b..d2325eee 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/AuthenticationUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/AuthenticationUtil.java @@ -20,7 +20,7 @@ public class AuthenticationUtil { .map(clazz -> { try { - return clazz.newInstance(); + return clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java index ce3cdf3b..ac9d405b 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/authentication/LdapAuthenticationHandler.java @@ -8,7 +8,6 @@ import com.sismics.docs.core.model.jpa.Config; import com.sismics.docs.core.model.jpa.User; import com.sismics.docs.core.util.ConfigUtil; import com.sismics.util.ClasspathScanner; -import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.directory.api.ldap.model.cursor.EntryCursor; import org.apache.directory.api.ldap.model.entry.Attribute; import org.apache.directory.api.ldap.model.entry.Entry; @@ -71,10 +70,7 @@ public class LdapAuthenticationHandler implements AuthenticationHandler { config.setCredentials(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_PASSWORD)); DefaultLdapConnectionFactory factory = new DefaultLdapConnectionFactory(config); - GenericObjectPool.Config poolConfig = new GenericObjectPool.Config(); - poolConfig.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_GROW; - poolConfig.maxWait = 500; - pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), poolConfig); + pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), null); } @Override @@ -114,7 +110,7 @@ public class LdapAuthenticationHandler implements AuthenticationHandler { if (mailAttribute == null || mailAttribute.get() == null) { user.setEmail(ConfigUtil.getConfigStringValue(ConfigType.LDAP_DEFAULT_EMAIL)); } else { - Value value = mailAttribute.get(); + Value value = mailAttribute.get(); user.setEmail(value.getString()); } user.setStorageQuota(ConfigUtil.getConfigLongValue(ConfigType.LDAP_DEFAULT_STORAGE)); diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/format/FormatHandlerUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/format/FormatHandlerUtil.java index 787739b4..6a9f8ef5 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/format/FormatHandlerUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/format/FormatHandlerUtil.java @@ -3,6 +3,7 @@ package com.sismics.docs.core.util.format; import com.google.common.collect.Lists; import com.sismics.util.ClasspathScanner; +import java.lang.reflect.InvocationTargetException; import java.util.List; /** @@ -26,12 +27,12 @@ public class FormatHandlerUtil { public static FormatHandler find(String mimeType) { try { for (Class formatHandlerClass : FORMAT_HANDLERS) { - FormatHandler formatHandler = formatHandlerClass.newInstance(); + FormatHandler formatHandler = formatHandlerClass.getDeclaredConstructor().newInstance(); if (formatHandler.accept(mimeType)) { return formatHandler; } } - } catch (InstantiationException | IllegalAccessException e) { + } catch (Exception e) { return null; } diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/format/PptxFormatHandler.java b/docs-core/src/main/java/com/sismics/docs/core/util/format/PptxFormatHandler.java index db3074bd..c41dcfa7 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/format/PptxFormatHandler.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/format/PptxFormatHandler.java @@ -9,7 +9,7 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; -import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor; +import org.apache.poi.sl.extractor.SlideShowExtractor; import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XSLFSlide; @@ -50,7 +50,7 @@ public class PptxFormatHandler implements FormatHandler { @Override public String extractContent(String language, Path file) throws Exception { XMLSlideShow pptx = loadPPtxFile(file); - return new XSLFPowerPointExtractor(pptx).getText(); + return new SlideShowExtractor<>(pptx).getText(); } @Override diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java b/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java index a75256ce..20de0792 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java @@ -37,9 +37,9 @@ import org.apache.lucene.search.spell.LuceneDictionary; import org.apache.lucene.search.suggest.Lookup; import org.apache.lucene.search.suggest.analyzing.FuzzySuggester; import org.apache.lucene.store.Directory; +import org.apache.lucene.store.NIOFSDirectory; import org.apache.lucene.store.NoLockFactory; import org.apache.lucene.store.RAMDirectory; -import org.apache.lucene.store.SimpleFSDirectory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,7 +116,7 @@ public class LuceneIndexingHandler implements IndexingHandler { } else if (luceneStorage.equals("FILE")) { Path luceneDirectory = DirectoryUtil.getLuceneDirectory(); log.info("Using file Lucene storage: {}", luceneDirectory); - directory = new SimpleFSDirectory(luceneDirectory, NoLockFactory.INSTANCE); + directory = new NIOFSDirectory(luceneDirectory, NoLockFactory.INSTANCE); } // Create an index writer diff --git a/docs-core/src/main/java/com/sismics/util/HtmlToPlainText.java b/docs-core/src/main/java/com/sismics/util/HtmlToPlainText.java index 39bce3b5..c99ef0f9 100644 --- a/docs-core/src/main/java/com/sismics/util/HtmlToPlainText.java +++ b/docs-core/src/main/java/com/sismics/util/HtmlToPlainText.java @@ -1,6 +1,6 @@ package com.sismics.util; -import org.jsoup.helper.StringUtil; +import org.jsoup.internal.StringUtil; import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import org.jsoup.nodes.TextNode; @@ -28,7 +28,7 @@ public class HtmlToPlainText { } // the formatting rules, implemented in a breadth-first DOM traverse - private class FormattingVisitor implements NodeVisitor { + static private class FormattingVisitor implements NodeVisitor { private static final int maxWidth = 80; private int width = 0; private StringBuilder accum = new StringBuilder(); // holds the accumulated text @@ -64,7 +64,7 @@ public class HtmlToPlainText { return; // don't accumulate long runs of empty spaces if (text.length() + width > maxWidth) { // won't fit, needs to wrap - String words[] = text.split("\\s+"); + String[] words = text.split("\\s+"); for (int i = 0; i < words.length; i++) { String word = words[i]; boolean last = i == words.length - 1; diff --git a/docs-core/src/main/java/com/sismics/util/jpa/EMF.java b/docs-core/src/main/java/com/sismics/util/jpa/EMF.java index 74c198d5..7c3cf7bc 100644 --- a/docs-core/src/main/java/com/sismics/util/jpa/EMF.java +++ b/docs-core/src/main/java/com/sismics/util/jpa/EMF.java @@ -2,7 +2,6 @@ package com.sismics.util.jpa; import com.sismics.docs.core.util.DirectoryUtil; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.cfg.Environment; import org.hibernate.internal.util.config.ConfigurationHelper; import org.hibernate.service.ServiceRegistry; import org.slf4j.Logger; @@ -34,7 +33,6 @@ public final class EMF { try { properties = getEntityManagerProperties(); - Environment.verifyProperties(properties); ConfigurationHelper.resolvePlaceHolders(properties); ServiceRegistry reg = new StandardServiceRegistryBuilder().applySettings(properties).build(); diff --git a/docs-core/src/test/java/com/sismics/docs/core/util/TestFileUtil.java b/docs-core/src/test/java/com/sismics/docs/core/util/TestFileUtil.java index 1a1fddfb..ad1c50ce 100644 --- a/docs-core/src/test/java/com/sismics/docs/core/util/TestFileUtil.java +++ b/docs-core/src/test/java/com/sismics/docs/core/util/TestFileUtil.java @@ -137,7 +137,6 @@ public class TestFileUtil { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); PdfUtil.convertToPdf(documentDto, Lists.newArrayList(file0, file1, file2, file3, file4, file5), true, true, 10, outputStream); Assert.assertTrue(outputStream.toByteArray().length > 0); - com.google.common.io.Files.write(outputStream.toByteArray(), new java.io.File("C:\\Users\\Jendib\\Downloads\\test.pdf")); } } } diff --git a/docs-web/pom.xml b/docs-web/pom.xml index 78699765..c20591c3 100644 --- a/docs-web/pom.xml +++ b/docs-web/pom.xml @@ -209,54 +209,6 @@ - - - stress - - - env - stress - - - - - - - src/stress/resources - false - - **/config.properties - - - - src/stress/resources - true - - **/config.properties - - - - - - - org.eclipse.jetty - jetty-maven-plugin - - - - application.mode - dev - - - - /docs-web - - - - - - - prod diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/BaseResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/BaseResource.java index 16059c92..8fb8d4c6 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/BaseResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/BaseResource.java @@ -8,8 +8,10 @@ import com.sismics.security.UserPrincipal; import com.sismics.util.filter.SecurityFilter; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import java.security.Principal; import java.util.List; import java.util.Set; @@ -19,6 +21,7 @@ import java.util.Set; * * @author jtremeaux */ +@Consumes(MediaType.APPLICATION_FORM_URLENCODED) public abstract class BaseResource { /** * @apiDefine admin Admin diff --git a/docs-web/src/prod/resources/log4j.properties b/docs-web/src/prod/resources/log4j.properties index c1f0ebf5..f58c58d8 100644 --- a/docs-web/src/prod/resources/log4j.properties +++ b/docs-web/src/prod/resources/log4j.properties @@ -8,4 +8,5 @@ log4j.appender.MEMORY.size=1000 log4j.logger.com.sismics=INFO log4j.logger.org.apache.pdfbox=ERROR log4j.logger.org.glassfish.jersey.servlet.WebComponent=ERROR -log4j.logger.org.apache.directory=ERROR \ No newline at end of file +log4j.logger.org.apache.directory=ERROR +log4j.logger.org.odftoolkit=ERROR \ No newline at end of file diff --git a/docs-web/src/test/resources/log4j.properties b/docs-web/src/test/resources/log4j.properties index 38dd0d51..c0e4e3d6 100644 --- a/docs-web/src/test/resources/log4j.properties +++ b/docs-web/src/test/resources/log4j.properties @@ -10,4 +10,6 @@ log4j.logger.com.sismics.util.jpa=ERROR log4j.logger.org.hibernate=ERROR log4j.logger.org.apache.pdfbox=INFO log4j.logger.com.mchange=ERROR -log4j.logger.org.apache.directory=ERROR \ No newline at end of file +log4j.logger.org.apache.directory=ERROR +log4j.logger.org.glassfish.grizzly=ERROR +log4j.logger.org.odftoolkit=ERROR \ No newline at end of file diff --git a/pom.xml b/pom.xml index c3d0bd6c..87a105a8 100644 --- a/pom.xml +++ b/pom.xml @@ -11,8 +11,8 @@ Docs Parent - 1.8 - 1.8 + 11 + 11 UTF-8 @@ -20,48 +20,48 @@ 2.6 2.6 1.5 - 2.3.28 + 2.3.30 1.4 - 28.2-jre - 1.2.16 - 1.6.4 - 1.6.6 - 1.6.6 - 4.12 - 1.4.197 - 2.27 - 1.1.3 - 0.3m - 7.5.0 + 30.1-jre + 1.2.17 + 1.7.30 + 1.7.30 + 1.7.30 + 4.13.1 + 1.4.200 + 2.33 + 1.1.4 + 0.9.0 + 8.7.0 4.2 - 2.0.12 - 1.61 - 2.10 - 5.3.7.Final + 2.0.22 + 1.68 + 2.10.9 + 5.4.27.Final 4.0.1 - 2.0.1 - 4.2.1 - 3.3.2 - 1.6.5 - 1.3.0 - 42.2.5 + 2.0.2 + 5.6.0 + 3.6.2 + 2.0 + 1.4.0 + 42.2.18 1.2 1.5.8 1.6.2 - 1.11.3 - 3.11.0 - 1.0.0 + 1.13.1 + 4.9.0 + 2.0.1 - 9.4.17.v20190418 - 9.4.17.v20190418 - 9.4.17.v20190418 + 9.4.36.v20210114 + 9.4.36.v20210114 + 9.4.36.v20210114 - 1.8 - 3.1.0 - 3.2.2 - 2.22.1 - 9.4.17.v20190418 + 3.0.0 + 3.2.0 + 3.3.1 + 3.0.0-M5 + 9.4.36.v20210114 @@ -256,9 +256,9 @@ - org.mindrot - jbcrypt - ${org.mindrot.jbcrypt} + at.favre.lib + bcrypt + ${at.favre.lib.bcrypt.version}