1
0
mirror of https://github.com/sismics/docs.git synced 2025-12-15 10:46:26 +00:00

20 Commits

Author SHA1 Message Date
bgamard
97d6e8f528 log4j -> logback 2023-06-29 21:40:02 +02:00
bgamard
95e0b870f6 Merge remote-tracking branch 'origin/master' 2023-06-29 21:33:12 +02:00
bgamard
2bdb2dc34f #678: reopen ldap connection for each login 2023-06-29 21:33:05 +02:00
Julien Kirch
22a44d0c8d Finding several documents by their title in a single query (#696) 2023-06-06 21:31:01 +02:00
Julien Kirch
a9cdbdc03e Add missing french translations (#694) 2023-06-05 16:02:55 +02:00
Julien Kirch
3fd5470eae Add mention in the API doc that document endpoint returns the document's metadata (#695) 2023-06-04 21:49:36 +02:00
Mario Voigt
39f96cbd28 Update config.properties (#693)
fix db version to reflect the most recent
2023-06-04 21:48:55 +02:00
Mario Voigt
4501f10429 fix comma to make valid language de.json file again 2023-05-07 11:56:34 +02:00
Mario Voigt
bd0cde7e87 Add support for STARTTLS for Inbox Scanning (#682) 2023-04-25 18:27:46 +02:00
bgamard
dd36e08d7d #680: warning when using H2 database 2023-04-22 00:47:01 +02:00
Jose Luis Montes Jiménez
4634def93e updating README.md (#681)
H2 database should only be use for testing, setting the docker-compose with postgreSQL as default way.
2023-04-22 00:12:48 +02:00
bgamard
1974a8bb8d #668: cleanup hibernate dependencies 2023-04-12 17:58:51 +02:00
bgamard
e9a6609593 #668: jetty 11 deployment 2023-04-12 13:35:54 +02:00
bgamard
b20577026e Closes #668: upgrade jetty/servlet-api/jersey 2023-04-09 21:31:53 +02:00
bgamard
dae9e137f7 Merge remote-tracking branch 'origin/master' 2023-03-22 10:23:18 +01:00
bgamard
1509d0c5bb revert h2 upgrade 2023-03-22 10:23:11 +01:00
Mario Voigt
430ebbd1c5 support ldaps (#670) 2023-03-21 21:56:14 +01:00
bgamard
b561eaee6d portuguese translation 2023-03-20 20:20:52 +01:00
bgamard
1aa21c3762 bump dependencies 2023-03-19 14:28:22 +01:00
bgamard
c8a67177d8 next dev iteration 2023-03-12 14:11:52 +01:00
164 changed files with 1745 additions and 890 deletions

View File

@@ -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"]

View File

@@ -3,6 +3,7 @@
</h3> </h3>
[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
[![Maven CI/CD](https://github.com/sismics/docs/actions/workflows/build-deploy.yml/badge.svg)](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

View File

@@ -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>

View File

@@ -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,

View File

@@ -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;

View File

@@ -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.*;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.*;
/** /**

View File

@@ -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.*;
/** /**

View File

@@ -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;

View File

@@ -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.*;
/** /**

View File

@@ -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;
/** /**

View File

@@ -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.*;

View File

@@ -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.*;

View File

@@ -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.*;

View File

@@ -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;

View File

@@ -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.*;
/** /**

View File

@@ -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.*;

View File

@@ -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;

View File

@@ -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.*;

View File

@@ -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;
} }
} }

View File

@@ -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.

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;
/** /**

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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",

View File

@@ -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.

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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.

View File

@@ -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.

View File

@@ -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);

View File

@@ -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>

View File

@@ -1 +1 @@
db.version=27 db.version=28

View File

@@ -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';

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View 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>

View File

@@ -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>

View File

@@ -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());
} }

View File

@@ -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.

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/** /**

View File

@@ -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.

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
}
}

View File

@@ -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