Compare commits

...

38 Commits

Author SHA1 Message Date
c4de5afd4b java-raw: inner 2025-07-07 15:52:44 +03:00
f6e04d5ab9 java-raw: set config 2025-07-07 15:52:43 +03:00
925c6e96fc java-raw: add custom cors 2025-07-07 15:52:30 +03:00
bf873519de java-raw: idk project file 2025-07-07 15:52:29 +03:00
0df41b9e36 java-raw: add docker files 2025-07-07 15:52:29 +03:00
00296b90c8 update demo files 2025-07-04 16:42:09 +03:00
3eae49253f nodejs: отображать в логах отсутствие WOPI заголовков ( for Bug 75684 ) 2025-07-02 11:55:24 +03:00
c8d28ec950 nodejs: 403 if verification fails 2025-07-02 11:47:00 +03:00
403ff78807 Merge pull request 'feature/request-users-pagination' from feature/request-users-pagination into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/68
2025-07-02 06:08:01 +00:00
bfa121f343 Merge remote-tracking branch 'remotes/origin/develop' into feature/request-users-pagination
# Conflicts:
#	CHANGELOG.md
2025-07-02 09:06:12 +03:00
f38e2779be Merge pull request 'fix/convert-box-checkmark-color' from fix/convert-box-checkmark-color into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/67
2025-07-02 06:04:03 +00:00
afdd56388c Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-01 17:19:56 +03:00
c73eece042 Merge pull request 'ci: added create-tag.yml and run release on create tag' from ci/git-actions into master
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/70
2025-07-01 14:19:30 +00:00
e8a68fad5a Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-01 17:14:05 +03:00
8701cc53e9 Merge pull request 'release/1.14.0' from release/1.14.0 into master
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/69
2025-07-01 14:09:50 +00:00
5a214b80d9 ci: added create-tag.yml and run release on create tag 2025-07-01 17:08:29 +03:00
f231b1cd72 nodejs: fix lint 2025-07-01 16:46:51 +03:00
1654d4978f changelog: set users by parts 2025-06-25 17:02:02 +07:00
86bf4d083a feat(ruby): set users by parts with infinite scroll for pagination 2025-06-25 17:00:43 +07:00
540a8ea98b feat(python): set users by parts with infinite scroll for pagination 2025-06-25 17:00:27 +07:00
729c67ab8f feat(php-laravel): set users by parts with infinite scroll for pagination 2025-06-25 17:00:09 +07:00
3d529bf57c feat(php): set users by parts with infinite scroll for pagination 2025-06-25 16:59:48 +07:00
7f2dfc37d4 feat(java-spring): set users by parts with infinite scroll for pagination 2025-06-25 16:59:33 +07:00
6c386f852d feat(java): set users by parts with infinite scroll for pagination 2025-06-25 16:59:06 +07:00
7469285d0c feat(go): set users by parts with infinite scroll for pagination 2025-06-25 16:58:54 +07:00
863eee6db7 feat(csharp-mvc): set users by parts with infinite scroll for pagination 2025-06-25 16:58:34 +07:00
74ff4cec88 feat(csharp): set users by parts with infinite scroll for pagination 2025-06-25 16:58:15 +07:00
32b4c49f6e changelog: conversion dialog starts with gray check mark on step 1 2025-06-24 15:16:08 +07:00
9545bd4375 fix(ruby): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:41 +07:00
2bc8081b04 fix(python): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:27 +07:00
9ce708913b fix(php-laravel): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:02 +07:00
0db101a270 fix(php): conversion dialog starts with gray check mark on step 1 2025-06-24 15:14:39 +07:00
5660b1f1c2 fix(nodejs): conversion dialog starts with gray check mark on step 1 2025-06-24 15:14:22 +07:00
ef294de17f fix(java-spring): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:52 +07:00
1759180e13 fix(java): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:30 +07:00
1ef8d40b50 fix(go): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:01 +07:00
8f9d99faf8 fix(csharp-mvc): conversion dialog starts with gray check mark on step 1 2025-06-24 15:12:26 +07:00
0d0ecc73f8 fix(csharp): conversion dialog starts with gray check mark on step 1 2025-06-24 15:12:12 +07:00
41 changed files with 516 additions and 114 deletions

