mirror of
https://github.com/sismics/docs.git
synced 2025-12-14 02:06:25 +00:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a927fd320 | ||
|
|
523501a592 | ||
|
|
ff8155be6a | ||
|
|
6c5d697051 | ||
|
|
b19145160e | ||
|
|
c7ada71ef5 | ||
|
|
4951229576 | ||
|
|
d98c1bddec | ||
|
|
b0d0e93364 | ||
|
|
f20a562439 | ||
|
|
4ae8475f5e | ||
|
|
fd4c627c61 | ||
|
|
a867d48232 | ||
|
|
f6bf61fce9 | ||
|
|
c60c9a8f74 | ||
|
|
dc021ab71e | ||
|
|
18b5551f6c | ||
|
|
6fcd8771a5 | ||
|
|
1fef4c3d2e |
33
.travis.yml
33
.travis.yml
@@ -1,33 +0,0 @@
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: java
|
||||
before_install:
|
||||
- sudo add-apt-repository -y ppa:mc3man/trusty-media
|
||||
- sudo apt-get -qq update
|
||||
- sudo apt-get -y -q install ffmpeg mediainfo tesseract-ocr tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-kor tesseract-ocr-rus tesseract-ocr-ukr tesseract-ocr-spa tesseract-ocr-ara tesseract-ocr-hin tesseract-ocr-deu tesseract-ocr-pol tesseract-ocr-jpn tesseract-ocr-por tesseract-ocr-tha tesseract-ocr-jpn tesseract-ocr-chi-sim tesseract-ocr-chi-tra tesseract-ocr-nld tesseract-ocr-tur tesseract-ocr-heb tesseract-ocr-hun tesseract-ocr-fin tesseract-ocr-swe tesseract-ocr-lav tesseract-ocr-dan tesseract-ocr-nor
|
||||
- sudo apt-get -y -q install haveged && sudo service haveged start
|
||||
after_success:
|
||||
- |
|
||||
if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
||||
mvn -Pprod -DskipTests clean install
|
||||
docker login -u $DOCKER_USER -p $DOCKER_PASS
|
||||
export REPO=sismics/docs
|
||||
export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi`
|
||||
docker build -f Dockerfile -t $REPO:$COMMIT .
|
||||
docker tag $REPO:$COMMIT $REPO:$TAG
|
||||
docker tag $REPO:$COMMIT $REPO:travis-$TRAVIS_BUILD_NUMBER
|
||||
docker push $REPO
|
||||
cd docs-importer
|
||||
export REPO=sismics/docs-importer
|
||||
export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi`
|
||||
docker build -f Dockerfile -t $REPO:$COMMIT .
|
||||
docker tag $REPO:$COMMIT $REPO:$TAG
|
||||
docker tag $REPO:$COMMIT $REPO:travis-$TRAVIS_BUILD_NUMBER
|
||||
docker push $REPO
|
||||
fi
|
||||
env:
|
||||
global:
|
||||
- secure: LRGpjWORb0qy6VuypZjTAfA8uRHlFUMTwb77cenS9PPRBxuSnctC531asS9Xg3DqC5nsRxBBprgfCKotn5S8nBSD1ceHh84NASyzLSBft3xSMbg7f/2i7MQ+pGVwLncusBU6E/drnMFwZBleo+9M8Tf96axY5zuUp90MUTpSgt0=
|
||||
- secure: bCDDR6+I7PmSkuTYZv1HF/z98ANX/SFEESUCqxVmV5Gs0zFC0vQXaPJQ2xaJNRop1HZBFMZLeMMPleb0iOs985smpvK2F6Rbop9Tu+Vyo0uKqv9tbZ7F8Nfgnv9suHKZlL84FNeUQZJX6vsFIYPEJ/r7K5P/M0PdUy++fEwxEhU=
|
||||
- secure: ewXnzbkgCIHpDWtaWGMa1OYZJ/ki99zcIl4jcDPIC0eB3njX/WgfcC6i0Ke9mLqDqwXarWJ6helm22sNh+xtQiz6isfBtBX+novfRt9AANrBe3koCMUemMDy7oh5VflBaFNP0DVb8LSCnwf6dx6ZB5E9EB8knvk40quc/cXpGjY=
|
||||
- COMMIT=${TRAVIS_COMMIT::8}
|
||||
35
Dockerfile
35
Dockerfile
@@ -1,7 +1,36 @@
|
||||
FROM sismics/ubuntu-jetty:9.4.12-2
|
||||
MAINTAINER b.gamard@sismics.com
|
||||
FROM sismics/ubuntu-jetty:9.4.36
|
||||
LABEL maintainer="b.gamard@sismics.com"
|
||||
|
||||
RUN apt-get update && apt-get -y -q install ffmpeg mediainfo tesseract-ocr tesseract-ocr-fra tesseract-ocr-ita tesseract-ocr-kor tesseract-ocr-rus tesseract-ocr-ukr tesseract-ocr-spa tesseract-ocr-ara tesseract-ocr-hin tesseract-ocr-deu tesseract-ocr-pol tesseract-ocr-jpn tesseract-ocr-por tesseract-ocr-tha tesseract-ocr-jpn tesseract-ocr-chi-sim tesseract-ocr-chi-tra tesseract-ocr-nld tesseract-ocr-tur tesseract-ocr-heb tesseract-ocr-hun tesseract-ocr-fin tesseract-ocr-swe tesseract-ocr-lav tesseract-ocr-dan tesseract-ocr-nor && \
|
||||
RUN apt-get update && \
|
||||
apt-get -y -q --no-install-recommends install \
|
||||
ffmpeg \
|
||||
mediainfo \
|
||||
tesseract-ocr \
|
||||
tesseract-ocr-ara \
|
||||
tesseract-ocr-chi-sim \
|
||||
tesseract-ocr-chi-tra \
|
||||
tesseract-ocr-dan \
|
||||
tesseract-ocr-deu \
|
||||
tesseract-ocr-fin \
|
||||
tesseract-ocr-fra \
|
||||
tesseract-ocr-heb \
|
||||
tesseract-ocr-hin \
|
||||
tesseract-ocr-hun \
|
||||
tesseract-ocr-ita \
|
||||
tesseract-ocr-jpn \
|
||||
tesseract-ocr-kor \
|
||||
tesseract-ocr-lav \
|
||||
tesseract-ocr-nld \
|
||||
tesseract-ocr-nor \
|
||||
tesseract-ocr-pol \
|
||||
tesseract-ocr-por \
|
||||
tesseract-ocr-rus \
|
||||
tesseract-ocr-spa \
|
||||
tesseract-ocr-swe \
|
||||
tesseract-ocr-tha \
|
||||
tesseract-ocr-tur \
|
||||
tesseract-ocr-ukr \
|
||||
tesseract-ocr-vie && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Remove the embedded javax.mail jar from Jetty
|
||||
|
||||
13
README.md
13
README.md
@@ -3,7 +3,6 @@
|
||||
</h3>
|
||||
|
||||
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
||||
[](http://travis-ci.org/sismics/docs)
|
||||
|
||||
Teedy is an open source, lightweight document management system for individuals and businesses.
|
||||
|
||||
@@ -63,7 +62,7 @@ A preconfigured Docker image is available, including OCR and media conversion to
|
||||
**The default admin password is "admin". Don't forget to change it before going to production.**
|
||||
|
||||
- Master branch, can be unstable. Not recommended for production use: `sismics/docs:latest`
|
||||
- Latest stable version: `sismics/docs:v1.8`
|
||||
- Latest stable version: `sismics/docs:v1.10`
|
||||
|
||||
The data directory is `/data`. Don't forget to mount a volume on it.
|
||||
|
||||
@@ -106,7 +105,7 @@ version: '3'
|
||||
services:
|
||||
# Teedy Application
|
||||
teedy-server:
|
||||
image: sismics/docs:v1.8
|
||||
image: sismics/docs:v1.10
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Map internal port to host
|
||||
@@ -129,7 +128,7 @@ version: '3'
|
||||
services:
|
||||
# Teedy Application
|
||||
teedy-server:
|
||||
image: sismics/docs:v1.8
|
||||
image: sismics/docs:v1.10
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Map internal port to host
|
||||
@@ -185,8 +184,8 @@ Manual installation
|
||||
|
||||
#### Requirements
|
||||
|
||||
- Java 8 with the [Java Cryptography Extension](http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html)
|
||||
- Tesseract 3 or 4 for OCR
|
||||
- Java 11
|
||||
- Tesseract 4 for OCR
|
||||
- ffmpeg for video thumbnails
|
||||
- mediainfo for video metadata extraction
|
||||
- A webapp server like [Jetty](http://eclipse.org/jetty/) or [Tomcat](http://tomcat.apache.org/)
|
||||
@@ -199,7 +198,7 @@ The latest release is downloadable here: <https://github.com/sismics/docs/releas
|
||||
How to build Teedy from the sources
|
||||
----------------------------------
|
||||
|
||||
Prerequisites: JDK 8 with JCE, Maven 3, NPM, Grunt, Tesseract 3 or 4
|
||||
Prerequisites: JDK 11, Maven 3, NPM, Grunt, Tesseract 4
|
||||
|
||||
Teedy is organized in several Maven modules:
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-parent</artifactId>
|
||||
<version>1.9</version>
|
||||
<version>1.10</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -95,7 +95,6 @@
|
||||
<dependency>
|
||||
<groupId>at.favre.lib</groupId>
|
||||
<artifactId>bcrypt</artifactId>
|
||||
<version>0.9.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
@@ -43,7 +43,7 @@ public class Constants {
|
||||
/**
|
||||
* Supported document languages.
|
||||
*/
|
||||
public static final List<String> SUPPORTED_LANGUAGES = Lists.newArrayList("eng", "fra", "ita", "deu", "spa", "por", "pol", "rus", "ukr", "ara", "hin", "chi_sim", "chi_tra", "jpn", "tha", "kor", "nld", "tur", "heb", "hun", "fin", "swe", "lav", "dan", "nor");
|
||||
public static final List<String> SUPPORTED_LANGUAGES = Lists.newArrayList("eng", "fra", "ita", "deu", "spa", "por", "pol", "rus", "ukr", "ara", "hin", "chi_sim", "chi_tra", "jpn", "tha", "kor", "nld", "tur", "heb", "hun", "fin", "swe", "lav", "dan", "nor", "vie");
|
||||
|
||||
/**
|
||||
* Base URL environment variable.
|
||||
|
||||
@@ -52,7 +52,7 @@ public class DocumentCriteria {
|
||||
private List<List<String>> tagIdList;
|
||||
|
||||
/**
|
||||
* Tag IDs to excluded.
|
||||
* Tag IDs to exclude.
|
||||
* The first and second level list will be excluded.
|
||||
*/
|
||||
private List<List<String>> excludedTagIdList;
|
||||
@@ -81,7 +81,12 @@ public class DocumentCriteria {
|
||||
* MIME type of a file.
|
||||
*/
|
||||
private String mimeType;
|
||||
|
||||
|
||||
/**
|
||||
* The title.
|
||||
*/
|
||||
private String title;
|
||||
|
||||
public List<String> getTargetIdList() {
|
||||
return targetIdList;
|
||||
}
|
||||
@@ -194,4 +199,12 @@ public class DocumentCriteria {
|
||||
public void setMimeType(String mimeType) {
|
||||
this.mimeType = mimeType;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class WebhookAsyncListener {
|
||||
}
|
||||
});
|
||||
|
||||
RequestBody body = RequestBody.create(JSON, "{\"event\": \"" + event.name() + "\", \"id\": \"" + id + "\"}");
|
||||
RequestBody body = RequestBody.create("{\"event\": \"" + event.name() + "\", \"id\": \"" + id + "\"}", JSON);
|
||||
|
||||
for (String webhookUrl : webhookUrlList) {
|
||||
Request request = new Request.Builder()
|
||||
|
||||
@@ -80,7 +80,7 @@ public class AppContext {
|
||||
List<Class<? extends IndexingHandler>> indexingHandlerList = Lists.newArrayList(
|
||||
new ClasspathScanner<IndexingHandler>().findClasses(IndexingHandler.class, "com.sismics.docs.core.util.indexing"));
|
||||
for (Class<? extends IndexingHandler> handlerClass : indexingHandlerList) {
|
||||
IndexingHandler handler = handlerClass.newInstance();
|
||||
IndexingHandler handler = handlerClass.getDeclaredConstructor().newInstance();
|
||||
if (handler.accept()) {
|
||||
indexingHandler = handler;
|
||||
break;
|
||||
|
||||
@@ -20,7 +20,7 @@ public class AuthenticationUtil {
|
||||
|
||||
.map(clazz -> {
|
||||
try {
|
||||
return clazz.newInstance();
|
||||
return clazz.getDeclaredConstructor().newInstance();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import com.sismics.docs.core.model.jpa.Config;
|
||||
import com.sismics.docs.core.model.jpa.User;
|
||||
import com.sismics.docs.core.util.ConfigUtil;
|
||||
import com.sismics.util.ClasspathScanner;
|
||||
import org.apache.commons.pool.impl.GenericObjectPool;
|
||||
import org.apache.directory.api.ldap.model.cursor.EntryCursor;
|
||||
import org.apache.directory.api.ldap.model.entry.Attribute;
|
||||
import org.apache.directory.api.ldap.model.entry.Entry;
|
||||
@@ -71,10 +70,7 @@ public class LdapAuthenticationHandler implements AuthenticationHandler {
|
||||
config.setCredentials(ConfigUtil.getConfigStringValue(ConfigType.LDAP_ADMIN_PASSWORD));
|
||||
|
||||
DefaultLdapConnectionFactory factory = new DefaultLdapConnectionFactory(config);
|
||||
GenericObjectPool.Config poolConfig = new GenericObjectPool.Config();
|
||||
poolConfig.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_GROW;
|
||||
poolConfig.maxWait = 500;
|
||||
pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), poolConfig);
|
||||
pool = new LdapConnectionPool(new ValidatingPoolableLdapConnectionFactory(factory), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -114,7 +110,7 @@ public class LdapAuthenticationHandler implements AuthenticationHandler {
|
||||
if (mailAttribute == null || mailAttribute.get() == null) {
|
||||
user.setEmail(ConfigUtil.getConfigStringValue(ConfigType.LDAP_DEFAULT_EMAIL));
|
||||
} else {
|
||||
Value<?> value = mailAttribute.get();
|
||||
Value value = mailAttribute.get();
|
||||
user.setEmail(value.getString());
|
||||
}
|
||||
user.setStorageQuota(ConfigUtil.getConfigLongValue(ConfigType.LDAP_DEFAULT_STORAGE));
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.sismics.docs.core.util.format;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.sismics.util.ClasspathScanner;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -26,12 +27,12 @@ public class FormatHandlerUtil {
|
||||
public static FormatHandler find(String mimeType) {
|
||||
try {
|
||||
for (Class<? extends FormatHandler> formatHandlerClass : FORMAT_HANDLERS) {
|
||||
FormatHandler formatHandler = formatHandlerClass.newInstance();
|
||||
FormatHandler formatHandler = formatHandlerClass.getDeclaredConstructor().newInstance();
|
||||
if (formatHandler.accept(mimeType)) {
|
||||
return formatHandler;
|
||||
}
|
||||
}
|
||||
} catch (InstantiationException | IllegalAccessException e) {
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
|
||||
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
|
||||
import org.apache.poi.sl.extractor.SlideShowExtractor;
|
||||
import org.apache.poi.xslf.usermodel.XMLSlideShow;
|
||||
import org.apache.poi.xslf.usermodel.XSLFSlide;
|
||||
|
||||
@@ -50,7 +50,7 @@ public class PptxFormatHandler implements FormatHandler {
|
||||
@Override
|
||||
public String extractContent(String language, Path file) throws Exception {
|
||||
XMLSlideShow pptx = loadPPtxFile(file);
|
||||
return new XSLFPowerPointExtractor(pptx).getText();
|
||||
return new SlideShowExtractor<>(pptx).getText();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -37,9 +37,9 @@ import org.apache.lucene.search.spell.LuceneDictionary;
|
||||
import org.apache.lucene.search.suggest.Lookup;
|
||||
import org.apache.lucene.search.suggest.analyzing.FuzzySuggester;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.NIOFSDirectory;
|
||||
import org.apache.lucene.store.NoLockFactory;
|
||||
import org.apache.lucene.store.RAMDirectory;
|
||||
import org.apache.lucene.store.SimpleFSDirectory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -116,7 +116,7 @@ public class LuceneIndexingHandler implements IndexingHandler {
|
||||
} else if (luceneStorage.equals("FILE")) {
|
||||
Path luceneDirectory = DirectoryUtil.getLuceneDirectory();
|
||||
log.info("Using file Lucene storage: {}", luceneDirectory);
|
||||
directory = new SimpleFSDirectory(luceneDirectory, NoLockFactory.INSTANCE);
|
||||
directory = new NIOFSDirectory(luceneDirectory, NoLockFactory.INSTANCE);
|
||||
}
|
||||
|
||||
// Create an index writer
|
||||
@@ -295,6 +295,10 @@ public class LuceneIndexingHandler implements IndexingHandler {
|
||||
criteriaList.add("d.DOC_UPDATEDATE_D <= :updateDateMax");
|
||||
parameterMap.put("updateDateMax", criteria.getUpdateDateMax());
|
||||
}
|
||||
if (criteria.getTitle() != null) {
|
||||
criteriaList.add("d.DOC_TITLE_C = :title");
|
||||
parameterMap.put("title", criteria.getTitle());
|
||||
}
|
||||
if (criteria.getTagIdList() != null && !criteria.getTagIdList().isEmpty()) {
|
||||
int index = 0;
|
||||
for (List<String> tagIdList : criteria.getTagIdList()) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.sismics.util;
|
||||
|
||||
import org.jsoup.helper.StringUtil;
|
||||
import org.jsoup.internal.StringUtil;
|
||||
import org.jsoup.nodes.Element;
|
||||
import org.jsoup.nodes.Node;
|
||||
import org.jsoup.nodes.TextNode;
|
||||
@@ -28,7 +28,7 @@ public class HtmlToPlainText {
|
||||
}
|
||||
|
||||
// the formatting rules, implemented in a breadth-first DOM traverse
|
||||
private class FormattingVisitor implements NodeVisitor {
|
||||
static private class FormattingVisitor implements NodeVisitor {
|
||||
private static final int maxWidth = 80;
|
||||
private int width = 0;
|
||||
private StringBuilder accum = new StringBuilder(); // holds the accumulated text
|
||||
@@ -64,7 +64,7 @@ public class HtmlToPlainText {
|
||||
return; // don't accumulate long runs of empty spaces
|
||||
|
||||
if (text.length() + width > maxWidth) { // won't fit, needs to wrap
|
||||
String words[] = text.split("\\s+");
|
||||
String[] words = text.split("\\s+");
|
||||
for (int i = 0; i < words.length; i++) {
|
||||
String word = words[i];
|
||||
boolean last = i == words.length - 1;
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.sismics.util.jpa;
|
||||
|
||||
import com.sismics.docs.core.util.DirectoryUtil;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.slf4j.Logger;
|
||||
@@ -34,7 +33,6 @@ public final class EMF {
|
||||
try {
|
||||
properties = getEntityManagerProperties();
|
||||
|
||||
Environment.verifyProperties(properties);
|
||||
ConfigurationHelper.resolvePlaceHolders(properties);
|
||||
ServiceRegistry reg = new StandardServiceRegistryBuilder().applySettings(properties).build();
|
||||
|
||||
|
||||
@@ -137,7 +137,6 @@ public class TestFileUtil {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
PdfUtil.convertToPdf(documentDto, Lists.newArrayList(file0, file1, file2, file3, file4, file5), true, true, 10, outputStream);
|
||||
Assert.assertTrue(outputStream.toByteArray().length > 0);
|
||||
com.google.common.io.Files.write(outputStream.toByteArray(), new java.io.File("C:\\Users\\Jendib\\Downloads\\test.pdf"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-parent</artifactId>
|
||||
<version>1.9</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>docs-stress</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Docs Stress</name>
|
||||
|
||||
<dependencies>
|
||||
<!-- Dependencies to Jersey -->
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.core</groupId>
|
||||
<artifactId>jersey-client</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-multipart</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Depenedencies to Docs -->
|
||||
<dependency>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-web-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-web-common</artifactId>
|
||||
<type>test-jar</type>
|
||||
</dependency>
|
||||
|
||||
<!-- Other external dependencies -->
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>jcl-over-slf4j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
</project>
|
||||
@@ -1,135 +0,0 @@
|
||||
package com.sismics.docs.stress;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.io.Resources;
|
||||
import com.sismics.docs.rest.util.ClientUtil;
|
||||
import com.sismics.util.filter.TokenBasedSecurityFilter;
|
||||
import org.glassfish.jersey.client.ClientResponse;
|
||||
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
|
||||
import org.glassfish.jersey.media.multipart.MultiPartFeature;
|
||||
import org.glassfish.jersey.media.multipart.file.StreamDataBodyPart;
|
||||
import org.junit.Assert;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.json.JsonObject;
|
||||
import javax.ws.rs.client.*;
|
||||
import javax.ws.rs.core.Form;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
/**
|
||||
* Stress app for Teedy.
|
||||
*
|
||||
* @author bgamard
|
||||
*/
|
||||
public class Main {
|
||||
/**
|
||||
* Logger.
|
||||
*/
|
||||
private static final Logger log = LoggerFactory.getLogger(Main.class);
|
||||
|
||||
private static final String API_URL = "http://localhost:9999/docs-web/api/";
|
||||
private static final int USER_COUNT = 50;
|
||||
private static final int DOCUMENT_PER_USER_COUNT = 2000;
|
||||
private static final int TAG_PER_USER_COUNT = 20;
|
||||
private static final int FILE_PER_DOCUMENT_COUNT = 10;
|
||||
|
||||
private static Client client = ClientBuilder.newClient();
|
||||
|
||||
private static Set<User> userSet = Sets.newHashSet();
|
||||
|
||||
/**
|
||||
* Entry point.
|
||||
*
|
||||
* @param args Args
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
log.info("Starting stress test...");
|
||||
|
||||
WebTarget resource = client.target(API_URL);
|
||||
ClientUtil clientUtil = new ClientUtil(resource);
|
||||
|
||||
// Create users
|
||||
for (int i = 0; i < USER_COUNT; i++) {
|
||||
String username = generateString();
|
||||
clientUtil.createUser(username);
|
||||
userSet.add(new User(username, (clientUtil.login(username))));
|
||||
log.info("Created user " + (i + 1) + "/" + USER_COUNT);
|
||||
}
|
||||
|
||||
// Create tags for each user
|
||||
int tagCreatedCount = 1;
|
||||
for (User user : userSet) {
|
||||
Invocation.Builder tagResource = resource.path("/tag").request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, user.authToken);
|
||||
|
||||
for (int j = 0; j < TAG_PER_USER_COUNT; j++) {
|
||||
Form form = new Form();
|
||||
String name = generateString();
|
||||
form.param("name", name);
|
||||
form.param("color", "#ff0000");
|
||||
JsonObject json = tagResource.put(Entity.form(form), JsonObject.class);
|
||||
user.tagList.add(json.getString("id"));
|
||||
log.info("Created tag " + (tagCreatedCount++) + "/" + TAG_PER_USER_COUNT * USER_COUNT);
|
||||
}
|
||||
}
|
||||
|
||||
// Create documents for each user
|
||||
int documentCreatedCount = 1;
|
||||
for (User user : userSet) {
|
||||
for (int i = 0; i < DOCUMENT_PER_USER_COUNT; i++) {
|
||||
long createDate = new Date().getTime();
|
||||
Form form = new Form()
|
||||
.param("title", generateString())
|
||||
.param("description", generateString())
|
||||
.param("tags", user.tagList.get(ThreadLocalRandom.current().nextInt(user.tagList.size()))) // Random tag
|
||||
.param("language", "eng")
|
||||
.param("create_date", Long.toString(createDate));
|
||||
JsonObject json = resource.path("/document").request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, user.authToken)
|
||||
.put(Entity.form(form), JsonObject.class);
|
||||
String documentId = json.getString("id");
|
||||
log.info("Created document " + (documentCreatedCount++) + "/" + DOCUMENT_PER_USER_COUNT * USER_COUNT + " for user: " + user.username);
|
||||
|
||||
// Add files for each document
|
||||
for (int j = 0; j < FILE_PER_DOCUMENT_COUNT; j++) {
|
||||
try (InputStream is = Resources.getResource("empty.png").openStream()) {
|
||||
StreamDataBodyPart streamDataBodyPart = new StreamDataBodyPart("file", is, "empty.png");
|
||||
@SuppressWarnings("resource")
|
||||
ClientResponse response = resource
|
||||
.register(MultiPartFeature.class)
|
||||
.path("/file").request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, user.authToken)
|
||||
.put(Entity.entity(new FormDataMultiPart().field("id", documentId).bodyPart(streamDataBodyPart),
|
||||
MediaType.MULTIPART_FORM_DATA_TYPE), ClientResponse.class);
|
||||
Assert.assertEquals(Status.OK, Status.fromStatusCode(response.getStatus()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String generateString() {
|
||||
return UUID.randomUUID().toString().replace("-", "");
|
||||
}
|
||||
|
||||
private static class User {
|
||||
String username;
|
||||
List<String> tagList = Lists.newArrayList();
|
||||
String authToken;
|
||||
|
||||
User(String username, String authToken) {
|
||||
this.username = username;
|
||||
this.authToken = authToken;
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 921 B |
@@ -1,6 +0,0 @@
|
||||
log4j.rootCategory=WARN, CONSOLE
|
||||
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.logger.com.sismics=DEBUG
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-parent</artifactId>
|
||||
<version>1.9</version>
|
||||
<version>1.10</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-parent</artifactId>
|
||||
<version>1.9</version>
|
||||
<version>1.10</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -209,54 +209,6 @@
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<!-- Stress profile -->
|
||||
<profile>
|
||||
<id>stress</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>env</name>
|
||||
<value>stress</value>
|
||||
</property>
|
||||
</activation>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/stress/resources</directory>
|
||||
<filtering>false</filtering>
|
||||
<excludes>
|
||||
<exclude>**/config.properties</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/stress/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/config.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>application.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
<webApp>
|
||||
<contextPath>/docs-web</contextPath>
|
||||
</webApp>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<!-- Production profile -->
|
||||
<profile>
|
||||
<id>prod</id>
|
||||
|
||||
@@ -8,8 +8,10 @@ import com.sismics.security.UserPrincipal;
|
||||
import com.sismics.util.filter.SecurityFilter;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.security.Principal;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -19,6 +21,7 @@ import java.util.Set;
|
||||
*
|
||||
* @author jtremeaux
|
||||
*/
|
||||
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
|
||||
public abstract class BaseResource {
|
||||
/**
|
||||
* @apiDefine admin Admin
|
||||
|
||||
@@ -598,6 +598,10 @@ public class DocumentResource extends BaseResource {
|
||||
// New fulltext search criteria
|
||||
fullQuery.add(params[1]);
|
||||
break;
|
||||
case "title":
|
||||
// New title criteria
|
||||
documentCriteria.setTitle(params[1]);
|
||||
break;
|
||||
default:
|
||||
fullQuery.add(criteria);
|
||||
break;
|
||||
|
||||
@@ -424,7 +424,7 @@ angular.module('docs',
|
||||
|
||||
// Configuring Angular Translate
|
||||
$translateProvider
|
||||
.useSanitizeValueStrategy(null)
|
||||
.useSanitizeValueStrategy('escapeParameters')
|
||||
.useStaticFilesLoader({
|
||||
prefix: 'locale/',
|
||||
suffix: '.json?@build.date@'
|
||||
@@ -462,6 +462,9 @@ angular.module('docs',
|
||||
// Configuring $http to act like jQuery.ajax
|
||||
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
|
||||
$httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
|
||||
$httpProvider.defaults.headers.delete = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
|
||||
};
|
||||
$httpProvider.defaults.transformRequest = [function(data) {
|
||||
var param = function(obj) {
|
||||
var query = '';
|
||||
@@ -541,7 +544,8 @@ angular.module('docs',
|
||||
{ key: 'swe', label: 'Svenska' },
|
||||
{ key: 'lav', label: 'Latviešu' },
|
||||
{ key: 'dan', label: 'Dansk' },
|
||||
{ key: 'nor', label: 'Norsk' }
|
||||
{ key: 'nor', label: 'Norsk' },
|
||||
{ key: 'vie', label: 'Tiếng Việt' }
|
||||
];
|
||||
})
|
||||
/**
|
||||
|
||||
@@ -56,7 +56,7 @@ angular.module('share',
|
||||
|
||||
// Configuring Angular Translate
|
||||
$translateProvider
|
||||
.useSanitizeValueStrategy(null)
|
||||
.useSanitizeValueStrategy('escapeParameters')
|
||||
.useStaticFilesLoader({
|
||||
prefix: 'locale/',
|
||||
suffix: '.json?@build.date@'
|
||||
@@ -88,6 +88,9 @@ angular.module('share',
|
||||
// Configuring $http to act like jQuery.ajax
|
||||
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
|
||||
$httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
|
||||
$httpProvider.defaults.headers.delete = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
|
||||
};
|
||||
$httpProvider.defaults.transformRequest = [function(data) {
|
||||
var param = function(obj) {
|
||||
var query = '';
|
||||
|
||||
@@ -32,24 +32,24 @@
|
||||
"nav_documents": "Dokumente",
|
||||
"nav_tags": "Tags",
|
||||
"nav_users_groups": "Benutzer & Gruppen",
|
||||
"error_info": "{{ count }} neuer Fehler{{ count > 1 ? 's' : '' }}",
|
||||
"error_info": "{{ count }} {{ count > 1 ? 'neue' : 'neuer' }} Fehler",
|
||||
"logged_as": "Eingeloggt als {{ username }}",
|
||||
"nav_settings": "Einstellungen",
|
||||
"logout": "Logout",
|
||||
"global_quota_warning": "<strong>Warnung!</strong> Der frei zur Verfügung stehende, maximale Speicherplatz ist fast erreicht bei {{ current | number: 0 }}MB ({{ percent | number: 1 }}%) verwendet {{ total | number: 0 }}MB"
|
||||
"global_quota_warning": "<strong>Warnung!</strong> Der verfügbare Speicherplatz beträgt {{ total | number: 0 }}\u00A0MB, davon sind {{ current | number: 0 }}\u00A0MB ({{ percent | number: 1 }}\u00A0%) bereits verwendet"
|
||||
},
|
||||
"document": {
|
||||
"navigation_up": "Eine Stufe höher",
|
||||
"navigation_up": "Eine Ebene höher",
|
||||
"toggle_navigation": "Navigation ein-/ausblenden",
|
||||
"display_mode_list": "Dokumente in Liste anzeigen",
|
||||
"display_mode_grid": "Dokumente im Raster anzeigen",
|
||||
"search_simple": "Einfache Suche",
|
||||
"search_fulltext": "Volltext Suche",
|
||||
"search_fulltext": "Volltextsuche",
|
||||
"search_creator": "Urheber",
|
||||
"search_language": "Sprache",
|
||||
"search_before_date": "Vor diesem Datum",
|
||||
"search_after_date": "Nach diesem Datum",
|
||||
"search_before_update_date": "Bearbeitet bevor diesem Datum",
|
||||
"search_before_update_date": "Bearbeitet vor diesem Datum",
|
||||
"search_after_update_date": "Bearbeitet nach diesem Datum",
|
||||
"search_tags": "Tags",
|
||||
"search_shared": "Nur freigegebene Dokumente",
|
||||
@@ -83,9 +83,9 @@
|
||||
"page_size_10": "10 pro Seite",
|
||||
"page_size_20": "20 pro Seite",
|
||||
"page_size_30": "30 pro Seite",
|
||||
"upgrade_quota": "Fragen Sie Ihren Administrator, um Ihr Speicherplatz zu erweitern.",
|
||||
"quota": "{{ current | number: 0 }}MB ({{ percent | number: 1 }}%) verwendet von {{ total | number: 0 }}MB",
|
||||
"count": "{{ count }} Dokument{{ count > 1 ? 'e' : '' }} gefunden",
|
||||
"upgrade_quota": "Fragen Sie Ihren Administrator, um Ihren Speicherplatz zu erweitern.",
|
||||
"quota": "{{ current | number: 0 }}\u00A0MB ({{ percent | number: 1 }}\u00A0%) verwendet von {{ total | number: 0 }}\u00A0MB",
|
||||
"count": "{{ count }} {{ count > 1 ? 'Dokumente' : 'Dokument' }} gefunden",
|
||||
"last_updated": "Zuletzt bearbeitet {{ date | timeAgo: dateFormat }}",
|
||||
"view": {
|
||||
"delete_comment_title": "Kommentar löschen",
|
||||
@@ -104,7 +104,7 @@
|
||||
"add_comment": "Fügen sie einen Kommentar hinzu",
|
||||
"error_loading_comments": "Fehler beim Laden eines Kommentars",
|
||||
"workflow_current": "Aktueller Workflow-Status",
|
||||
"workflow_comment": "Fügen Sie einen Workflow Kommentar hinzu",
|
||||
"workflow_comment": "Fügen Sie einen Workflow-Kommentar hinzu",
|
||||
"workflow_validated_title": "Workflow-Schritt validiert",
|
||||
"workflow_validated_message": "Der Workflow-Schritt wurde erfolgreich validiert.",
|
||||
"display_mode_list": "Dateien in Liste anzeigen",
|
||||
@@ -113,13 +113,13 @@
|
||||
"content": "Inhalt",
|
||||
"delete_file_title": "Datei löschen",
|
||||
"delete_file_message": "Wollen Sie diese Datei wirklich löschen?",
|
||||
"upload_pending": "Ausstehend...",
|
||||
"upload_progress": "Hochladen...",
|
||||
"upload_pending": "Ausstehend\u2026",
|
||||
"upload_progress": "Hochladen\u2026",
|
||||
"upload_error": "Fehler beim Hochladen",
|
||||
"upload_error_quota": "Maximaler Speicherplatz erreicht",
|
||||
"drop_zone": "Drag & Drop Dateien hierherziehen, um diese hochzuladen",
|
||||
"drop_zone": "Legen Sie Dateien hier ab, um sie hochzuladen",
|
||||
"add_files": "Dateien hinzufügen",
|
||||
"file_processing_indicator": "Diese Datei wird gerade bearbeitet. Die Suche wird nicht verfügbar sein, bevor der Vorgang abgeschlossen ist.",
|
||||
"file_processing_indicator": "Diese Datei wird gerade verarbeitet. Die Suche ist erst verfügbar, wenn diese Verarbeitung abgeschlossen ist.",
|
||||
"reprocess_file": "Diese Datei erneut verarbeiten",
|
||||
"upload_new_version": "Neue Version hochladen",
|
||||
"open_versions": "Versionshistorie anzeigen"
|
||||
@@ -158,27 +158,27 @@
|
||||
"title_placeholder": "Titel des Dokuments",
|
||||
"description_placeholder": "Zusammenfassung, Inhaltsverzeichnis oder Freitext",
|
||||
"new_files": "neue Dateien",
|
||||
"orphan_files": "+ {{ count }} Datei{{ count > 1 ? 's' : '' }}",
|
||||
"orphan_files": "+ {{ count }} {{ count > 1 ? 'Dateien' : 'Datei' }}",
|
||||
"additional_metadata": "Weitere Metadaten",
|
||||
"subject_placeholder": "Schlüsselwörter, abstrakte Sätze oder Klassifizierungscodes",
|
||||
"identifier_placeholder": "Eindeutiger Identifikator",
|
||||
"publisher_placeholder": "Name der Person, Organisation oder Abteilung, von der aus das Dokument veröffentlicht wurde.",
|
||||
"format_placeholder": "MIME-Typ oder physisches Format des Dokuments",
|
||||
"source_placeholder": "Ressource, aus der das Dokument stammt",
|
||||
"uploading_files": "Dateien hochladen..."
|
||||
"uploading_files": "Dateien hochladen\u2026"
|
||||
},
|
||||
"default": {
|
||||
"upload_pending": "Ausstehend...",
|
||||
"upload_progress": "Lädt hoch...",
|
||||
"upload_pending": "Ausstehend\u2026",
|
||||
"upload_progress": "Lädt hoch\u2026",
|
||||
"upload_error": "Fehler beim Hochladen",
|
||||
"upload_error_quota": "Maximaler Speicherplatz erreicht",
|
||||
"quick_upload": "Schnelles Hochladen",
|
||||
"drop_zone": "Drag & Drop Dateien hierherziehen, um diese hochzuladen",
|
||||
"drop_zone": "Legen Sie Dateien hier ab, um sie hochzuladen",
|
||||
"add_files": "Dateien hinzufügen",
|
||||
"add_new_document": "Neues Dokument hinzufügen",
|
||||
"latest_activity": "Letzte Aktivitäten",
|
||||
"footer_sismics": "Programmiert mit <span class=\"fas fa-heart\"></span> von <a href=\"https://www.sismics.com\" target=\"_blank\">Sismics</a>",
|
||||
"api_documentation": "API Dokumentation",
|
||||
"api_documentation": "API-Dokumentation",
|
||||
"feedback": "Geben Sie uns Ihr Feedback",
|
||||
"workflow_document_list": "Mir zugeordnete Dokumente",
|
||||
"select_all": "Alle auswählen",
|
||||
@@ -186,8 +186,8 @@
|
||||
},
|
||||
"pdf": {
|
||||
"export_title": "Export als PDF",
|
||||
"export_metadata": "Export Metadaten",
|
||||
"export_comments": "Export Kommentare",
|
||||
"export_metadata": "Metadaten exportieren",
|
||||
"export_comments": "Kommentare exportieren",
|
||||
"fit_to_page": "Bild an Seite anpassen",
|
||||
"margin": "Rand",
|
||||
"millimeter": "mm"
|
||||
@@ -200,17 +200,17 @@
|
||||
},
|
||||
"file": {
|
||||
"view": {
|
||||
"previous": "Vorheriges",
|
||||
"next": "Nächstes",
|
||||
"previous": "Vorherige",
|
||||
"next": "Nächste",
|
||||
"not_found": "Datei nicht gefunden"
|
||||
},
|
||||
"edit": {
|
||||
"title": "Datei bearbeiten",
|
||||
"name": "Dateinamen"
|
||||
"name": "Dateiname"
|
||||
},
|
||||
"versions": {
|
||||
"title": "Versionshistorie",
|
||||
"filename": "Datiename",
|
||||
"filename": "Dateiname",
|
||||
"mimetype": "Typ",
|
||||
"create_date": "Erstellungsdatum",
|
||||
"version": "Version"
|
||||
@@ -223,17 +223,17 @@
|
||||
"title": "Tags",
|
||||
"message_1": "<strong>Tags</strong> sind Kategorien, die den Dokumenten zugeordnet sind.",
|
||||
"message_2": "Ein Dokument kann mit mehreren Tags versehen werden und ein Tag kann auf mehrere Dokumente angewendet werden.",
|
||||
"message_3": "Unter Verwendung der <span class=\"glyphicon glyphicon-pencil\"></span> Schaltfläche können Sie die Berechtigungen für ein Tag bearbeiten.",
|
||||
"message_3": "Mit der <span class=\"glyphicon glyphicon-pencil\"></span>-Schaltfläche können Sie die Berechtigungen für ein Tag bearbeiten.",
|
||||
"message_4": "Wenn ein Tag von einem anderen Benutzer oder einer anderen Gruppe gelesen werden kann, können die zugehörigen Dokumente auch von diesen Personen gelesen werden.",
|
||||
"message_5": "Kennzeichnen Sie z.B. Ihre Firmendokumente mit einem Tag <span class=\"label label-info\">MyCompany</span> und fügen Sie die Berechtigung <strong>Can read</strong> zu einer Gruppe hinzu <span class=\"btn btn-default\">employees</span>"
|
||||
"message_5": "Kennzeichnen Sie z.\u00A0B. Ihre Firmendokumente mit einem Tag <span class=\"label label-info\">MyCompany</span> und fügen Sie die Berechtigung <strong>Kann lesen</strong> zu einer Gruppe <span class=\"btn btn-default\">Mitarbeiter</span> hinzu"
|
||||
},
|
||||
"edit": {
|
||||
"delete_tag_title": "Tag löschen",
|
||||
"delete_tag_message": "Wollen Sie diesen Tag wirklich löschen?",
|
||||
"delete_tag_message": "Wollen Sie dieses Tag wirklich löschen?",
|
||||
"name": "Name",
|
||||
"color": "Farbe",
|
||||
"parent": "Übergeordnet",
|
||||
"info": "Berechtigungen für dieses Tag werden auch auf Dokumente angewendet, die mit einem Tag versehen sind <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>",
|
||||
"info": "Berechtigungen für dieses Tag werden auch auf Dokumente angewendet, die mit einem Tag <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span> versehen sind",
|
||||
"circular_reference_title": "Zirkuläre Referenz",
|
||||
"circular_reference_message": "Die Hierarchie der übergeordneten Tags bildet eine Schleife. Bitte wählen Sie ein anderes übergeordnetes Tag."
|
||||
}
|
||||
@@ -250,7 +250,7 @@
|
||||
"profile": {
|
||||
"groups": "Gruppen",
|
||||
"quota_used": "Benutzter Speicherplatz",
|
||||
"percent_used": "{{ percent | number: 0 }}% genutzt",
|
||||
"percent_used": "{{ percent | number: 0 }}\u00A0% genutzt",
|
||||
"related_links": "Weiterführende Links",
|
||||
"document_created": "Dokumente erstellt von {{ username }}",
|
||||
"edit_user": "Benutzer {{ username }} bearbeiten"
|
||||
@@ -258,8 +258,8 @@
|
||||
},
|
||||
"usergroup": {
|
||||
"search_groups": "In Gruppen suchen",
|
||||
"search_users": "In Benutzer suchen",
|
||||
"you": "Eigenes Benutzerkonto!",
|
||||
"search_users": "In Benutzern suchen",
|
||||
"you": "Das sind Sie!",
|
||||
"default": {
|
||||
"title": "Benutzer und Gruppen",
|
||||
"message": "Hier können Sie Informationen über Benutzer und Gruppen einsehen."
|
||||
@@ -270,15 +270,15 @@
|
||||
"menu_user_account": "Benutzerkonto",
|
||||
"menu_two_factor_auth": "Zwei-Faktor-Authentifizierung",
|
||||
"menu_opened_sessions": "Geöffnete Sitzungen",
|
||||
"menu_file_importer": "Massen Datei Importer",
|
||||
"menu_general_settings": "Generelle Einstellungen",
|
||||
"menu_file_importer": "Massen-Datei-Importer",
|
||||
"menu_general_settings": "Allgemeine Einstellungen",
|
||||
"menu_workflow": "Workflows",
|
||||
"menu_users": "Benutzerverwaltung",
|
||||
"menu_groups": "Gruppenverwaltung",
|
||||
"menu_vocabularies": "Vokabulareinträge",
|
||||
"menu_configuration": "Einstellungen",
|
||||
"menu_inbox": "Posteingang durchsuchen",
|
||||
"menu_metadata": "Benutzerdefinierte Metadaten",
|
||||
"menu_metadata": "Benutzerdefinierte Metadaten",
|
||||
"menu_monitoring": "Überwachung",
|
||||
"user": {
|
||||
"title": "Benutzerverwaltung",
|
||||
@@ -290,13 +290,13 @@
|
||||
"delete_user_title": "Benutzer löschen",
|
||||
"delete_user_message": "Möchten Sie diesen Benutzer wirklich löschen? Alle zugehörigen Dokumente, Dateien und Tags werden gelöscht",
|
||||
"user_used_title": "Benutzer in Verwendung",
|
||||
"user_used_message": "Dieser Benutzer wird im Workflow \"{{ name }}\" benutzt",
|
||||
"user_used_message": "Dieser Benutzer wird im Workflow \"{{ name }}\" benutzt",
|
||||
"edit_user_failed_title": "Dieser Benutzer existiert bereits",
|
||||
"edit_user_failed_message": "Dieser Benutzername wurde bereits von einem anderen Benutzer gewählt",
|
||||
"edit_user_title": "Bearbeiten \"{{ username }}\"",
|
||||
"edit_user_title": "Benutzer \"{{ username }}\" bearbeiten",
|
||||
"add_user_title": "Neuen Benutzer hinzufügen",
|
||||
"username": "Benutzername",
|
||||
"email": "E-mail",
|
||||
"email": "E-Mail",
|
||||
"groups": "Gruppen",
|
||||
"storage_quota": "Speicherkontingent",
|
||||
"storage_quota_placeholder": "Speicherkontingent (in MB)",
|
||||
@@ -304,8 +304,8 @@
|
||||
"password_confirm": "Passwort (bestätigen)",
|
||||
"disabled": "Deaktivierter Benutzer",
|
||||
"password_reset_btn": "Senden Sie eine E-Mail zum Zurücksetzen des Kennworts an diesen Benutzer",
|
||||
"password_lost_sent_title": "Passwort zurücksetzen Email gesendet",
|
||||
"password_lost_sent_message": "Passwort zurücksetzen Email an <strong>{{ username }}</strong> gesendet.",
|
||||
"password_lost_sent_title": "Passwort-zurücksetzen-E-Mail gesendet",
|
||||
"password_lost_sent_message": "Passwort-zurücksetzen-E-Mail an <strong>{{ username }}</strong> gesendet.",
|
||||
"disable_totp_btn": "Zwei-Faktor-Authentifizierung für diesen Benutzer deaktivieren",
|
||||
"disable_totp_title": "Zwei-Faktor-Authentifizierung deaktivieren",
|
||||
"disable_totp_message": "Sind Sie sicher, dass sie die Zwei-Faktor-Authentifizierung für den Benutzer deaktivieren möchten?"
|
||||
@@ -319,7 +319,7 @@
|
||||
"edit": {
|
||||
"delete_workflow_title": "Workflow löschen",
|
||||
"delete_workflow_message": "Möchten Sie diesen Workflow wirklich löschen? Derzeit ausgeführte Workflows werden nicht gelöscht",
|
||||
"edit_workflow_title": "Bearbeiten \"{{ name }}\"",
|
||||
"edit_workflow_title": "Workflow \"{{ name }}\" bearbeiten",
|
||||
"add_workflow_title": "Neuen Workflow hinzufügen",
|
||||
"name": "Name",
|
||||
"name_placeholder": "Name des Bearbeitungschritts oder der Beschreibung",
|
||||
@@ -328,8 +328,8 @@
|
||||
"type_approve": "Genehmigen",
|
||||
"type_validate": "Bestätigen",
|
||||
"target": "Zugewiesen an",
|
||||
"target_help": "<strong>Zulassen:</strong> Überprüfen und fortsetzen des Workflows <br/><strong>Genehmigen:</strong> Übernehmen oder lehnen Sie die Überprüfung ab",
|
||||
"add_step": "Workflow Schritt hinzufügen",
|
||||
"target_help": "<strong>Zulassen:</strong> Überprüfen und fortsetzen des Workflows<br/><strong>Genehmigen:</strong> Übernehmen oder lehnen Sie die Überprüfung ab",
|
||||
"add_step": "Workflow-Schritt hinzufügen",
|
||||
"actions": "Was passiert danach?",
|
||||
"remove_action": "Aktion entfernen",
|
||||
"acl_info": "Nur hier definierte Benutzer und Gruppen können diesen Workflow für ein Dokument starten"
|
||||
@@ -339,18 +339,18 @@
|
||||
"enable_totp": "Zwei-Faktor-Authentifizierung aktivieren",
|
||||
"enable_totp_message": "Stellen Sie sicher, dass Sie eine TOTP-kompatible Anwendung auf Ihrem Telefon haben, die bereit ist, ein neues Konto hinzuzufügen.",
|
||||
"title": "Zwei-Faktor-Authentifizierung",
|
||||
"message_1": "Die Zwei-Faktor-Authentifizierung ermöglicht Ihnen eine weitere Absicherung Ihres {{ appName }} Benutzerkontos. Bevor Sie diese Funktion aktivieren, stellen Sie sicher, dass Sie eine TOTP-kompatible Anwendung auf Ihrem Telefon haben:",
|
||||
"message_1": "Die Zwei-Faktor-Authentifizierung ermöglicht Ihnen eine weitere Absicherung Ihres {{ appName }}-Benutzerkontos. Bevor Sie diese Funktion aktivieren, stellen Sie sicher, dass Sie eine TOTP-kompatible Anwendung auf Ihrem Telefon haben:",
|
||||
"message_google_authenticator": "Für Android, iOS, und Blackberry: <a href=\"https://support.google.com/accounts/answer/1066447\" target=\"_blank\">Google Authenticator</a>",
|
||||
"message_duo_mobile": "Für Android und iOS: <a href=\"https://guide.duo.com/third-party-accounts\" target=\"_blank\">Duo Mobile</a>",
|
||||
"message_authenticator": "Für Windows Phone: <a href=\"https://www.microsoft.com/en-US/store/apps/Authenticator/9WZDNCRFJ3RJ\" target=\"_blank\">Authenticator</a>",
|
||||
"message_2": "Diese Anwendungen generieren automatisch einen Validierungscode, der sich nach einer gewissen Zeitspanne ändert. Sie müssen diesen Validierungscode jedes Mal eingeben, wenn Sie sich bei {{ appName }} anmelden. </strong>.",
|
||||
"message_2": "Diese Anwendungen generieren automatisch einen Validierungscode, der sich nach einer gewissen Zeitspanne ändert. Sie müssen diesen Validierungscode jedes Mal eingeben, wenn Sie sich bei {{ appName }} anmelden</strong>.",
|
||||
"secret_key": "Ihr geheimer Schlüssel lautet: <strong>{{ secret }}</strong>",
|
||||
"secret_key_warning": "Konfigurieren Sie Ihre TOTP-App jetzt mit diesem geheimen Schlüssel auf Ihrem Telefon. Sie können später nicht mehr darauf zugreifen.",
|
||||
"totp_enabled_message": "Die Zwei-Faktor-Authentifizierung ist in Ihrem Konto aktiviert.<br/>Bei jeder Anmeldung auf <strong>{{ appName }}</strong>, werden Sie in Ihrer konfigurierten Telefon-App nach einem Bestätigungscode gefragt.<br/>Wenn Sie Ihr Telefon verlieren, können Sie sich nicht in Ihrem Konto anmelden, aber aktive Sitzungen ermöglichen es Ihnen, einen geheimen Schlüssel neu zu generieren.",
|
||||
"secret_key_warning": "Konfigurieren Sie Ihre TOTP-App jetzt mit diesem geheimen Schlüssel auf Ihrem Telefon. Sie können später nicht mehr auf diesen Schlüssel zugreifen.",
|
||||
"totp_enabled_message": "Die Zwei-Faktor-Authentifizierung ist in Ihrem Konto aktiviert.<br/>Bei jeder Anmeldung auf <strong>{{ appName }}</strong> werden Sie in Ihrer konfigurierten Telefon-App nach einem Bestätigungscode gefragt.<br/>Wenn Sie Ihr Telefon verlieren, können Sie sich nicht in Ihrem Konto anmelden, aber aktive Sitzungen ermöglichen es Ihnen, einen geheimen Schlüssel neu zu generieren.",
|
||||
"disable_totp": {
|
||||
"disable_totp": "Deaktivieren der Zwei-Faktor-Authentifizierung",
|
||||
"message": "Ihr Konto wird nicht mehr durch die Zwei-Faktor-Authentifizierung geschützt.",
|
||||
"confirm_password": "Bestätigen Sie ihr Passwort",
|
||||
"confirm_password": "Bestätigen Sie Ihr Passwort",
|
||||
"submit": "Deaktivieren der Zwei-Faktor-Authentifizierung"
|
||||
},
|
||||
"test_totp": "Bitte geben Sie den auf Ihrem Telefon angezeigten Validierungscode ein:",
|
||||
@@ -365,13 +365,13 @@
|
||||
"delete_group_title": "Gruppe löschen",
|
||||
"delete_group_message": "Wollen Sie diese Gruppe wirklich löschen?",
|
||||
"edit_group_failed_title": "Gruppe existiert bereits",
|
||||
"edit_group_failed_message": "Dieser Gruppenname wird bereits von einer anderen Gruppe übernommen",
|
||||
"edit_group_failed_message": "Dieser Gruppenname wird bereits von einer anderen Gruppe verwendet",
|
||||
"group_used_title": "Gruppe in Verwendung",
|
||||
"group_used_message": "Diese Gruppe wird im Workflow \"{{ name }}\" verwendet",
|
||||
"edit_group_title": "Bearbeiten \"{{ name }}\"",
|
||||
"group_used_message": "Diese Gruppe wird im Workflow \"{{ name }}\" verwendet",
|
||||
"edit_group_title": "Gruppe \"{{ name }}\" bearbeiten",
|
||||
"add_group_title": "Neue Gruppe hinzufügen",
|
||||
"name": "Name",
|
||||
"parent_group": "Übergruppe",
|
||||
"parent_group": "Übergeordnete Gruppe",
|
||||
"search_group": "Gruppe suchen",
|
||||
"members": "Mitglieder",
|
||||
"new_member": "Neue Mitglieder",
|
||||
@@ -386,7 +386,7 @@
|
||||
},
|
||||
"config": {
|
||||
"title_guest_access": "Gastzugang",
|
||||
"message_guest_access": "Der Gastzugang ist ein Modus, in dem jeder auf {{appName}} ohne Kennwort zugreifen kann. <br/> Wie ein normaler Benutzer kann der Gastbenutzer nur auf seine Dokumente und diejenigen zugreifen, auf die er über Berechtigungen zugreifen kann.<br/>",
|
||||
"message_guest_access": "Der Gastzugang ist ein Modus, in dem jeder auf {{appName}} ohne Kennwort zugreifen kann.<br/>Wie ein normaler Benutzer kann der Gastbenutzer nur auf seine Dokumente und diejenigen zugreifen, auf die er über Berechtigungen zugreifen kann.<br/>",
|
||||
"enable_guest_access": "Gastzugang aktivieren",
|
||||
"disable_guest_access": "Gastzugang deaktivieren",
|
||||
"title_theme": "Aussehen anpassen",
|
||||
@@ -399,13 +399,13 @@
|
||||
"logo": "Logo (quadratische Größe)",
|
||||
"background_image": "Hintergrundbild",
|
||||
"uploading_image": "Bild hochladen...",
|
||||
"title_smtp": "SMTP Email Einstellungen <small>für das Zürucksetzen des Passworts</small>",
|
||||
"smtp_hostname": "SMTP Server",
|
||||
"smtp_port": "SMTP Port",
|
||||
"smtp_from": "Absender E-Mail",
|
||||
"smtp_username": "SMTP Benutzername",
|
||||
"smtp_password": "SMTP Passwort",
|
||||
"smtp_updated": "SMTP Konfiguration erfolgreich aktualisiert",
|
||||
"title_smtp": "SMTP-E-Mail-Einstellungen <small>für das Zurücksetzen des Passworts</small>",
|
||||
"smtp_hostname": "SMTP-Server",
|
||||
"smtp_port": "SMTP-Port",
|
||||
"smtp_from": "Absender-E-Mail",
|
||||
"smtp_username": "SMTP-Benutzername",
|
||||
"smtp_password": "SMTP-Passwort",
|
||||
"smtp_updated": "SMTP-Konfiguration erfolgreich aktualisiert",
|
||||
"webhooks": "Webhooks",
|
||||
"webhooks_explain": "Webhooks werden aufgerufen, wenn das angegebene Ereignis eintritt. Die angegebene URL wird mit einer JSON-Payload gepostet, die den Ereignisnamen und die ID der betreffenden Ressource enthält.",
|
||||
"webhook_event": "Ereignisse",
|
||||
@@ -416,35 +416,35 @@
|
||||
"metadata": {
|
||||
"title": "Konfiguration benutzerdefinierter Metadaten",
|
||||
"message": "Hier können Sie Ihren Dokumenten benutzerdefinierte Metadaten wie eine interne Kennung oder ein Ablaufdatum hinzufügen. Bitte beachten Sie, dass der Metadatentyp nach der Erstellung nicht mehr geändert werden kann.",
|
||||
"name": "Metadatensatz Name",
|
||||
"type": "Metadatensatz Typ"
|
||||
},
|
||||
"name": "Metadatensatz-Name",
|
||||
"type": "Metadatensatz-Typ"
|
||||
},
|
||||
"inbox": {
|
||||
"title": "Posteingang durchsuchen",
|
||||
"message": "Wenn Sie diese Funktion aktivieren, durchsucht das System den angegebenen Posteingang jede Minute nach <strong>ungelesenen</strong> E-Mails und importiert diese automatisch.<br/>Nach dem Import einer E-Mail wird diese als gelesen markiert.<br/>Folgen Sie den Links zu Konfigurationseinstellungen für <a href=\"https://support.google.com/mail/answer/7126229?hl=en\" target=\"_blank\">Gmail</a>, <a href=\"https://support.office.com/en-us/article/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040\" target=\"_blank\">Outlook.com</a>, <a href=\"https://help.yahoo.com/kb/SLN4075.html\" target=\"_blank\">Yahoo</a>.",
|
||||
"enabled": "Durchsuchen des Posteingangs aktivieren",
|
||||
"hostname": "IMAP Server",
|
||||
"port": "IMAP Port (143 oder 993)",
|
||||
"username": "IMAP Benutzername",
|
||||
"password": "IMAP Passwort",
|
||||
"folder": "IMAP Ordner",
|
||||
"tag": "Folgenden Tag zu importierten Dokumenten hinzufügen",
|
||||
"hostname": "IMAP-Server",
|
||||
"port": "IMAP-Port (143 oder 993)",
|
||||
"username": "IMAP-Benutzername",
|
||||
"password": "IMAP-Passwort",
|
||||
"folder": "IMAP-Ordner",
|
||||
"tag": "Folgendes Tag zu importierten Dokumenten hinzufügen",
|
||||
"test": "Konfiguration testen",
|
||||
"last_sync": "Letzte Synchronisation: {{ data.date | date: 'medium' }}, {{ data.count }} E-Mail(s){{ data.count > 1 ? 's' : '' }} importiert",
|
||||
"test_success": "Die Verbindung zum Posteingang war erfolgreich ({{ count }} <strong>unread</strong> message{{ count > 1 ? 's' : '' }})",
|
||||
"last_sync": "Letzte Synchronisation: {{ data.date | date: 'medium' }}, {{ data.count }} {{ data.count > 1 ? 'E-Mails' : 'E-Mail' }} importiert",
|
||||
"test_success": "Die Verbindung zum Posteingang war erfolgreich ({{ count }} <strong>ungelesene</strong> {{ count > 1 ? 'Nachrichten' : 'Nachricht' }})",
|
||||
"test_fail": "Beim Verbinden mit dem Posteingang ist ein Fehler aufgetreten, bitte überprüfen Sie die Einstellungen",
|
||||
"saved": "IMAP Konfiguration erfolgreich gespeichert"
|
||||
"saved": "IMAP-Konfiguration erfolgreich gespeichert"
|
||||
},
|
||||
"monitoring": {
|
||||
"background_tasks": "Hintergrundaufgaben",
|
||||
"queued_tasks": "Es gibt derzeit {{ count }} anstehende Tasks.",
|
||||
"queued_tasks": "Es gibt derzeit {{ count }} {{ count > 1 ? 'anstehende Aufgaben' : 'anstehende Aufgabe' }}.",
|
||||
"queued_tasks_explain": "Dateiverarbeitung, Thumbnail-Erstellung, Index-Update, optische Zeichenerkennung sind Hintergrundaufgaben. Eine große Anzahl unbearbeiteter Aufgaben führt zu unvollständigen Suchergebnissen.",
|
||||
"server_logs": "Server Logs",
|
||||
"server_logs": "Server-Logs",
|
||||
"log_date": "Datum",
|
||||
"log_tag": "Tag",
|
||||
"log_message": "Nachricht",
|
||||
"indexing": "Indexierung",
|
||||
"indexing_info": "Wenn Sie Unstimmigkeiten in den Suchergebnissen feststellen, können Sie versuchen, eine vollständige Neuindizierung durchzuführen. Die Suchergebnisse sind bis zum Abschluss dieser Operation unvollständig.",
|
||||
"indexing_info": "Wenn Sie Unstimmigkeiten in den Suchergebnissen feststellen, können Sie versuchen, eine vollständige Neuindizierung durchzuführen. Die Suchergebnisse sind bis zum Abschluss dieser Aufgabe unvollständig.",
|
||||
"start_reindexing": "Vollständige Neuindizierung starten",
|
||||
"reindexing_started": "Neuindizierung wurde gestartet, bitte warten Sie, bis es keine Hintergrundaufgaben mehr gibt."
|
||||
},
|
||||
@@ -469,14 +469,14 @@
|
||||
"new_entry": "Neuer Eintrag"
|
||||
},
|
||||
"fileimporter": {
|
||||
"title": "Massen Datei Importer",
|
||||
"title": "Massen-Datei-Importer",
|
||||
"advanced_users": "Für fortgeschrittene Benutzer!",
|
||||
"need_intro": "Wenn Sie:",
|
||||
"need_1": "Ganze Verzeichnisse von Dateien auf einmal importieren möchten",
|
||||
"need_2": "Ein Verzeichnis nach neuen Dateien durchsuchen lassen und gefunden Dateien importieren lassen möchten",
|
||||
"line_1": "Gehen Sie zu <a href=\"https://github.com/sismics/docs/releases\">sismics/docs/releases</a> und laden Sie das Datei-Importer-Tool für Ihr System herunter.",
|
||||
"line_2": "Folgen Sie den <a href=\"https://github.com/sismics/docs/tree/master/docs-importer\">Anweisungen</a>, um das Import-Tool zu nutzen.",
|
||||
"line_3": "Ihre Dateien werden in <a href=\"#/document\">Modus 'Schnelles Hochladen'</a> importiert. Danach können Sie die Dateien weiterbearbeiten und Dokumenten zuordnen oder Dokumente erstellen.",
|
||||
"line_3": "Ihre Dateien werden im <a href=\"#/document\">Modus 'Schnelles Hochladen'</a> importiert. Danach können Sie die Dateien weiterbearbeiten und Dokumenten zuordnen oder Dokumente erstellen.",
|
||||
"download": "Herunterladen",
|
||||
"instructions": "Anweisungen"
|
||||
}
|
||||
@@ -522,14 +522,14 @@
|
||||
"Webhook": "Webhook"
|
||||
},
|
||||
"selectrelation": {
|
||||
"typeahead": "Tippen Sie einen Dokumentnamen ein"
|
||||
"typeahead": "Geben Sie einen Dokumentnamen ein"
|
||||
},
|
||||
"selecttag": {
|
||||
"typeahead": "Tippen Sie einen Tagnamen ein"
|
||||
"typeahead": "Geben Sie einen Tagnamen ein"
|
||||
},
|
||||
"datepicker": {
|
||||
"current": "Heute",
|
||||
"clear": "Bereinigen",
|
||||
"clear": "Leeren",
|
||||
"close": "Erledigt"
|
||||
}
|
||||
},
|
||||
@@ -579,7 +579,7 @@
|
||||
"onboarding": {
|
||||
"step1": {
|
||||
"title": "Das erste Mal?",
|
||||
"description": "Wenn Sie Teedy zum ersten Mal nutzen, klicken Sie auf die Schaltfläche Weiter. Andernfalls können Sie mich schließen."
|
||||
"description": "Wenn Sie Teedy zum ersten Mal nutzen, klicken Sie auf die Schaltfläche \"Weiter\". Andernfalls können Sie diese Box schließen."
|
||||
},
|
||||
"step2": {
|
||||
"title": "Dokumente",
|
||||
@@ -599,12 +599,12 @@
|
||||
}
|
||||
},
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"no": "Nein",
|
||||
"ok": "OK",
|
||||
"cancel": "Abbrechen",
|
||||
"share": "Teilen",
|
||||
"unshare": "Nicht mehr teilen",
|
||||
"close": "Schliessen",
|
||||
"close": "Schließen",
|
||||
"add": "Hinzufügen",
|
||||
"open": "Öffnen",
|
||||
"see": "Ansehen",
|
||||
@@ -613,8 +613,8 @@
|
||||
"edit": "Bearbeiten",
|
||||
"delete": "Löschen",
|
||||
"rename": "Umbenennen",
|
||||
"download": "Herunterladen",
|
||||
"loading": "Lädt...",
|
||||
"download": "Herunterladen",
|
||||
"loading": "Lädt\u2026",
|
||||
"send": "Absenden",
|
||||
"enabled": "Aktiviert",
|
||||
"disabled": "Deaktiviert"
|
||||
|
||||
@@ -8,4 +8,5 @@ log4j.appender.MEMORY.size=1000
|
||||
log4j.logger.com.sismics=INFO
|
||||
log4j.logger.org.apache.pdfbox=ERROR
|
||||
log4j.logger.org.glassfish.jersey.servlet.WebComponent=ERROR
|
||||
log4j.logger.org.apache.directory=ERROR
|
||||
log4j.logger.org.apache.directory=ERROR
|
||||
log4j.logger.org.odftoolkit=ERROR
|
||||
@@ -1,3 +0,0 @@
|
||||
api.current_version=${project.version}
|
||||
api.min_version=1.0
|
||||
db.version=27
|
||||
@@ -1 +0,0 @@
|
||||
\ugggg
|
||||
@@ -1,8 +0,0 @@
|
||||
log4j.rootCategory=WARN, 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=DEBUG
|
||||
@@ -143,7 +143,7 @@ public class TestDocumentResource extends BaseJerseyTest {
|
||||
json = target().path("/document").request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, document3Token)
|
||||
.put(Entity.form(new Form()
|
||||
.param("title", "My super title document 3")
|
||||
.param("title", "My_super_title_document_3")
|
||||
.param("description", "My super description for document 3")
|
||||
.param("language", "eng")
|
||||
.param("create_date", Long.toString(create3Date))), JsonObject.class);
|
||||
@@ -217,6 +217,7 @@ public class TestDocumentResource extends BaseJerseyTest {
|
||||
Assert.assertEquals(1, searchDocuments("mime:image/png", document1Token));
|
||||
Assert.assertEquals(0, searchDocuments("mime:empty/void", document1Token));
|
||||
Assert.assertEquals(1, searchDocuments("after:2010 before:2040-08 tag:super shared:yes lang:eng simple:title simple:description full:uranium", document1Token));
|
||||
Assert.assertEquals(1, searchDocuments("title:My_super_title_document_3", document3Token));
|
||||
|
||||
// Search documents (nothing)
|
||||
Assert.assertEquals(0, searchDocuments("random", document1Token));
|
||||
@@ -228,6 +229,7 @@ public class TestDocumentResource extends BaseJerseyTest {
|
||||
Assert.assertEquals(0, searchDocuments("before:2040-05-38", document1Token));
|
||||
Assert.assertEquals(0, searchDocuments("tag:Nop", document1Token));
|
||||
Assert.assertEquals(0, searchDocuments("lang:fra", document1Token));
|
||||
Assert.assertEquals(0, searchDocuments("title:Unknown title", document3Token));
|
||||
|
||||
// Get document 1
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.sismics.docs.rest.resource;
|
||||
|
||||
import javax.json.JsonObject;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
@@ -23,6 +25,7 @@ public class ThirdPartyWebhookResource extends BaseResource {
|
||||
* @return Response
|
||||
*/
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
public Response webhook(JsonObject request) {
|
||||
lastPayload = request;
|
||||
return Response.ok().build();
|
||||
|
||||
@@ -10,4 +10,6 @@ log4j.logger.com.sismics.util.jpa=ERROR
|
||||
log4j.logger.org.hibernate=ERROR
|
||||
log4j.logger.org.apache.pdfbox=INFO
|
||||
log4j.logger.com.mchange=ERROR
|
||||
log4j.logger.org.apache.directory=ERROR
|
||||
log4j.logger.org.apache.directory=ERROR
|
||||
log4j.logger.org.glassfish.grizzly=ERROR
|
||||
log4j.logger.org.odftoolkit=ERROR
|
||||
78
pom.xml
78
pom.xml
@@ -6,13 +6,13 @@
|
||||
<groupId>com.sismics.docs</groupId>
|
||||
<artifactId>docs-parent</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>1.9</version>
|
||||
<version>1.10</version>
|
||||
|
||||
<name>Docs Parent</name>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<!-- Dependencies version (external) -->
|
||||
@@ -20,48 +20,48 @@
|
||||
<commons-lang.commons-lang.version>2.6</commons-lang.commons-lang.version>
|
||||
<commons-io.commons-io.version>2.6</commons-io.commons-io.version>
|
||||
<org.apache.commons.commons-email.version>1.5</org.apache.commons.commons-email.version>
|
||||
<org.freemarker.freemarker.version>2.3.28</org.freemarker.freemarker.version>
|
||||
<org.freemarker.freemarker.version>2.3.30</org.freemarker.freemarker.version>
|
||||
<commons-dbcp.version>1.4</commons-dbcp.version>
|
||||
<com.google.guava.guava.version>28.2-jre</com.google.guava.guava.version>
|
||||
<log4j.log4j.version>1.2.16</log4j.log4j.version>
|
||||
<org.slf4j.version>1.6.4</org.slf4j.version>
|
||||
<org.slf4j.jcl-over-slf4j.version>1.6.6</org.slf4j.jcl-over-slf4j.version>
|
||||
<org.slf4j.jul-to-slf4j.version>1.6.6</org.slf4j.jul-to-slf4j.version>
|
||||
<junit.junit.version>4.12</junit.junit.version>
|
||||
<com.h2database.h2.version>1.4.197</com.h2database.h2.version>
|
||||
<org.glassfish.jersey.version>2.27</org.glassfish.jersey.version>
|
||||
<org.glassfish.javax.json.version>1.1.3</org.glassfish.javax.json.version>
|
||||
<org.mindrot.jbcrypt>0.3m</org.mindrot.jbcrypt>
|
||||
<org.apache.lucene.version>7.5.0</org.apache.lucene.version>
|
||||
<com.google.guava.guava.version>30.1-jre</com.google.guava.guava.version>
|
||||
<log4j.log4j.version>1.2.17</log4j.log4j.version>
|
||||
<org.slf4j.version>1.7.30</org.slf4j.version>
|
||||
<org.slf4j.jcl-over-slf4j.version>1.7.30</org.slf4j.jcl-over-slf4j.version>
|
||||
<org.slf4j.jul-to-slf4j.version>1.7.30</org.slf4j.jul-to-slf4j.version>
|
||||
<junit.junit.version>4.13.1</junit.junit.version>
|
||||
<com.h2database.h2.version>1.4.199</com.h2database.h2.version>
|
||||
<org.glassfish.jersey.version>2.33</org.glassfish.jersey.version>
|
||||
<org.glassfish.javax.json.version>1.1.4</org.glassfish.javax.json.version>
|
||||
<at.favre.lib.bcrypt.version>0.9.0</at.favre.lib.bcrypt.version>
|
||||
<org.apache.lucene.version>8.7.0</org.apache.lucene.version>
|
||||
<org.imgscalr.imgscalr-lib.version>4.2</org.imgscalr.imgscalr-lib.version>
|
||||
<org.apache.pdfbox.pdfbox.version>2.0.12</org.apache.pdfbox.pdfbox.version>
|
||||
<org.bouncycastle.bcprov-jdk15on.version>1.61</org.bouncycastle.bcprov-jdk15on.version>
|
||||
<joda-time.joda-time.version>2.10</joda-time.joda-time.version>
|
||||
<org.hibernate.hibernate.version>5.3.7.Final</org.hibernate.hibernate.version>
|
||||
<org.apache.pdfbox.pdfbox.version>2.0.22</org.apache.pdfbox.pdfbox.version>
|
||||
<org.bouncycastle.bcprov-jdk15on.version>1.68</org.bouncycastle.bcprov-jdk15on.version>
|
||||
<joda-time.joda-time.version>2.10.9</joda-time.joda-time.version>
|
||||
<org.hibernate.hibernate.version>5.4.27.Final</org.hibernate.hibernate.version>
|
||||
<javax.servlet.javax.servlet-api.version>4.0.1</javax.servlet.javax.servlet-api.version>
|
||||
<fr.opensagres.xdocreport.version>2.0.1</fr.opensagres.xdocreport.version>
|
||||
<net.java.dev.jna.jna.version>4.2.1</net.java.dev.jna.jna.version>
|
||||
<com.twelvemonkeys.imageio.version>3.3.2</com.twelvemonkeys.imageio.version>
|
||||
<com.levigo.jbig2.levigo-jbig2-imageio.version>1.6.5</com.levigo.jbig2.levigo-jbig2-imageio.version>
|
||||
<com.github.jai-imageio.jai-imageio-jpeg2000.version>1.3.0</com.github.jai-imageio.jai-imageio-jpeg2000.version>
|
||||
<org.postgresql.postgresql.version>42.2.5</org.postgresql.postgresql.version>
|
||||
<fr.opensagres.xdocreport.version>2.0.2</fr.opensagres.xdocreport.version>
|
||||
<net.java.dev.jna.jna.version>5.6.0</net.java.dev.jna.jna.version>
|
||||
<com.twelvemonkeys.imageio.version>3.6.2</com.twelvemonkeys.imageio.version>
|
||||
<com.levigo.jbig2.levigo-jbig2-imageio.version>2.0</com.levigo.jbig2.levigo-jbig2-imageio.version>
|
||||
<com.github.jai-imageio.jai-imageio-jpeg2000.version>1.4.0</com.github.jai-imageio.jai-imageio-jpeg2000.version>
|
||||
<org.postgresql.postgresql.version>42.2.18</org.postgresql.postgresql.version>
|
||||
<org.subethamail.subethasmtp-wiser.version>1.2</org.subethamail.subethasmtp-wiser.version>
|
||||
<com.icegreen.greenmail.version>1.5.8</com.icegreen.greenmail.version>
|
||||
<com.sun.mail.javax.mail.version>1.6.2</com.sun.mail.javax.mail.version>
|
||||
<org.jsoup.jsoup.version>1.11.3</org.jsoup.jsoup.version>
|
||||
<com.squareup.okhttp3.okhttp.version>3.11.0</com.squareup.okhttp3.okhttp.version>
|
||||
<org.apache.directory.api.api-all.version>1.0.0</org.apache.directory.api.api-all.version>
|
||||
<org.jsoup.jsoup.version>1.13.1</org.jsoup.jsoup.version>
|
||||
<com.squareup.okhttp3.okhttp.version>4.9.0</com.squareup.okhttp3.okhttp.version>
|
||||
<org.apache.directory.api.api-all.version>2.0.1</org.apache.directory.api.api-all.version>
|
||||
|
||||
<org.eclipse.jetty.jetty-server.version>9.4.17.v20190418</org.eclipse.jetty.jetty-server.version>
|
||||
<org.eclipse.jetty.jetty-webapp.version>9.4.17.v20190418</org.eclipse.jetty.jetty-webapp.version>
|
||||
<org.eclipse.jetty.jetty-servlet.version>9.4.17.v20190418</org.eclipse.jetty.jetty-servlet.version>
|
||||
<org.eclipse.jetty.jetty-server.version>9.4.36.v20210114</org.eclipse.jetty.jetty-server.version>
|
||||
<org.eclipse.jetty.jetty-webapp.version>9.4.36.v20210114</org.eclipse.jetty.jetty-webapp.version>
|
||||
<org.eclipse.jetty.jetty-servlet.version>9.4.36.v20210114</org.eclipse.jetty.jetty-servlet.version>
|
||||
|
||||
<!-- Plugins version -->
|
||||
<org.apache.maven.plugins.maven-antrun-plugin.version>1.8</org.apache.maven.plugins.maven-antrun-plugin.version>
|
||||
<org.apache.maven.plugins.maven-jar-plugin.version>3.1.0</org.apache.maven.plugins.maven-jar-plugin.version>
|
||||
<org.apache.maven.plugins.maven-war-plugin.version>3.2.2</org.apache.maven.plugins.maven-war-plugin.version>
|
||||
<org.apache.maven.plugins.maven-surefire-plugin.version>2.22.1</org.apache.maven.plugins.maven-surefire-plugin.version>
|
||||
<org.eclipse.jetty.jetty-maven-plugin.version>9.4.17.v20190418</org.eclipse.jetty.jetty-maven-plugin.version>
|
||||
<org.apache.maven.plugins.maven-antrun-plugin.version>3.0.0</org.apache.maven.plugins.maven-antrun-plugin.version>
|
||||
<org.apache.maven.plugins.maven-jar-plugin.version>3.2.0</org.apache.maven.plugins.maven-jar-plugin.version>
|
||||
<org.apache.maven.plugins.maven-war-plugin.version>3.3.1</org.apache.maven.plugins.maven-war-plugin.version>
|
||||
<org.apache.maven.plugins.maven-surefire-plugin.version>3.0.0-M5</org.apache.maven.plugins.maven-surefire-plugin.version>
|
||||
<org.eclipse.jetty.jetty-maven-plugin.version>9.4.36.v20210114</org.eclipse.jetty.jetty-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
<scm>
|
||||
@@ -256,9 +256,9 @@
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mindrot</groupId>
|
||||
<artifactId>jbcrypt</artifactId>
|
||||
<version>${org.mindrot.jbcrypt}</version>
|
||||
<groupId>at.favre.lib</groupId>
|
||||
<artifactId>bcrypt</artifactId>
|
||||
<version>${at.favre.lib.bcrypt.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
Reference in New Issue
Block a user