Compare commits

..

11 Commits

9 changed files with 122 additions and 27 deletions

View File

@ -0,0 +1,9 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y software-properties-common \
python-software-properties
RUN add-apt-repository -y ppa:webupd8team/java
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
RUN apt-get update && apt-get install -y oracle-java8-installer \
maven
COPY . /java
CMD mvn -f /java package

View File

@ -0,0 +1,61 @@
## Build instruction
At first, You need to install `oracle-java8-installer`
```
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
```
Edit the **settings.properties** configuration file. Specify the name of your local server with the ONLYOFFICE Document Server installed
```
nano src/main/resources/settings.properties
```
Edit the following lines:
```
files.docservice.url.converter=https://documentserver/ConvertService.ashx
files.docservice.url.tempstorage=https://documentserver/ResourceService.ashx
files.docservice.url.api=https://documentserver/web-apps/apps/api/documents/api.js
files.docservice.url.preloader=https://documentserver/web-apps/apps/api/documents/cache-scripts.html
```
Install Maven:
```
apt-get install maven
```
And build:
```
mvn package
```
After it, all bin files will be passed to `./target` folder
## Build from docker
Edit the **settings.properties** configuration file. Specify the name of your local server with the ONLYOFFICE Document Server installed
```
nano src/main/resources/settings.properties
```
Edit the following lines. You need to change `documentserver` to your documentserver:
```
files.docservice.url.converter=https://documentserver/ConvertService.ashx
files.docservice.url.tempstorage=https://documentserver/ResourceService.ashx
files.docservice.url.api=https://documentserver/web-apps/apps/api/documents/api.js
files.docservice.url.preloader=https://documentserver/web-apps/apps/api/documents/cache-scripts.html
```
Run next command in java example directory:
```
docker build . -t java-example
docker run -it -v $PWD/target:/java/target java-example
```
After it, all bin files will be passed to `./target` folder

View File