27
.github/workflows/create-tag.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: Create Tag
on:
push:
branches: [master]
paths-ignore:
- '.github/**'
- '**/AUTHORS.md'
- '**/LICENSE'
- '**/README.md'
jobs:
create-tag:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Get Info
run: |
echo "version=$(grep -Eo '[0-9]+(\.[0-9]+)+' CHANGELOG.md | head -n 1)" >> $GITHUB_OUTPUT
id: info
- name: Create Tag
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git tag -a 'v${{ steps.info.outputs.version }}' -m 'Release/v${{ steps.info.outputs.version }}'
git push origin 'v${{ steps.info.outputs.version }}'

View File

@ -2,7 +2,8 @@ name: Release
on:
push:
branches: [master]
tags:
- 'v*'
permissions:
contents: write

View File

@ -1,5 +1,8 @@
# Change Log
- update demo files
- set users by parts
- open the conversion dialog box with a gray check mark on the type selection step
- preload frame moved from uploading popap
- change tab title on rename
- change uploaded file name in popap if converted

View File

@ -334,7 +334,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -344,6 +344,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -362,10 +362,33 @@
default:
users = <%= usersForMentions %>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function (event) {

View File

@ -327,10 +327,33 @@
default:
users = <%= UsersForMentions %>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function (event) {

View File

@ -334,7 +334,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -344,6 +344,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -321,7 +321,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -331,6 +331,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -240,10 +240,33 @@
users = {{.usersForMentions}};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -326,7 +326,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -336,6 +336,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -356,10 +356,33 @@
users = [[${usersForMentions}]];
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -1,23 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OnlineEditorsExampleJava</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<name>OnlineEditorsExampleJava</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<filteredResources>
<filter>
<id>1690280351006</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

View File

@ -1,8 +1,22 @@
FROM maven:3.6.1-jdk-8-alpine AS MVN_BLDR
COPY ./ /tmp/
WORKDIR /tmp/
# FROM maven:3.9.3-eclipse-temurin-11-alpine AS example-build
# WORKDIR /srv
# COPY . .
# RUN mvn package
FROM maven:3.6.1-jdk-8-alpine AS example-build
WORKDIR /srv
COPY . .
RUN mvn package
FROM tomcat:alpine
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY --from=MVN_BLDR /tmp/target/*.war $CATALINA_HOME/webapps/ROOT.war
# no main manifest attribute, in example.war
# FROM eclipse-temurin:11-jdk-alpine AS example
# WORKDIR /srv
# COPY --from=example-build /srv/target/*.war example.war
# CMD ["java", "-jar", "example.war"]
FROM tomcat:9.0.20-jre8-alpine AS example
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY --from=example-build /srv/target/*.war $CATALINA_HOME/webapps/ROOT.war
FROM nginx:1.23.4-alpine3.17 AS proxy
COPY proxy/nginx.conf /etc/nginx/nginx.conf

View File

@ -1,9 +1,31 @@
version: '3'
version: "3.8"
services:
java-intg-ex:
build:
context: ./
dockerfile: Dockerfile
ports:
- 8080:8080
document-server:
container_name: document-server
image: onlyoffice/documentserver:7.3.3.50
expose:
- "80"
environment:
- JWT_SECRET=your-256-bit-secret
example:
container_name: example
build:
context: .
target: example
# platform: linux/amd64
expose:
# - "80"
- "8080"
proxy:
container_name: proxy
build:
context: .
target: proxy
ports:
# - "80:80"
# - "8080:8080"
- "8080:8080"
- "3000:3000"

View File

@ -0,0 +1,41 @@
worker_processes auto;
events {
worker_connections 512;
}
http {
include /etc/nginx/mime.types;
server {
# listen 80;
listen 8080;
server_name localhost;
location / {
proxy_http_version 1.1;
# proxy_pass http://example;
proxy_pass http://example:8080;
}
}
server {
# listen 8080;
listen 3000;
server_name localhost;
location / {
client_max_body_size 100m;
proxy_http_version 1.1;
proxy_pass http://document-server;
proxy_redirect off;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_x_forwarded_host;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-Real-IP $remote_addr;
}
}
}

View File

@ -0,0 +1,59 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package controllers;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CorsFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(final ServletRequest request,
final ServletResponse response,
final FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Credentials", "false");
res.setHeader("Access-Control-Allow-Methods", "*");
res.setHeader("Access-Control-Allow-Headers", "*");
if ("OPTIONS".equalsIgnoreCase(req.getMethod())) {
res.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}

View File

@ -137,10 +137,24 @@ public final class TrackManager {
return body;
}
public static JSONObject resolveProcessSaveBody(final JSONObject body) {
JSONObject copied = body;
String url = (String) copied.get("url");
copied.put("url", url.replace("localhost", "proxy"));
String changesURL = (String) copied.get("changesurl");
copied.put("changesurl", changesURL.replace("localhost", "proxy"));
return copied;
}
// file saving process
public static void processSave(final JSONObject body,
public static void processSave(final JSONObject rawBody,
final String fileName,
final String userAddress) throws Exception {
JSONObject body = TrackManager.resolveProcessSaveBody(rawBody);
if (body.get("url") == null) {
throw new Exception("DownloadUrl is null");
}

View File

@ -7,16 +7,16 @@ enable-forgotten=TRUE
files.docservice.timeout=120000
files.docservice.url.site=http://documentserver/
files.docservice.url.site=http://localhost:3000/
files.docservice.url.converter=converter
files.docservice.url.command=command
files.docservice.url.api=web-apps/apps/api/documents/api.js
files.docservice.url.preloader=web-apps/apps/api/documents/preload.html
files.docservice.url.example=
files.docservice.url.example=http://proxy:8080/
files.docservice.languages=en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|ur:Urdu|vi:Vietnamese|aa-AA:Test Language
files.docservice.secret=
files.docservice.secret=your-256-bit-secret
files.docservice.header=Authorization
files.docservice.token-use-for-request=TRUE
files.docservice.token-expiration=5

View File

@ -2,23 +2,7 @@
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Methods</param-value>
</init-param>
<filter-class>controllers.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>

View File

@ -359,10 +359,33 @@
users = <%=(String) request.getAttribute("usersForMentions")%>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -333,7 +333,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -343,6 +343,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -30,28 +30,37 @@ exports.isValidToken = async (req, res, next) => {
return;
}
const isValid = wopiValidator.check(
{
url: `${req.DocManager.getServerPath()}${req.originalUrl || req.url}`,
accessToken: req.query.access_token,
timestamp: req.headers[reqConsts.requestHeaders.Timestamp.toLowerCase()],
},
{
proof: req.headers[reqConsts.requestHeaders.Proof.toLowerCase()],
proofold: req.headers[reqConsts.requestHeaders.ProofOld.toLowerCase()],
},
{
modulus: proofKey.modulus,
exponent: proofKey.exponent,
oldmodulus: proofKey.oldmodulus,
oldexponent: proofKey.oldexponent,
},
);
const timestamp = req.headers[reqConsts.requestHeaders.Timestamp.toLowerCase()];
const proof = req.headers[reqConsts.requestHeaders.Proof.toLowerCase()];
const proofold = req.headers[reqConsts.requestHeaders.ProofOld.toLowerCase()];
let isValid = false;
if (!timestamp || !proof || !proofold) {
console.warn(`Proof keys: timestamp ${timestamp} , proof ${proof} , proofold ${proofold}`);
} else {
isValid = wopiValidator.check(
{
url: `${req.DocManager.getServerPath()}${req.originalUrl || req.url}`,
accessToken: req.query.access_token,
timestamp: timestamp,
},
{
proof: proof,
proofold: proofold,
},
{
modulus: proofKey.modulus,
exponent: proofKey.exponent,
oldmodulus: proofKey.oldmodulus,
oldexponent: proofKey.oldexponent,
},
);
}
if (isValid) {
next();
} else {
console.warn('Proof key verification failed');
res.status(500).send('Not verified');
res.status(403).send('Not verified');
}
} catch (error) {
console.error(error);

View File

@ -379,7 +379,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -389,6 +389,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -359,7 +359,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -369,6 +369,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -395,10 +395,33 @@
users = {!! $usersForMentions !!};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) {

View File

@ -349,7 +349,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -359,6 +359,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -373,10 +373,33 @@
users = {usersForMentions};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function (event) {

View File

@ -333,7 +333,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -343,6 +343,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -355,10 +355,33 @@
users = {{ usersForMentions | safe }};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -338,7 +338,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -348,6 +348,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -291,10 +291,33 @@
users = <%= raw @file.users_mentions.to_json %>;
}
docEditor.setUsers({
"c": c,
"users": users,
});
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment