mirror of
https://github.com/sismics/docs.git
synced 2025-12-15 10:46:26 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97d6e8f528 | ||
|
|
95e0b870f6 | ||
|
|
2bdb2dc34f | ||
|
|
22a44d0c8d | ||
|
|
a9cdbdc03e | ||
|
|
3fd5470eae | ||
|
|
39f96cbd28 | ||
|
|
4501f10429 | ||
|
|
bd0cde7e87 | ||
|
|
dd36e08d7d | ||
|
|
4634def93e | ||
|
|
1974a8bb8d | ||
|
|
e9a6609593 | ||
|
|
b20577026e | ||
|
|
dae9e137f7 | ||
|
|
1509d0c5bb | ||
|
|
430ebbd1c5 | ||
|
|
b561eaee6d | ||
|
|
1aa21c3762 | ||
|
|
c8a67177d8 |
18
Dockerfile
18
Dockerfile
@@ -1,4 +1,4 @@
|
|||||||
FROM sismics/ubuntu-jetty:9.4.51
|
FROM sismics/ubuntu-jetty:11.0.14
|
||||||
LABEL maintainer="b.gamard@sismics.com"
|
LABEL maintainer="b.gamard@sismics.com"
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
@@ -32,12 +32,16 @@ RUN apt-get update && \
|
|||||||
tesseract-ocr-tur \
|
tesseract-ocr-tur \
|
||||||
tesseract-ocr-ukr \
|
tesseract-ocr-ukr \
|
||||||
tesseract-ocr-vie && \
|
tesseract-ocr-vie && \
|
||||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
apt-get clean && rm -rf /var/lib/apt/lists/* && \
|
||||||
|
mkdir /app && \
|
||||||
|
cd /app && \
|
||||||
|
java -jar /opt/jetty/start.jar --add-modules=server,http,webapp,deploy
|
||||||
|
|
||||||
# Remove the embedded javax.mail jar from Jetty
|
ADD docs.xml /app/webapps/docs.xml
|
||||||
RUN rm -f /opt/jetty/lib/mail/javax.mail.glassfish-*.jar
|
ADD docs-web/target/docs-web-*.war /app/webapps/docs.war
|
||||||
|
|
||||||
ADD docs.xml /opt/jetty/webapps/docs.xml
|
|
||||||
ADD docs-web/target/docs-web-*.war /opt/jetty/webapps/docs.war
|
|
||||||
|
|
||||||
ENV JAVA_OPTIONS -Xmx1g
|
ENV JAVA_OPTIONS -Xmx1g
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
CMD ["java", "-jar", "/opt/jetty/start.jar"]
|
||||||
|
|
||||||
|
|||||||
50
README.md
50
README.md
@@ -3,6 +3,7 @@
|
|||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||||
|
[](https://github.com/sismics/docs/actions/workflows/build-deploy.yml)
|
||||||
|
|
||||||
Teedy is an open source, lightweight document management system for individuals and businesses.
|
Teedy is an open source, lightweight document management system for individuals and businesses.
|
||||||
|
|
||||||
@@ -54,7 +55,7 @@ A demo is available at [demo.teedy.io](https://demo.teedy.io)
|
|||||||
|
|
||||||
# Install with Docker
|
# Install with Docker
|
||||||
|
|
||||||
A preconfigured Docker image is available, including OCR and media conversion tools, listening on port 8080. The database is an embedded H2 database but PostgreSQL is also supported for more performance.
|
A preconfigured Docker image is available, including OCR and media conversion tools, listening on port 8080. If no PostgreSQL config is provided, the database is an embedded H2 database. The H2 embedded database should only be used for testing. For production usage use the provided PostgreSQL configuration (check the Docker Compose example)
|
||||||
|
|
||||||
**The default admin password is "admin". Don't forget to change it before going to production.**
|
**The default admin password is "admin". Don't forget to change it before going to production.**
|
||||||
|
|
||||||
@@ -95,30 +96,8 @@ To build external URL, the server is expecting a `DOCS_BASE_URL` environment var
|
|||||||
|
|
||||||
In the following examples some passwords are exposed in cleartext. This was done in order to keep the examples simple. We strongly encourage you to use variables with an `.env` file or other means to securely store your passwords.
|
In the following examples some passwords are exposed in cleartext. This was done in order to keep the examples simple. We strongly encourage you to use variables with an `.env` file or other means to securely store your passwords.
|
||||||
|
|
||||||
### Using the internal database
|
|
||||||
|
|
||||||
```yaml
|
### Default, using PostgreSQL
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
# Teedy Application
|
|
||||||
teedy-server:
|
|
||||||
image: sismics/docs:v1.11
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
# Map internal port to host
|
|
||||||
- 8080:8080
|
|
||||||
environment:
|
|
||||||
# Base url to be used
|
|
||||||
DOCS_BASE_URL: "https://docs.example.com"
|
|
||||||
# Set the admin email
|
|
||||||
DOCS_ADMIN_EMAIL_INIT: "admin@example.com"
|
|
||||||
# Set the admin password (in this example: "superSecure")
|
|
||||||
DOCS_ADMIN_PASSWORD_INIT: "$$2a$$05$$PcMNUbJvsk7QHFSfEIDaIOjk1VI9/E7IPjTKx.jkjPxkx2EOKSoPS"
|
|
||||||
volumes:
|
|
||||||
- ./docs/data:/data
|
|
||||||
```
|
|
||||||
|
|
||||||
### Using PostgreSQL
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
version: '3'
|
version: '3'
|
||||||
@@ -176,6 +155,29 @@ networks:
|
|||||||
driver: bridge
|
driver: bridge
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Using the internal database (only for testing)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
# Teedy Application
|
||||||
|
teedy-server:
|
||||||
|
image: sismics/docs:v1.11
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
# Map internal port to host
|
||||||
|
- 8080:8080
|
||||||
|
environment:
|
||||||
|
# Base url to be used
|
||||||
|
DOCS_BASE_URL: "https://docs.example.com"
|
||||||
|
# Set the admin email
|
||||||
|
DOCS_ADMIN_EMAIL_INIT: "admin@example.com"
|
||||||
|
# Set the admin password (in this example: "superSecure")
|
||||||
|
DOCS_ADMIN_PASSWORD_INIT: "$$2a$$05$$PcMNUbJvsk7QHFSfEIDaIOjk1VI9/E7IPjTKx.jkjPxkx2EOKSoPS"
|
||||||
|
volumes:
|
||||||
|
- ./docs/data:/data
|
||||||
|
```
|
||||||
|
|
||||||
# Manual installation
|
# Manual installation
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.sismics.docs</groupId>
|
<groupId>com.sismics.docs</groupId>
|
||||||
<artifactId>docs-parent</artifactId>
|
<artifactId>docs-parent</artifactId>
|
||||||
<version>1.11</version>
|
<version>1.12-SNAPSHOT</version>
|
||||||
<relativePath>..</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -18,17 +18,7 @@
|
|||||||
<!-- Persistence layer dependencies -->
|
<!-- Persistence layer dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hibernate</groupId>
|
<groupId>org.hibernate</groupId>
|
||||||
<artifactId>hibernate-core</artifactId>
|
<artifactId>hibernate-core-jakarta</artifactId>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.hibernate</groupId>
|
|
||||||
<artifactId>hibernate-entitymanager</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.hibernate</groupId>
|
|
||||||
<artifactId>hibernate-c3p0</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Other external dependencies -->
|
<!-- Other external dependencies -->
|
||||||
@@ -48,8 +38,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-lang</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -63,8 +53,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.glassfish</groupId>
|
<groupId>jakarta.json</groupId>
|
||||||
<artifactId>javax.json</artifactId>
|
<artifactId>jakarta.json-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -72,16 +62,6 @@
|
|||||||
<artifactId>jsoup</artifactId>
|
<artifactId>jsoup</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>log4j</groupId>
|
|
||||||
<artifactId>log4j</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-log4j12</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
@@ -92,6 +72,21 @@
|
|||||||
<artifactId>jcl-over-slf4j</artifactId>
|
<artifactId>jcl-over-slf4j</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>jul-to-slf4j</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-to-slf4j</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>at.favre.lib</groupId>
|
<groupId>at.favre.lib</groupId>
|
||||||
<artifactId>bcrypt</artifactId>
|
<artifactId>bcrypt</artifactId>
|
||||||
@@ -122,11 +117,6 @@
|
|||||||
<artifactId>lucene-highlighter</artifactId>
|
<artifactId>lucene-highlighter</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.sun.mail</groupId>
|
|
||||||
<artifactId>javax.mail</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.squareup.okhttp3</groupId>
|
<groupId>com.squareup.okhttp3</groupId>
|
||||||
<artifactId>okhttp</artifactId>
|
<artifactId>okhttp</artifactId>
|
||||||
@@ -195,25 +185,6 @@
|
|||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- JDK 11 JAXB dependencies -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.xml.bind</groupId>
|
|
||||||
<artifactId>jaxb-api</artifactId>
|
|
||||||
<version>2.3.0</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.sun.xml.bind</groupId>
|
|
||||||
<artifactId>jaxb-core</artifactId>
|
|
||||||
<version>2.3.0</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.sun.xml.bind</groupId>
|
|
||||||
<artifactId>jaxb-impl</artifactId>
|
|
||||||
<version>2.3.0</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Test dependencies -->
|
<!-- Test dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public enum ConfigType {
|
|||||||
INBOX_ENABLED,
|
INBOX_ENABLED,
|
||||||
INBOX_HOSTNAME,
|
INBOX_HOSTNAME,
|
||||||
INBOX_PORT,
|
INBOX_PORT,
|
||||||
|
INBOX_STARTTLS,
|
||||||
INBOX_USERNAME,
|
INBOX_USERNAME,
|
||||||
INBOX_PASSWORD,
|
INBOX_PASSWORD,
|
||||||
INBOX_FOLDER,
|
INBOX_FOLDER,
|
||||||
@@ -53,6 +54,7 @@ public enum ConfigType {
|
|||||||
LDAP_ENABLED,
|
LDAP_ENABLED,
|
||||||
LDAP_HOST,
|
LDAP_HOST,
|
||||||
LDAP_PORT,
|
LDAP_PORT,
|
||||||
|
LDAP_USESSL,
|
||||||
LDAP_ADMIN_DN,
|
LDAP_ADMIN_DN,
|
||||||
LDAP_ADMIN_PASSWORD,
|
LDAP_ADMIN_PASSWORD,
|
||||||
LDAP_BASE_DN,
|
LDAP_BASE_DN,
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import com.sismics.docs.core.util.AuditLogUtil;
|
|||||||
import com.sismics.docs.core.util.SecurityUtil;
|
import com.sismics.docs.core.util.SecurityUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import com.sismics.docs.core.util.jpa.QueryParam;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.sismics.docs.core.model.jpa.AuthenticationToken;
|
|||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import com.sismics.docs.core.model.jpa.Comment;
|
|||||||
import com.sismics.docs.core.util.AuditLogUtil;
|
import com.sismics.docs.core.util.AuditLogUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.sismics.docs.core.constant.ConfigType;
|
|||||||
import com.sismics.docs.core.model.jpa.Config;
|
import com.sismics.docs.core.model.jpa.Config;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration parameter DAO.
|
* Configuration parameter DAO.
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.sismics.docs.core.dao.dto.ContributorDto;
|
|||||||
import com.sismics.docs.core.model.jpa.Contributor;
|
import com.sismics.docs.core.model.jpa.Contributor;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import com.sismics.docs.core.model.jpa.Document;
|
|||||||
import com.sismics.docs.core.util.AuditLogUtil;
|
import com.sismics.docs.core.util.AuditLogUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import javax.persistence.TypedQuery;
|
import jakarta.persistence.TypedQuery;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import com.sismics.docs.core.dao.dto.DocumentMetadataDto;
|
|||||||
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import com.sismics.docs.core.model.jpa.File;
|
|||||||
import com.sismics.docs.core.util.AuditLogUtil;
|
import com.sismics.docs.core.util.AuditLogUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.TypedQuery;
|
import jakarta.persistence.TypedQuery;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import com.sismics.util.context.ThreadLocalContext;
|
|||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.DurationFieldType;
|
import org.joda.time.DurationFieldType;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.sismics.docs.core.dao.dto.RelationDto;
|
|||||||
import com.sismics.docs.core.model.jpa.Relation;
|
import com.sismics.docs.core.model.jpa.Relation;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package com.sismics.docs.core.dao;
|
|||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package com.sismics.docs.core.dao;
|
|||||||
import com.sismics.docs.core.model.jpa.Share;
|
import com.sismics.docs.core.model.jpa.Share;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package com.sismics.docs.core.dao;
|
|||||||
import com.sismics.docs.core.model.jpa.Vocabulary;
|
import com.sismics.docs.core.model.jpa.Vocabulary;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import com.sismics.docs.core.util.jpa.QueryUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.NoResultException;
|
import jakarta.persistence.NoResultException;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -84,9 +84,9 @@ public class DocumentCriteria {
|
|||||||
private String mimeType;
|
private String mimeType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The title.
|
* Titles to include.
|
||||||
*/
|
*/
|
||||||
private String title;
|
private List<String> titleList = new ArrayList<>();
|
||||||
|
|
||||||
public List<String> getTargetIdList() {
|
public List<String> getTargetIdList() {
|
||||||
return targetIdList;
|
return targetIdList;
|
||||||
@@ -192,11 +192,7 @@ public class DocumentCriteria {
|
|||||||
this.mimeType = mimeType;
|
this.mimeType = mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public List<String> getTitleList() {
|
||||||
return title;
|
return titleList;
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package com.sismics.docs.core.dao.dto;
|
|||||||
import com.sismics.docs.core.constant.RouteStepType;
|
import com.sismics.docs.core.constant.RouteStepType;
|
||||||
import com.sismics.util.JsonUtil;
|
import com.sismics.util.JsonUtil;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonObjectBuilder;
|
import jakarta.json.JsonObjectBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Route step DTO.
|
* Route step DTO.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.google.common.base.MoreObjects;
|
|||||||
import com.sismics.docs.core.constant.AclType;
|
import com.sismics.docs.core.constant.AclType;
|
||||||
import com.sismics.docs.core.constant.PermType;
|
import com.sismics.docs.core.constant.PermType;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.EnumType;
|
import jakarta.persistence.EnumType;
|
||||||
import javax.persistence.Enumerated;
|
import jakarta.persistence.Enumerated;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.sismics.docs.core.constant.AuditLogType;
|
import com.sismics.docs.core.constant.AuditLogType;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.sismics.docs.core.model.jpa;
|
package com.sismics.docs.core.model.jpa;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.sismics.docs.core.model.jpa;
|
package com.sismics.docs.core.model.jpa;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.EnumType;
|
import jakarta.persistence.EnumType;
|
||||||
import javax.persistence.Enumerated;
|
import jakarta.persistence.Enumerated;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.sismics.docs.core.constant.ConfigType;
|
import com.sismics.docs.core.constant.ConfigType;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.sismics.docs.core.model.jpa;
|
package com.sismics.docs.core.model.jpa;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.google.common.base.MoreObjects;
|
|||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.sismics.util.mime.MimeTypeUtil;
|
import com.sismics.util.mime.MimeTypeUtil;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.sismics.docs.core.constant.MetadataType;
|
import com.sismics.docs.core.constant.MetadataType;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.google.common.base.MoreObjects;
|
|||||||
import com.sismics.docs.core.constant.RouteStepTransition;
|
import com.sismics.docs.core.constant.RouteStepTransition;
|
||||||
import com.sismics.docs.core.constant.RouteStepType;
|
import com.sismics.docs.core.constant.RouteStepType;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.sismics.docs.core.model.jpa;
|
package com.sismics.docs.core.model.jpa;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.sismics.docs.core.model.jpa;
|
|||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.sismics.docs.core.constant.WebhookEvent;
|
import com.sismics.docs.core.constant.WebhookEvent;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import com.sismics.docs.core.util.TransactionUtil;
|
|||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
import com.sismics.util.EmailUtil;
|
import com.sismics.util.EmailUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -159,6 +159,7 @@ public class InboxService extends AbstractScheduledService {
|
|||||||
String port = ConfigUtil.getConfigStringValue(ConfigType.INBOX_PORT);
|
String port = ConfigUtil.getConfigStringValue(ConfigType.INBOX_PORT);
|
||||||
properties.put("mail.imap.host", ConfigUtil.getConfigStringValue(ConfigType.INBOX_HOSTNAME));
|
properties.put("mail.imap.host", ConfigUtil.getConfigStringValue(ConfigType.INBOX_HOSTNAME));
|
||||||
properties.put("mail.imap.port", port);
|
properties.put("mail.imap.port", port);
|
||||||
|
properties.setProperty("mail.imap.starttls.enable", ConfigUtil.getConfigStringValue(ConfigType.INBOX_STARTTLS).toString());
|
||||||
boolean isSsl = "993".equals(port);
|
boolean isSsl = "993".equals(port);
|
||||||
properties.put("mail.imap.ssl.enable", String.valueOf(isSsl));
|
properties.put("mail.imap.ssl.enable", String.valueOf(isSsl));
|
||||||
properties.setProperty("mail.imap.socketFactory.class",
|
properties.setProperty("mail.imap.socketFactory.class",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import com.sismics.docs.core.util.action.RemoveTagAction;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action utilities.
|
* Action utilities.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.sismics.docs.core.model.jpa.AuditLog;
|
|||||||
import com.sismics.docs.core.model.jpa.Loggable;
|
import com.sismics.docs.core.model.jpa.Loggable;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Audit log utilities.
|
* Audit log utilities.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.sismics.util.EnvironmentUtil;
|
import com.sismics.util.EnvironmentUtil;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import com.sismics.util.Scalr;
|
|||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import com.sismics.util.io.InputStreamReaderThread;
|
import com.sismics.util.io.InputStreamReaderThread;
|
||||||
import com.sismics.util.mime.MimeTypeUtil;
|
import com.sismics.util.mime.MimeTypeUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import com.sismics.docs.core.dao.dto.MetadataDto;
|
|||||||
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
import com.sismics.docs.core.model.jpa.DocumentMetadata;
|
||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonArrayBuilder;
|
import jakarta.json.JsonArrayBuilder;
|
||||||
import javax.json.JsonObjectBuilder;
|
import jakarta.json.JsonObjectBuilder;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ import com.sismics.docs.core.model.jpa.Document;
|
|||||||
import com.sismics.docs.core.model.jpa.RouteModel;
|
import com.sismics.docs.core.model.jpa.RouteModel;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonArray;
|
import jakarta.json.JsonArray;
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import javax.json.JsonReader;
|
import jakarta.json.JsonReader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import com.sismics.util.jpa.EMF;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.EntityTransaction;
|
import jakarta.persistence.EntityTransaction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database transaction utils.
|
* Database transaction utils.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.sismics.docs.core.util.action;
|
|||||||
|
|
||||||
import com.sismics.docs.core.dao.dto.DocumentDto;
|
import com.sismics.docs.core.dao.dto.DocumentDto;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base action interface.
|
* Base action interface.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.sismics.docs.core.dao.criteria.TagCriteria;
|
|||||||
import com.sismics.docs.core.dao.dto.DocumentDto;
|
import com.sismics.docs.core.dao.dto.DocumentDto;
|
||||||
import com.sismics.docs.core.dao.dto.TagDto;
|
import com.sismics.docs.core.dao.dto.TagDto;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import com.sismics.util.context.ThreadLocalContext;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.sismics.docs.core.dao.criteria.TagCriteria;
|
|||||||
import com.sismics.docs.core.dao.dto.DocumentDto;
|
import com.sismics.docs.core.dao.dto.DocumentDto;
|
||||||
import com.sismics.docs.core.dao.dto.TagDto;
|
import com.sismics.docs.core.dao.dto.TagDto;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import com.sismics.docs.core.dao.TagDao;
|
|||||||
import com.sismics.docs.core.dao.criteria.TagCriteria;
|
import com.sismics.docs.core.dao.criteria.TagCriteria;
|
||||||
import com.sismics.docs.core.dao.dto.TagDto;
|
import com.sismics.docs.core.dao.dto.TagDto;
|
||||||
|
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -13,10 +13,9 @@ import org.apache.directory.api.ldap.model.entry.Attribute;
|
|||||||
import org.apache.directory.api.ldap.model.entry.Entry;
|
import org.apache.directory.api.ldap.model.entry.Entry;
|
||||||
import org.apache.directory.api.ldap.model.entry.Value;
|
import org.apache.directory.api.ldap.model.entry.Value;
|
||||||
import org.apache.directory.api.ldap.model.message.SearchScope;
|
import org.apache.directory.api.ldap.model.message.SearchScope;
|
||||||
import org.apache.directory.ldap.client.api.DefaultLdapConnectionFactory;
|
import org.apache.directory.ldap.client.api.LdapConnection;
|
||||||
import org.apache.directory.ldap.client.api.LdapConnectionConfig;
|
import org.apache.directory.ldap.client.api.LdapConnectionConfig;
|
||||||
import org.apache.directory.ldap.client.api.LdapConnectionPool;
|
import org.apache.directory.ldap.client.api.LdapNetworkConnection;
|
||||||
import org.apache.directory.ldap.client.api.ValidatingPoolableLdapConnectionFactory;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -35,59 +34,40 @@ public class LdapAuthenticationHandler implements AuthenticationHandler {
|
|||||||
private static final Logger log = LoggerFactory.getLogger(LdapAuthenticationHandler.class);
|
private static final Logger log = LoggerFactory.getLogger(LdapAuthenticationHandler.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LDAP connection pool.
|
* Get a LDAP connection.
|
||||||
|
* @return LdapConnection
|
||||||
*/
|
*/
|
||||||
private static LdapConnectionPool pool;
|
private LdapConnection getConnection() {
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset the LDAP pool.
|
|
||||||
*/
|
|
||||||
public static void reset() {
|
|
||||||
if (pool != null) {
|
|
||||||
try {
|
|
||||||
pool.close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
// NOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pool = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the LDAP pool.
|
|
||||||
*/
|
|
||||||
private static void init() {
|
|
||||||
ConfigDao configDao = new ConfigDao();
|
ConfigDao configDao = new ConfigDao();
|
||||||
Config ldapEnabled = configDao.getById(ConfigType.LDAP_ENABLED);
|
Config ldapEnabled = configDao.getById(ConfigType.LDAP_ENABLED);
|
||||||
if (pool != null || ldapEnabled == null || !Boolean.parseBoolean(ldapEnabled.getValue())) {
|
if (ldapEnabled == null || !Boolean.parseBoolean(ldapEnabled.getValue())) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
LdapConnectionConfig config = new LdapConnectionConfig();
|
LdapConnectionConfig config = new LdapConnectionConfig();
|
||||||
config.setLdapHost(ConfigUtil.getConfigStringValue(ConfigType.LDAP_HOST));
|
config.setLdapHost(ConfigUtil.getConfigStringValue(ConfigType.LDAP_HOST));
|
||||||
config.setLdapPort(ConfigUtil.getConfigIntegerValue(ConfigType.LDAP_PORT));
|
config.setLdapPort(ConfigUtil.getConfigIntegerValue(ConfigType.LDAP_PORT));
|
||||||
|
config.setUseSsl(ConfigUtil.getConfigBooleanValue(ConfigType.LDAP_USESSL));
|
||||||
config.setName(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_DN));
|
config.setName(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_DN));
|
||||||
config.setCredentials(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_PASSWORD));
|
config.setCredentials(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_PASSWORD));
|
||||||
|
|
||||||
DefaultLdapConnectionFactory factory = new DefaultLdapConnectionFactory(config);
|
return new LdapNetworkConnection(config);
|
||||||
pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User authenticate(String username, String password) {
|
public User authenticate(String username, String password) {
|
||||||
init();
|
// Fetch and authenticate the user
|
||||||
if (pool == null) {
|
Entry userEntry;
|
||||||
|
try (LdapConnection ldapConnection = getConnection()) {
|
||||||
|
if (ldapConnection == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch and authenticate the user
|
EntryCursor cursor = ldapConnection.search(ConfigUtil.getConfigStringValue(ConfigType.LDAP_BASE_DN),
|
||||||
Entry userEntry;
|
|
||||||
try {
|
|
||||||
EntryCursor cursor = pool.getConnection().search(ConfigUtil.getConfigStringValue(ConfigType.LDAP_BASE_DN),
|
|
||||||
ConfigUtil.getConfigStringValue(ConfigType.LDAP_FILTER).replace("USERNAME", username), SearchScope.SUBTREE);
|
ConfigUtil.getConfigStringValue(ConfigType.LDAP_FILTER).replace("USERNAME", username), SearchScope.SUBTREE);
|
||||||
if (cursor.next()) {
|
if (cursor.next()) {
|
||||||
userEntry = cursor.get();
|
userEntry = cursor.get();
|
||||||
pool.getConnection().bind(userEntry.getDn(), password);
|
ldapConnection.bind(userEntry.getDn(), password);
|
||||||
} else {
|
} else {
|
||||||
// User not found
|
// User not found
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -295,9 +295,9 @@ public class LuceneIndexingHandler implements IndexingHandler {
|
|||||||
criteriaList.add("d.DOC_UPDATEDATE_D <= :updateDateMax");
|
criteriaList.add("d.DOC_UPDATEDATE_D <= :updateDateMax");
|
||||||
parameterMap.put("updateDateMax", criteria.getUpdateDateMax());
|
parameterMap.put("updateDateMax", criteria.getUpdateDateMax());
|
||||||
}
|
}
|
||||||
if (criteria.getTitle() != null) {
|
if (!criteria.getTitleList().isEmpty()) {
|
||||||
criteriaList.add("d.DOC_TITLE_C = :title");
|
criteriaList.add("d.DOC_TITLE_C in :title");
|
||||||
parameterMap.put("title", criteria.getTitle());
|
parameterMap.put("title", criteria.getTitleList());
|
||||||
}
|
}
|
||||||
if (!criteria.getTagIdList().isEmpty()) {
|
if (!criteria.getTagIdList().isEmpty()) {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@@ -347,10 +347,8 @@ public class LuceneIndexingHandler implements IndexingHandler {
|
|||||||
|
|
||||||
criteriaList.add("d.DOC_DELETEDATE_D is null");
|
criteriaList.add("d.DOC_DELETEDATE_D is null");
|
||||||
|
|
||||||
if (!criteriaList.isEmpty()) {
|
|
||||||
sb.append(" where ");
|
sb.append(" where ");
|
||||||
sb.append(Joiner.on(" and ").join(criteriaList));
|
sb.append(Joiner.on(" and ").join(criteriaList));
|
||||||
}
|
|
||||||
|
|
||||||
// Perform the search
|
// Perform the search
|
||||||
QueryParam queryParam = new QueryParam(sb.toString(), parameterMap);
|
QueryParam queryParam = new QueryParam(sb.toString(), parameterMap);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.sismics.docs.core.util.jpa;
|
package com.sismics.docs.core.util.jpa;
|
||||||
|
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package com.sismics.docs.core.util.jpa;
|
|||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.Query;
|
import jakarta.persistence.Query;
|
||||||
|
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ import org.jsoup.Jsoup;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonObject;
|
import jakarta.json.JsonObject;
|
||||||
import javax.json.JsonReader;
|
import jakarta.json.JsonReader;
|
||||||
import javax.mail.Message;
|
import javax.mail.Message;
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
import javax.mail.Multipart;
|
import javax.mail.Multipart;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.sismics.util;
|
package com.sismics.util;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonValue;
|
import jakarta.json.JsonValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JSON utilities.
|
* JSON utilities.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.sismics.util.context;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.sismics.docs.core.model.context.AppContext;
|
import com.sismics.docs.core.model.context.AppContext;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package com.sismics.util.io;
|
package com.sismics.util.io;
|
||||||
|
|
||||||
import com.google.common.io.Closer;
|
import com.google.common.io.Closer;
|
||||||
import org.apache.log4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -15,7 +16,7 @@ import java.io.InputStreamReader;
|
|||||||
*/
|
*/
|
||||||
public class InputStreamReaderThread extends Thread {
|
public class InputStreamReaderThread extends Thread {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(InputStreamReaderThread.class);
|
private static final Logger logger = LoggerFactory.getLogger(InputStreamReaderThread.class);
|
||||||
|
|
||||||
private InputStream is;
|
private InputStream is;
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import org.hibernate.service.ServiceRegistry;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.persistence.EntityManagerFactory;
|
import jakarta.persistence.EntityManagerFactory;
|
||||||
import javax.persistence.Persistence;
|
import jakarta.persistence.Persistence;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@@ -85,6 +85,7 @@ public final class EMF {
|
|||||||
Path dbDirectory = DirectoryUtil.getDbDirectory();
|
Path dbDirectory = DirectoryUtil.getDbDirectory();
|
||||||
String dbFile = dbDirectory.resolve("docs").toAbsolutePath().toString();
|
String dbFile = dbDirectory.resolve("docs").toAbsolutePath().toString();
|
||||||
if (Strings.isNullOrEmpty(databaseUrl)) {
|
if (Strings.isNullOrEmpty(databaseUrl)) {
|
||||||
|
log.warn("Using an embedded H2 database. Only suitable for testing purpose, not for production!");
|
||||||
props.put("hibernate.connection.driver_class", "org.h2.Driver");
|
props.put("hibernate.connection.driver_class", "org.h2.Driver");
|
||||||
props.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
|
props.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
|
||||||
props.put("hibernate.connection.url", "jdbc:h2:file:" + dbFile + ";CACHE_SIZE=65536;LOCK_TIMEOUT=10000");
|
props.put("hibernate.connection.url", "jdbc:h2:file:" + dbFile + ";CACHE_SIZE=65536;LOCK_TIMEOUT=10000");
|
||||||
@@ -101,12 +102,9 @@ public final class EMF {
|
|||||||
props.put("hibernate.format_sql", "false");
|
props.put("hibernate.format_sql", "false");
|
||||||
props.put("hibernate.max_fetch_depth", "5");
|
props.put("hibernate.max_fetch_depth", "5");
|
||||||
props.put("hibernate.cache.use_second_level_cache", "false");
|
props.put("hibernate.cache.use_second_level_cache", "false");
|
||||||
props.put("hibernate.c3p0.min_size", "1");
|
props.put("hibernate.connection.initial_pool_size", "1");
|
||||||
props.put("hibernate.c3p0.max_size", "10");
|
props.put("hibernate.connection.pool_size", "10");
|
||||||
props.put("hibernate.c3p0.timeout", "5000");
|
props.put("hibernate.connection.pool_validation_interval", "5");
|
||||||
props.put("hibernate.c3p0.max_statements", "0");
|
|
||||||
props.put("hibernate.c3p0.acquire_increment", "1");
|
|
||||||
props.put("hibernate.c3p0.idle_test_period", "10");
|
|
||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.sismics.util.log4j;
|
package com.sismics.util.logback;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import ch.qos.logback.classic.Level;
|
||||||
import org.apache.log4j.Level;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log search criteria.
|
* Log search criteria.
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.sismics.util.log4j;
|
package com.sismics.util.logback;
|
||||||
|
|
||||||
import org.apache.log4j.Level;
|
|
||||||
|
import ch.qos.logback.classic.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log entry.
|
* Log entry.
|
||||||
@@ -1,25 +1,22 @@
|
|||||||
package com.sismics.util.log4j;
|
package com.sismics.util.logback;
|
||||||
|
|
||||||
|
import ch.qos.logback.classic.Level;
|
||||||
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
|
import ch.qos.logback.core.AppenderBase;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.sismics.docs.core.util.jpa.PaginatedList;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
||||||
import org.apache.log4j.AppenderSkeleton;
|
|
||||||
import org.apache.log4j.Level;
|
|
||||||
import org.apache.log4j.helpers.LogLog;
|
|
||||||
import org.apache.log4j.spi.LoggingEvent;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.sismics.docs.core.util.jpa.PaginatedList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Memory appender for Log4J.
|
* Memory appender for Logback.
|
||||||
*
|
*
|
||||||
* @author jtremeaux
|
* @author jtremeaux
|
||||||
*/
|
*/
|
||||||
public class MemoryAppender extends AppenderSkeleton {
|
public class MemoryAppender extends AppenderBase<ILoggingEvent> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum size of the queue.
|
* Maximum size of the queue.
|
||||||
@@ -29,34 +26,18 @@ public class MemoryAppender extends AppenderSkeleton {
|
|||||||
/**
|
/**
|
||||||
* Queue of log entries.
|
* Queue of log entries.
|
||||||
*/
|
*/
|
||||||
private final Queue<LogEntry> logQueue = new ConcurrentLinkedQueue<LogEntry>();
|
private static final Queue<LogEntry> logQueue = new ConcurrentLinkedQueue<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean requiresLayout() {
|
protected void append(ILoggingEvent event) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void close() {
|
|
||||||
if (closed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
closed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void append(LoggingEvent event) {
|
|
||||||
while (logQueue.size() > size) {
|
while (logQueue.size() > size) {
|
||||||
logQueue.remove();
|
logQueue.remove();
|
||||||
}
|
}
|
||||||
if (closed) {
|
|
||||||
LogLog.warn("This appender is already closed, cannot append event.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String loggerName = getLoggerName(event);
|
String loggerName = getLoggerName(event);
|
||||||
|
|
||||||
LogEntry logEntry = new LogEntry(System.currentTimeMillis(), event.getLevel(), loggerName, event.getMessage().toString());
|
LogEntry logEntry = new LogEntry(System.currentTimeMillis(), event.getLevel(), loggerName, event.getMessage());
|
||||||
logQueue.add(logEntry);
|
logQueue.add(logEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +47,7 @@ public class MemoryAppender extends AppenderSkeleton {
|
|||||||
* @param event Event
|
* @param event Event
|
||||||
* @return Class name
|
* @return Class name
|
||||||
*/
|
*/
|
||||||
private String getLoggerName(LoggingEvent event) {
|
private String getLoggerName(ILoggingEvent event) {
|
||||||
int index = event.getLoggerName().lastIndexOf('.');
|
int index = event.getLoggerName().lastIndexOf('.');
|
||||||
|
|
||||||
return (index > -1) ?
|
return (index > -1) ?
|
||||||
@@ -75,12 +56,12 @@ public class MemoryAppender extends AppenderSkeleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter of logList.
|
* Getter of size.
|
||||||
*
|
*
|
||||||
* @return logList
|
* @return size
|
||||||
*/
|
*/
|
||||||
public Queue<LogEntry> getLogList() {
|
public int getSize() {
|
||||||
return logQueue;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,15 +79,14 @@ public class MemoryAppender extends AppenderSkeleton {
|
|||||||
* @param criteria Search criteria
|
* @param criteria Search criteria
|
||||||
* @param list Paginated list (modified by side effect)
|
* @param list Paginated list (modified by side effect)
|
||||||
*/
|
*/
|
||||||
public void find(LogCriteria criteria, PaginatedList<LogEntry> list) {
|
public static void find(LogCriteria criteria, PaginatedList<LogEntry> list) {
|
||||||
List<LogEntry> logEntryList = new LinkedList<LogEntry>();
|
List<LogEntry> logEntryList = new LinkedList<LogEntry>();
|
||||||
final Level minLevel = criteria.getMinLevel();
|
final Level minLevel = criteria.getMinLevel();
|
||||||
final String tag = criteria.getTag();
|
final String tag = criteria.getTag();
|
||||||
final String message = criteria.getMessage();
|
final String message = criteria.getMessage();
|
||||||
int resultCount = 0;
|
int resultCount = 0;
|
||||||
for (Iterator<LogEntry> it = logQueue.iterator(); it.hasNext();) {
|
for (LogEntry logEntry : logQueue) {
|
||||||
LogEntry logEntry = it.next();
|
if ((minLevel == null || logEntry.getLevel().toInt() >= minLevel.toInt()) &&
|
||||||
if ((minLevel == null || Integer.compare(logEntry.getLevel().toInt(), minLevel.toInt()) >= 0) &&
|
|
||||||
(tag == null || logEntry.getTag().toLowerCase().equals(tag)) &&
|
(tag == null || logEntry.getTag().toLowerCase().equals(tag)) &&
|
||||||
(message == null || logEntry.getMessage().toLowerCase().contains(message))) {
|
(message == null || logEntry.getMessage().toLowerCase().contains(message))) {
|
||||||
logEntryList.add(logEntry);
|
logEntryList.add(logEntry);
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
|
||||||
version="2.0">
|
version="3.0">
|
||||||
<persistence-unit name="transactions-optional" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="transactions-optional" transaction-type="RESOURCE_LOCAL">
|
||||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
db.version=27
|
db.version=28
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
insert into T_CONFIG(CFG_ID_C, CFG_VALUE_C) values('INBOX_STARTTLS', 'false');
|
||||||
|
update T_CONFIG set CFG_VALUE_C = '28' where CFG_ID_C = 'DB_VERSION';
|
||||||
@@ -5,8 +5,8 @@ import com.sismics.util.jpa.EMF;
|
|||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import javax.persistence.EntityTransaction;
|
import jakarta.persistence.EntityTransaction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class of tests with a transactional context.
|
* Base class of tests with a transactional context.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ hibernate.show_sql=true
|
|||||||
hibernate.format_sql=false
|
hibernate.format_sql=false
|
||||||
hibernate.max_fetch_depth=5
|
hibernate.max_fetch_depth=5
|
||||||
hibernate.cache.use_second_level_cache=false
|
hibernate.cache.use_second_level_cache=false
|
||||||
hibernate.c3p0.min_size=1
|
hibernate.connection.initial_pool_size=1
|
||||||
hibernate.c3p0.max_size=10
|
hibernate.connection.pool_size=10
|
||||||
hibernate.c3p0.timeout=0
|
hibernate.connection.pool_validation_interval=5
|
||||||
hibernate.c3p0.max_statements=0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
log4j.rootCategory=DEBUG, CONSOLE, MEMORY
|
|
||||||
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
|
|
||||||
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
|
|
||||||
log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE} %p %l %m %n
|
|
||||||
log4j.appender.MEMORY=com.sismics.util.log4j.MemoryAppender
|
|
||||||
log4j.appender.MEMORY.size=1000
|
|
||||||
|
|
||||||
log4j.logger.com.sismics=INFO
|
|
||||||
log4j.logger.org.hibernate=ERROR
|
|
||||||
log4j.logger.org.apache.directory=ERROR
|
|
||||||
18
docs-core/src/test/resources/logback.xml
Normal file
18
docs-core/src/test/resources/logback.xml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%date [%t] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
<appender name="MEMORY" class="com.sismics.util.logback.MemoryAppender">
|
||||||
|
<size>1000</size>
|
||||||
|
</appender>
|
||||||
|
<logger name="org.apache.directory" level="ERROR"/>
|
||||||
|
<logger name="com.sismics" level="INFO"/>
|
||||||
|
<logger name="org.hibernate" level="ERROR"/>
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
<appender-ref ref="MEMORY"/>
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.sismics.docs</groupId>
|
<groupId>com.sismics.docs</groupId>
|
||||||
<artifactId>docs-parent</artifactId>
|
<artifactId>docs-parent</artifactId>
|
||||||
<version>1.11</version>
|
<version>1.12-SNAPSHOT</version>
|
||||||
<relativePath>..</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
|
|
||||||
<!-- Other external dependencies -->
|
<!-- Other external dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-lang</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -49,18 +49,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>jakarta.servlet</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>jakarta.servlet-api</artifactId>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-dbcp</groupId>
|
|
||||||
<artifactId>commons-dbcp</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.servlet</groupId>
|
|
||||||
<artifactId>javax.servlet-api</artifactId>
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -69,11 +59,6 @@
|
|||||||
<artifactId>joda-time</artifactId>
|
<artifactId>joda-time</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>jul-to-slf4j</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Test dependencies -->
|
<!-- Test dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
package com.sismics.rest.exception;
|
package com.sismics.rest.exception;
|
||||||
|
|
||||||
|
import jakarta.ws.rs.WebApplicationException;
|
||||||
|
import jakarta.ws.rs.core.Response;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import javax.ws.rs.core.Response.Status;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jersey exception encapsulating an error from the client (BAD_REQUEST).
|
* Jersey exception encapsulating an error from the client (BAD_REQUEST).
|
||||||
@@ -43,7 +42,7 @@ public class ClientException extends WebApplicationException {
|
|||||||
* @param message Human readable error message
|
* @param message Human readable error message
|
||||||
*/
|
*/
|
||||||
public ClientException(String type, String message) {
|
public ClientException(String type, String message) {
|
||||||
super(Response.status(Status.BAD_REQUEST).entity(Json.createObjectBuilder()
|
super(Response.status(Response.Status.BAD_REQUEST).entity(Json.createObjectBuilder()
|
||||||
.add("type", type)
|
.add("type", type)
|
||||||
.add("message", message).build()).build());
|
.add("message", message).build()).build());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.sismics.rest.exception;
|
package com.sismics.rest.exception;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.ws.rs.WebApplicationException;
|
import jakarta.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
import jakarta.ws.rs.core.Response.Status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unauthorized access to the resource exception.
|
* Unauthorized access to the resource exception.
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.sismics.rest.exception;
|
package com.sismics.rest.exception;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.ws.rs.WebApplicationException;
|
import jakarta.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
import jakarta.ws.rs.core.Response.Status;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import com.sismics.docs.core.dao.AclDao;
|
|||||||
import com.sismics.docs.core.dao.dto.AclDto;
|
import com.sismics.docs.core.dao.dto.AclDto;
|
||||||
import com.sismics.util.JsonUtil;
|
import com.sismics.util.JsonUtil;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonArrayBuilder;
|
import jakarta.json.JsonArrayBuilder;
|
||||||
import javax.json.JsonObjectBuilder;
|
import jakarta.json.JsonObjectBuilder;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import com.sismics.docs.core.util.FileUtil;
|
|||||||
import com.sismics.rest.exception.ServerException;
|
import com.sismics.rest.exception.ServerException;
|
||||||
import com.sismics.util.JsonUtil;
|
import com.sismics.util.JsonUtil;
|
||||||
|
|
||||||
import javax.json.Json;
|
import jakarta.json.Json;
|
||||||
import javax.json.JsonObjectBuilder;
|
import jakarta.json.JsonObjectBuilder;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.sismics.rest.util;
|
|||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.sismics.rest.exception.ClientException;
|
import com.sismics.rest.exception.ClientException;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package com.sismics.util.filter;
|
|||||||
|
|
||||||
import com.sismics.util.EnvironmentUtil;
|
import com.sismics.util.EnvironmentUtil;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import jakarta.servlet.*;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.google.common.base.Strings;
|
|||||||
import com.sismics.docs.core.dao.UserDao;
|
import com.sismics.docs.core.dao.UserDao;
|
||||||
import com.sismics.docs.core.model.jpa.User;
|
import com.sismics.docs.core.model.jpa.User;
|
||||||
|
|
||||||
import javax.servlet.FilterConfig;
|
import jakarta.servlet.FilterConfig;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A header-based security filter that authenticates an user using the "X-Authenticated-User" request header as the user ID.
|
* A header-based security filter that authenticates an user using the "X-Authenticated-User" request header as the user ID.
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
package com.sismics.util.filter;
|
package com.sismics.util.filter;
|
||||||
|
|
||||||
|
import ch.qos.logback.classic.Level;
|
||||||
|
import ch.qos.logback.classic.LoggerContext;
|
||||||
|
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
|
||||||
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
|
import ch.qos.logback.core.rolling.RollingFileAppender;
|
||||||
|
import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
|
||||||
|
import ch.qos.logback.core.util.FileSize;
|
||||||
import com.sismics.docs.core.model.context.AppContext;
|
import com.sismics.docs.core.model.context.AppContext;
|
||||||
import com.sismics.docs.core.util.DirectoryUtil;
|
import com.sismics.docs.core.util.DirectoryUtil;
|
||||||
import com.sismics.docs.core.util.TransactionUtil;
|
import com.sismics.docs.core.util.TransactionUtil;
|
||||||
import com.sismics.util.EnvironmentUtil;
|
import com.sismics.util.EnvironmentUtil;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import com.sismics.util.jpa.EMF;
|
import com.sismics.util.jpa.EMF;
|
||||||
import org.apache.log4j.Level;
|
import jakarta.persistence.EntityManager;
|
||||||
import org.apache.log4j.PatternLayout;
|
import jakarta.persistence.EntityTransaction;
|
||||||
import org.apache.log4j.RollingFileAppender;
|
import jakarta.servlet.*;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jakarta.ws.rs.core.HttpHeaders;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.slf4j.bridge.SLF4JBridgeHandler;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.EntityTransaction;
|
|
||||||
import javax.servlet.*;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.ws.rs.core.HttpHeaders;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
@@ -48,18 +51,30 @@ public class RequestContextFilter implements Filter {
|
|||||||
|
|
||||||
|
|
||||||
// Initialize file logger
|
// Initialize file logger
|
||||||
RollingFileAppender fileAppender = new RollingFileAppender();
|
LoggerContext logContext = (LoggerContext) LoggerFactory.getILoggerFactory();
|
||||||
fileAppender.setName("FILE");
|
RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>();
|
||||||
fileAppender.setFile(DirectoryUtil.getLogDirectory().resolve("docs.log").toString());
|
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
|
||||||
fileAppender.setLayout(new PatternLayout("%d{DATE} %p %l %m %n"));
|
encoder.setContext(logContext);
|
||||||
fileAppender.setThreshold(Level.INFO);
|
encoder.setPattern("%date [%t] %-5level %logger{36} - %msg%n");
|
||||||
fileAppender.setAppend(true);
|
encoder.start();
|
||||||
fileAppender.setMaxFileSize("5MB");
|
SizeAndTimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new SizeAndTimeBasedRollingPolicy<>();
|
||||||
fileAppender.setMaxBackupIndex(5);
|
rollingPolicy.setMaxFileSize(FileSize.valueOf("5MB"));
|
||||||
fileAppender.activateOptions();
|
rollingPolicy.setFileNamePattern("docs.%d{yyyy-MM-dd_HH}.log");
|
||||||
org.apache.log4j.Logger.getRootLogger().addAppender(fileAppender);
|
rollingPolicy.setMaxHistory(5);
|
||||||
SLF4JBridgeHandler.removeHandlersForRootLogger();
|
rollingPolicy.setContext(logContext);
|
||||||
SLF4JBridgeHandler.install();
|
rollingPolicy.setParent(appender);
|
||||||
|
rollingPolicy.start();
|
||||||
|
appender.setContext(logContext);
|
||||||
|
appender.setName("FILE");
|
||||||
|
appender.setFile(DirectoryUtil.getLogDirectory().resolve("docs.log").toString());
|
||||||
|
appender.setEncoder(encoder);
|
||||||
|
appender.setRollingPolicy(rollingPolicy);
|
||||||
|
appender.setAppend(true);
|
||||||
|
appender.start();
|
||||||
|
ch.qos.logback.classic.Logger logger = logContext.getLogger(Logger.ROOT_LOGGER_NAME);
|
||||||
|
logger.setAdditive(false);
|
||||||
|
logger.setLevel(Level.INFO);
|
||||||
|
logger.addAppender(appender);
|
||||||
|
|
||||||
// Initialize the application context
|
// Initialize the application context
|
||||||
TransactionUtil.handle(AppContext::getInstance);
|
TransactionUtil.handle(AppContext::getInstance);
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import org.joda.time.DateTimeZone;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import jakarta.servlet.*;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import com.sismics.docs.core.dao.UserDao;
|
|||||||
import com.sismics.docs.core.model.jpa.AuthenticationToken;
|
import com.sismics.docs.core.model.jpa.AuthenticationToken;
|
||||||
import com.sismics.docs.core.model.jpa.User;
|
import com.sismics.docs.core.model.jpa.User;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import jakarta.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package com.sismics.util.listener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.imageio.spi.IIORegistry;
|
||||||
|
import javax.imageio.spi.ServiceRegistry;
|
||||||
|
import jakarta.servlet.ServletContext;
|
||||||
|
import jakarta.servlet.ServletContextEvent;
|
||||||
|
import jakarta.servlet.ServletContextListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes care of registering and de-registering local ImageIO plugins (service providers) for the servlet context.
|
||||||
|
* <p>
|
||||||
|
* Registers all available plugins on {@code contextInitialized} event, using {@code ImageIO.scanForPlugins()}, to make
|
||||||
|
* sure they are available to the current servlet context.
|
||||||
|
* De-registers all plugins which have the {@link Thread#getContextClassLoader() current thread's context class loader}
|
||||||
|
* as its class loader on {@code contextDestroyed} event, to avoid class/resource leak.
|
||||||
|
* </p>
|
||||||
|
* Copied from: <a href="https://github.com/haraldk/TwelveMonkeys/blob/master/servlet/src/main/java/com/twelvemonkeys/servlet/image/IIOProviderContextListener.java">https://github.com/haraldk/TwelveMonkeys</a>
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
|
||||||
|
* @author last modified by $Author: haraldk$
|
||||||
|
* @version $Id: IIOProviderContextListener.java,v 1.0 14.02.12 21:53 haraldk Exp$
|
||||||
|
* @see ImageIO#scanForPlugins()
|
||||||
|
*/
|
||||||
|
public final class IIOProviderContextListener implements ServletContextListener {
|
||||||
|
|
||||||
|
public void contextInitialized(final ServletContextEvent event) {
|
||||||
|
event.getServletContext().log("Scanning for locally installed ImageIO plugin providers");
|
||||||
|
|
||||||
|
// Registers all locally available IIO plugins.
|
||||||
|
ImageIO.scanForPlugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void contextDestroyed(final ServletContextEvent event) {
|
||||||
|
ServletContext servletContext = event.getServletContext();
|
||||||
|
|
||||||
|
// De-register any locally registered IIO plugins. Relies on each web app having its own context class loader.
|
||||||
|
LocalFilter localFilter = new LocalFilter(Thread.currentThread().getContextClassLoader()); // scanForPlugins uses context class loader
|
||||||
|
|
||||||
|
IIORegistry registry = IIORegistry.getDefaultInstance();
|
||||||
|
Iterator<Class<?>> categories = registry.getCategories();
|
||||||
|
|
||||||
|
while (categories.hasNext()) {
|
||||||
|
deregisterLocalProvidersForCategory(registry, localFilter, categories.next(), servletContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void deregisterLocalProvidersForCategory(IIORegistry registry, LocalFilter localFilter, Class<T> category, ServletContext context) {
|
||||||
|
Iterator<T> providers = registry.getServiceProviders(category, localFilter, false);
|
||||||
|
|
||||||
|
// Copy the providers, as de-registering while iterating over providers will lead to ConcurrentModificationExceptions.
|
||||||
|
List<T> providersCopy = new ArrayList<>();
|
||||||
|
while (providers.hasNext()) {
|
||||||
|
providersCopy.add(providers.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (T provider : providersCopy) {
|
||||||
|
registry.deregisterServiceProvider(provider, category);
|
||||||
|
context.log(String.format("Unregistered locally installed provider class: %s", provider.getClass()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class LocalFilter implements ServiceRegistry.Filter {
|
||||||
|
private final ClassLoader loader;
|
||||||
|
|
||||||
|
public LocalFilter(ClassLoader loader) {
|
||||||
|
this.loader = loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean filter(Object provider) {
|
||||||
|
return provider.getClass().getClassLoader() == loader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,8 +20,8 @@ import org.subethamail.wiser.WiserMessage;
|
|||||||
|
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import javax.ws.rs.core.Application;
|
import jakarta.ws.rs.core.Application;
|
||||||
import javax.ws.rs.core.UriBuilder;
|
import jakarta.ws.rs.core.UriBuilder;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@@ -90,7 +90,7 @@ public abstract class BaseJerseyTest extends JerseyTest {
|
|||||||
|
|
||||||
httpServer = HttpServer.createSimpleServer(getClass().getResource("/").getFile(), "localhost", getPort());
|
httpServer = HttpServer.createSimpleServer(getClass().getResource("/").getFile(), "localhost", getPort());
|
||||||
WebappContext context = new WebappContext("GrizzlyContext", "/docs");
|
WebappContext context = new WebappContext("GrizzlyContext", "/docs");
|
||||||
context.addListener("com.twelvemonkeys.servlet.image.IIOProviderContextListener");
|
context.addListener("com.sismics.util.listener.IIOProviderContextListener");
|
||||||
context.addFilter("requestContextFilter", RequestContextFilter.class)
|
context.addFilter("requestContextFilter", RequestContextFilter.class)
|
||||||
.addMappingForUrlPatterns(null, "/*");
|
.addMappingForUrlPatterns(null, "/*");
|
||||||
context.addFilter("tokenBasedSecurityFilter", TokenBasedSecurityFilter.class)
|
context.addFilter("tokenBasedSecurityFilter", TokenBasedSecurityFilter.class)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user