@ -56,7 +56,7 @@ public class IndexServlet extends HttpServlet
{
String action = request.getParameter("type");
if(action == null)
if (action == null)
{
request.getRequestDispatcher("index.jsp").forward(request, response);
return;
@ -249,7 +249,7 @@ public class IndexServlet extends HttpServlet
long status = (long) jsonObj.get("status");
int saved = 0;
if(status == 2 || status == 3)//MustSave, Corrupted
if (status == 2 || status == 3)//MustSave, Corrupted
{
String downloadUri = (String) jsonObj.get("url");

View File

@ -181,7 +181,7 @@ public class DocumentManager
{
try
{
String serverPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String serverPath = GetServerUrl();
String storagePath = ConfigManager.GetProperty("storage-folder");
String hostAddress = CurUserHostAddress(null);
@ -197,12 +197,12 @@ public class DocumentManager
public static String GetServerUrl()
{
return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
}
public static String GetCallback(String fileName)
{
String serverPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String serverPath = GetServerUrl();
String hostAddress = CurUserHostAddress(null);
try
{

View File

@ -231,6 +231,7 @@ app.get("/convert", function (req, res) {
if (error != null)
result["error"] = error;
response.setHeader("Content-Type", "application/json");
response.write(JSON.stringify(result));
response.end();
};
@ -270,7 +271,7 @@ app.get("/convert", function (req, res) {
fileSystem.renameSync(path.join(correctHistoryPath, fileName + ".txt"), path.join(correctHistoryPath, correctName + ".txt"));
writeResult(correctName, null, null);
writeResult(correctName, result, null);
} catch (e) {
console.log(e);
writeResult(null, null, "Server error");
@ -279,7 +280,11 @@ app.get("/convert", function (req, res) {
try {
if (configServer.get('convertedDocs').indexOf(fileExt) != -1) {
const key = documentService.generateRevisionId(fileUri);
let storagePath = docManager.storagePath(fileName);
const stat = fileSystem.statSync(storagePath);
let key = fileUri + stat.mtime.getTime();
key = documentService.generateRevisionId(key);
documentService.getConvertedUri(fileUri, fileExt, internalFileExt, key, true, callback);
} else {
writeResult(fileName, null, null);
@ -469,25 +474,32 @@ app.post("/track", function (req, res) {
//checkjwt
if (cfgSignatureEnable && cfgSignatureUseForRequest) {
var checkJwtHeaderRes = documentService.checkJwtHeader(req);
if (checkJwtHeaderRes) {
var body;
if (checkJwtHeaderRes.payload) {
body = checkJwtHeaderRes.payload;
}
if (checkJwtHeaderRes.query) {
if (checkJwtHeaderRes.query.useraddress) {
userAddress = checkJwtHeaderRes.query.useraddress;
}
if (checkJwtHeaderRes.query.filename) {
fileName = fileUtility.getFileName(checkJwtHeaderRes.query.filename);
}
}
processTrack(res, body, fileName, userAddress);
var body = null;
if (req.body.hasOwnProperty("token")) {
body = documentService.readToken(req.body.token);
} else {
var checkJwtHeaderRes = documentService.checkJwtHeader(req);
if (checkJwtHeaderRes) {
var body;
if (checkJwtHeaderRes.payload) {
body = checkJwtHeaderRes.payload;
}
if (checkJwtHeaderRes.query) {
if (checkJwtHeaderRes.query.useraddress) {
userAddress = checkJwtHeaderRes.query.useraddress;
}
if (checkJwtHeaderRes.query.filename) {
fileName = fileUtility.getFileName(checkJwtHeaderRes.query.filename);
}
}
}
}
if (body == null) {
res.write("{\"error\":1}");
res.end();
return;
}
processTrack(res, body, fileName, userAddress);
return;
}

View File

@ -304,7 +304,7 @@ docManager.getKey = function (fileName) {
let storagePath = docManager.storagePath(fileName, userAddress);
const stat = fileSystem.statSync(storagePath);
key += stat.mtime.toString();
key += stat.mtime.getTime();
return documentService.generateRevisionId(key);
};

View File

@ -46,8 +46,6 @@ var documentService = {};
documentService.userIp = null;
documentService.getConvertedUriSync = function (documentUri, fromExtension, toExtension, documentRevisionId, callback) {
documentRevisionId = documentService.generateRevisionId(documentRevisionId || documentUri);
documentService.getConvertedUri(documentUri, fromExtension, toExtension, documentRevisionId, false, function (err, data) {
if (err) {
callback();
@ -82,6 +80,7 @@ documentService.getConvertedUri = function (documentUri, fromExtension, toExtens
if (cfgSignatureEnable && cfgSignatureUseForRequest) {
headers[cfgSignatureAuthorizationHeader] = cfgSignatureAuthorizationHeaderPrefix + this.fillJwtByUrl(uri, params);
params.token = documentService.getToken(params);
}
urllib.request(uri,
@ -185,6 +184,7 @@ documentService.commandRequest = function (method, documentRevisionId, callback)
};
if (cfgSignatureEnable && cfgSignatureUseForRequest) {
headers[cfgSignatureAuthorizationHeader] = cfgSignatureAuthorizationHeaderPrefix + this.fillJwtByUrl(uri, params);
params.token = documentService.getToken(params);
}
urllib.request(uri,
@ -218,4 +218,18 @@ documentService.fillJwtByUrl = function (uri, opt_dataObject, opt_iss, opt_paylo
return jwt.sign(payload, cfgSignatureSecret, options);
}
documentService.getToken = function (data) {
var options = {algorithm: cfgSignatureSecretAlgorithmRequest, expiresIn: cfgSignatureSecretExpiresIn};
return jwt.sign(data, cfgSignatureSecret, options);
};
documentService.readToken = function (token) {
try {
return jwt.verify(token, cfgSignatureSecret);
} catch (err) {
console.log('checkJwtHeader error: name = ' + err.name + ' message = ' + err.message + ' token = ' + token)
}
return null;
};
module.exports = documentService;

View File

@ -136,10 +136,9 @@ if (typeof jQuery != "undefined") {
timer = setTimeout(function () {
var requestAddress = UrlConverter + "?filename=" + encodeURIComponent(jq("#hiddenFileName").val());
jq.ajaxSetup({ cache: false });
jq.ajax({
async: true,
contentType: "text/xml",
type: "get",
url: requestAddress,
complete: function (data) {