From 3820f76d27f5c8fd70ca525adb90de08c04e100d Mon Sep 17 00:00:00 2001 From: ZEROM22 Date: Fri, 3 Nov 2023 09:14:41 +0300 Subject: [PATCH 001/331] nodejs: added page for forgotten files --- web/documentserver-example/nodejs/app.js | 63 +++++++ .../nodejs/public/stylesheets/stylesheet.css | 6 +- .../nodejs/views/forgotten.ejs | 156 ++++++++++++++++++ .../nodejs/views/index.ejs | 1 + 4 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 web/documentserver-example/nodejs/views/forgotten.ejs diff --git a/web/documentserver-example/nodejs/app.js b/web/documentserver-example/nodejs/app.js index 1a0378e4..95531166 100755 --- a/web/documentserver-example/nodejs/app.js +++ b/web/documentserver-example/nodejs/app.js @@ -108,6 +108,69 @@ app.get('/', (req, res) => { // define a handler for default page } }); +app.get('/forgotten', async (req, res) => { + function getForgottenList() { + return new Promise((resolve, reject) => { + documentService.commandRequest('getForgottenList', '', (err, data, ress) => { + if (err) { + reject(err); + } + else { + resolve(JSON.parse(ress.data)); + } + }); + }); + } + + function getForgottenFile(key) { + return new Promise((resolve, reject) => { + documentService.commandRequest('getForgotten', key, (err, data) => { + if (err) { + reject(err); + } else { + const parsedData = JSON.parse(data); + resolve({ + name: parsedData.key, + documentType: fileUtility.getFileType(parsedData.url), + url: parsedData.url, + }); + } + }); + }); + } + + try { + const forgottenListResponse = await getForgottenList(); + + const keys = forgottenListResponse.keys; + const forgottenFiles = await Promise.all(keys.map(getForgottenFile)); + + req.DocManager = new DocManager(req, res); + res.render('forgotten', { forgottenFiles }); + } catch (error) { + console.error(error); + res.status(500).render('error', { message: 'Server error' }); + } +}); + +app.delete('/forgotten', (req, res) => { // define a handler for removing forgotten file + try { + let fileName = req.query.filename; + if (fileName) { // if the forgotten file name is defined + const result = function result(err, data, ress) { + res.write('{"success":true}'); + res.end(); + }; + documentService.commandRequest('deleteForgotten', fileName, result); + } else { + // TODO: add delete all forgotten files + } + } catch (ex) { + console.log(ex); + res.write('Server error'); + } +}); + app.get('/download', (req, res) => { // define a handler for downloading files req.DocManager = new DocManager(req, res); diff --git a/web/documentserver-example/nodejs/public/stylesheets/stylesheet.css b/web/documentserver-example/nodejs/public/stylesheets/stylesheet.css index 30d16c52..7f74ba36 100644 --- a/web/documentserver-example/nodejs/public/stylesheets/stylesheet.css +++ b/web/documentserver-example/nodejs/public/stylesheets/stylesheet.css @@ -264,6 +264,10 @@ label .checkbox { padding: 16px 0; } +.links-panel a { + display: block; +} + .upload-panel, .create-panel { width: 100%; @@ -750,7 +754,7 @@ html { .tableRow td:first-child { display: flex; flex-grow: 1; - max-width: 25%; + max-width: 24%; } .tableHeaderCellFileName { diff --git a/web/documentserver-example/nodejs/views/forgotten.ejs b/web/documentserver-example/nodejs/views/forgotten.ejs new file mode 100644 index 00000000..2900d884 --- /dev/null +++ b/web/documentserver-example/nodejs/views/forgotten.ejs @@ -0,0 +1,156 @@ + + + + + + + + + ONLYOFFICE Document Editors + + + + + + + +
+
+ + ONLYOFFICE + +
+
+
+ + + + + + + +
+ + +
+
+ Forgotten documents + + + + + + + + + + +
FilenameDownloadRemove
+
+ + + <% for (var i = 0; i < forgottenFiles.length; i++) { %> + + + + + + + + + + + + + + + <% } %> + +
+ + <%= forgottenFiles[i].name %> + + + + Download + + + Delete +
+
+
+
+
+
+ + + + + + + diff --git a/web/documentserver-example/nodejs/views/index.ejs b/web/documentserver-example/nodejs/views/index.ejs index 6e332634..e5799f2b 100755 --- a/web/documentserver-example/nodejs/views/index.ejs +++ b/web/documentserver-example/nodejs/views/index.ejs @@ -108,6 +108,7 @@ From d1a67fa322911a5c4ac8aa97a3c92c26f55479e9 Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:42:41 +0300 Subject: [PATCH 002/331] add: dependency com.onlyoffice.docs-intagration-sdk --- web/documentserver-example/java-spring/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web/documentserver-example/java-spring/pom.xml b/web/documentserver-example/java-spring/pom.xml index ba4ac4d3..27e987b7 100644 --- a/web/documentserver-example/java-spring/pom.xml +++ b/web/documentserver-example/java-spring/pom.xml @@ -76,6 +76,11 @@ modelmapper 2.4.2 + + com.onlyoffice + docs-integration-sdk + 0.0.1 + From c2c14dd2f4190f71c526b96c68d73d3b2273fb9a Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:43:49 +0300 Subject: [PATCH 003/331] add: implementations sdk managers (DocumentMangerImpl, SettingsManagerImpl, UrlManagerImpl) --- .../sdk/manager/DocumentMangerImpl.java | 65 ++++++++++++++++++ .../sdk/manager/SettingsManagerImpl.java | 57 ++++++++++++++++ .../sdk/manager/UrlManagerImpl.java | 67 +++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/DocumentMangerImpl.java create mode 100644 web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/SettingsManagerImpl.java create mode 100644 web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/UrlManagerImpl.java diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/DocumentMangerImpl.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/DocumentMangerImpl.java new file mode 100644 index 00000000..50c27ba5 --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/DocumentMangerImpl.java @@ -0,0 +1,65 @@ +/** + * + * (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 com.onlyoffice.integration.sdk.manager; + +import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder; +import com.onlyoffice.manager.document.DefaultDocumentManager; +import com.onlyoffice.manager.settings.SettingsManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.File; + +import static com.onlyoffice.integration.documentserver.util.Constants.MAX_KEY_LENGTH; + +@Component +public class DocumentMangerImpl extends DefaultDocumentManager { + + @Autowired + private FileStoragePathBuilder storagePathBuilder; + + public DocumentMangerImpl(final SettingsManager settingsManager) { + super(settingsManager); + } + + @Override + public String getDocumentKey(final String fileId, final boolean embedded) { + String expectedKey = storagePathBuilder.getStorageLocation() + + "/" + fileId + "/" + + new File(storagePathBuilder.getFileLocation(fileId)).lastModified(); + + String formatKey = expectedKey.length() > MAX_KEY_LENGTH + ? Integer.toString(expectedKey.hashCode()) : expectedKey; + String key = formatKey.replace("[^0-9-.a-zA-Z_=]", "_"); + key = key.substring(0, Math.min(key.length(), MAX_KEY_LENGTH)); + + return embedded ? key + "_embedded" : key; + } + + @Override + public String getDocumentName(final String fileId) { + File file = new File(storagePathBuilder.getFileLocation(fileId)); + + if (file.exists()) { + return file.getName(); + } + + return null; + } +} diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/SettingsManagerImpl.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/SettingsManagerImpl.java new file mode 100644 index 00000000..4f43c679 --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/SettingsManagerImpl.java @@ -0,0 +1,57 @@ +/** + * + * (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 com.onlyoffice.integration.sdk.manager; + +import com.onlyoffice.manager.settings.DefaultSettingsManager; +import org.springframework.stereotype.Component; + +import java.io.InputStream; +import java.util.Properties; + +@Component +public class SettingsManagerImpl extends DefaultSettingsManager { + private static final String SETTINGS_PREFIX = "docservice"; + + private static Properties properties; + + public SettingsManagerImpl() { + init(); + } + + @Override + public String getSetting(final String name) { + return properties.getProperty(SETTINGS_PREFIX + "." + name); + } + + @Override + public void setSetting(final String name, final String value) { + properties.put(SETTINGS_PREFIX + "." + name, value); + } + + protected static void init() { + try { + properties = new Properties(); + InputStream stream = Thread.currentThread().getContextClassLoader() + .getResourceAsStream("docservice.properties"); + properties.load(stream); + } catch (Exception e) { + properties = null; + } + } +} diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/UrlManagerImpl.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/UrlManagerImpl.java new file mode 100644 index 00000000..46a24f1f --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/manager/UrlManagerImpl.java @@ -0,0 +1,67 @@ +/** + * + * (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 com.onlyoffice.integration.sdk.manager; + +import com.onlyoffice.integration.documentserver.managers.document.DocumentManager; +import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder; +import com.onlyoffice.manager.settings.SettingsManager; +import com.onlyoffice.manager.url.DefaultUrlManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class UrlManagerImpl extends DefaultUrlManager { + @Autowired + private FileStoragePathBuilder storagePathBuilder; + + @Value("${url.index}") + private String indexMapping; + + @Autowired + private DocumentManager documentManager; + + public UrlManagerImpl(final SettingsManager settingsManager) { + super(settingsManager); + } + + @Override + public String getFileUrl(final String fileId) { + return documentManager.getDownloadUrl(fileId, true); + } + + @Override + public String getDirectFileUrl(final String fileId) { + return documentManager.getDownloadUrl(fileId, false); + } + + public String getCreateUrl(final String fileId) { + return documentManager.getCreateUrl(fileId, false); + } + + @Override + public String getCallbackUrl(final String fileId) { + return documentManager.getCallback(fileId); + } + + @Override + public String getGobackUrl(final String fileId) { + return storagePathBuilder.getServerUrl(false) + indexMapping; + } +} From 9fe8701718cd103ac9537d80d578ef3a15361f35 Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:57:30 +0300 Subject: [PATCH 004/331] add: sdk managers (JwtManager, RequestManager) to spring context --- .../integration/IntegrationConfiguration.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/IntegrationConfiguration.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/IntegrationConfiguration.java index d9d75201..ffd1b838 100644 --- a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/IntegrationConfiguration.java +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/IntegrationConfiguration.java @@ -20,6 +20,12 @@ package com.onlyoffice.integration; import com.fasterxml.jackson.databind.ObjectMapper; import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder; +import com.onlyoffice.manager.request.DefaultRequestManager; +import com.onlyoffice.manager.request.RequestManager; +import com.onlyoffice.manager.security.DefaultJwtManager; +import com.onlyoffice.manager.security.JwtManager; +import com.onlyoffice.manager.settings.SettingsManager; +import com.onlyoffice.manager.url.UrlManager; import org.json.simple.parser.JSONParser; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; @@ -84,4 +90,16 @@ public class IntegrationConfiguration { public ObjectMapper objectMapper() { // create the object mapper return new ObjectMapper(); } + + @Bean + public JwtManager jwtManager(final SettingsManager settingsManager) { + return new DefaultJwtManager(settingsManager); + } + + @Bean + public RequestManager requestManager(final UrlManager urlManager, final JwtManager jwtManager, + final SettingsManager settingsManager) { + return new DefaultRequestManager(urlManager, jwtManager, settingsManager); + } + } From 2e55bf1cfc2fbb27fae876c8a35f2dded6e7890e Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:45:37 +0300 Subject: [PATCH 005/331] add: docservice.properties file --- .../java-spring/src/main/resources/docservice.properties | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 web/documentserver-example/java-spring/src/main/resources/docservice.properties diff --git a/web/documentserver-example/java-spring/src/main/resources/docservice.properties b/web/documentserver-example/java-spring/src/main/resources/docservice.properties new file mode 100644 index 00000000..7ef02c92 --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/resources/docservice.properties @@ -0,0 +1,3 @@ +docservice.url=http://documentserver/ +docservice.security.key= + From 892d390fff965b7a966f96abe6455b8bf107c69d Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:46:05 +0300 Subject: [PATCH 006/331] add: method getCurrentUser to UserServices --- .../integration/services/UserServices.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/services/UserServices.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/services/UserServices.java index 13f76b70..f576609b 100755 --- a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/services/UserServices.java +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/services/UserServices.java @@ -24,7 +24,11 @@ import com.onlyoffice.integration.entities.User; import com.onlyoffice.integration.repositories.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Optional; @@ -92,4 +96,29 @@ public class UserServices { return newUser; } + + public User getCurrentUser() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) + .getRequest(); + + Cookie[] cookies = request.getCookies(); + + String uid = null; + + if (cookies != null) { + for (Cookie cookie : cookies) { + if (cookie.getName().equals("uid")) { + uid = cookie.getValue(); + } + } + } + + if (uid == null || uid.isEmpty()) { + return null; + } + + Optional optionalUser = this.findUserById(Integer.parseInt(uid)); + + return optionalUser.get(); + } } From b9137b1d86f5a963a946e5c74471fe27bb1c1939 Mon Sep 17 00:00:00 2001 From: Aleksandr Fedorov Date: Wed, 13 Dec 2023 14:46:29 +0300 Subject: [PATCH 007/331] add: sdk service (ConfigService) --- .../sdk/service/ConfigService.java | 27 ++ .../sdk/service/ConfigServiceImpl.java | 364 ++++++++++++++++++ 2 files changed, 391 insertions(+) create mode 100644 web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigService.java create mode 100644 web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigServiceImpl.java diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigService.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigService.java new file mode 100644 index 00000000..2b7a6e2b --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigService.java @@ -0,0 +1,27 @@ +/** + * + * (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 com.onlyoffice.integration.sdk.service; + +import com.onlyoffice.integration.documentserver.models.enums.Action; +import com.onlyoffice.model.documenteditor.Config; +import com.onlyoffice.model.documenteditor.config.document.Type; + +public interface ConfigService extends com.onlyoffice.service.documenteditor.config.ConfigService { + Config createConfig(String fileId, Action action, Type type); +} diff --git a/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigServiceImpl.java b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigServiceImpl.java new file mode 100644 index 00000000..d8033d3b --- /dev/null +++ b/web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/sdk/service/ConfigServiceImpl.java @@ -0,0 +1,364 @@ +/** + * + * (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 com.onlyoffice.integration.sdk.service; + +import com.google.gson.Gson; +import com.onlyoffice.integration.documentserver.managers.template.TemplateManager; +import com.onlyoffice.integration.documentserver.models.enums.Action; +import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder; +import com.onlyoffice.integration.entities.Group; +import com.onlyoffice.integration.entities.Permission; +import com.onlyoffice.integration.services.UserServices; +import com.onlyoffice.manager.document.DocumentManager; +import com.onlyoffice.manager.security.JwtManager; +import com.onlyoffice.manager.settings.SettingsManager; +import com.onlyoffice.manager.url.UrlManager; +import com.onlyoffice.model.common.User; +import com.onlyoffice.model.documenteditor.Config; +import com.onlyoffice.model.documenteditor.config.document.Info; +import com.onlyoffice.model.documenteditor.config.document.Permissions; +import com.onlyoffice.model.documenteditor.config.document.ReferenceData; +import com.onlyoffice.model.documenteditor.config.document.Type; +import com.onlyoffice.model.documenteditor.config.document.permissions.CommentGroups; +import com.onlyoffice.model.documenteditor.config.editorconfig.CoEditing; +import com.onlyoffice.model.documenteditor.config.editorconfig.Customization; +import com.onlyoffice.model.documenteditor.config.editorconfig.Embedded; +import com.onlyoffice.model.documenteditor.config.editorconfig.Mode; +import com.onlyoffice.model.documenteditor.config.editorconfig.Template; +import com.onlyoffice.model.documenteditor.config.editorconfig.customization.Goback; +import com.onlyoffice.model.documenteditor.config.editorconfig.embedded.Toolbar; +import com.onlyoffice.service.documenteditor.config.DefaultConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.net.InetAddress; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +@Component +public class ConfigServiceImpl extends DefaultConfigService implements ConfigService { + + @Autowired + private UserServices userService; + + @Autowired + private FileStoragePathBuilder storagePathBuilder; + + @Autowired + @Qualifier("sample") + private TemplateManager templateManager; + + + public ConfigServiceImpl(final DocumentManager documentManager, final UrlManager urlManager, + final JwtManager jwtManager, final SettingsManager settingsManager) { + super(documentManager, urlManager, jwtManager, settingsManager); + } + + @Override + public Config createConfig(final String fileId, final Action action, final Type type) { + com.onlyoffice.integration.entities.User appUser = userService.getCurrentUser(); + Action currentAction = action; + String fileName = getDocumentManager().getDocumentName(fileId); + + Boolean isEditable = getDocumentManager().isEditable(fileName); + if ((!isEditable && action.equals(Action.edit) || action.equals(Action.fillForms)) && getDocumentManager() + .isFillable(fileName)) { + isEditable = true; + currentAction = Action.fillForms; + } + + Mode mode = isEditable && !currentAction.equals(Action.view) ? Mode.EDIT : Mode.VIEW; + + Config config = super.createConfig(fileId, mode, type); + + Permissions permissions = config.getDocument().getPermissions(); + permissions = updatePermissions(permissions, action, isEditable); + + config.getDocument().setPermissions(permissions); + + if (appUser.getName().equals("Anonymous")) { + config.getEditorConfig().setCreateUrl(null); + } + + if (getSettingsManager().isSecurityEnabled()) { + config.setToken(getJwtManager().createToken(config)); + } + + return config; + } + + @Override + public ReferenceData getReferenceData(final String fileId) { + Gson gson = new Gson(); + + HashMap fileKey = new HashMap<>(); + fileKey.put("fileName", getDocumentManager().getDocumentName(fileId)); + try { + fileKey.put("userAddress", InetAddress.getLocalHost().getHostAddress()); + } catch (Exception e) { + e.printStackTrace(); + } + ReferenceData referenceData = ReferenceData.builder() + .instanceId(storagePathBuilder.getServerUrl(true)) + .fileKey(gson.toJson(fileKey)) + .build(); + + return referenceData; + } + + @Override + public Info getInfo(final String fileId) { + com.onlyoffice.integration.entities.User appUser = userService.getCurrentUser(); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US); + + return Info.builder() + .owner("Me") + .favorite(appUser.getFavorite()) + .uploaded(simpleDateFormat.format(new Date( + new File(storagePathBuilder.getFileLocation(fileId)).lastModified()) + )) + .build(); + } + + @Override + public Permissions getPermissions(final String fileId) { + com.onlyoffice.integration.entities.User appUser = userService.getCurrentUser(); + + if (appUser == null) { + return null; + } + + Permission userPermissions = appUser.getPermissions(); + + return Permissions.builder() + .chat(userPermissions.getChat()) + .comment(userPermissions.getComment()) + .commentGroups(getCommentGroups(userPermissions)) + .copy(userPermissions.getCopy()) + .download(userPermissions.getDownload()) + .edit(userPermissions.getEdit()) + .fillForms(userPermissions.getFillForms()) + .modifyContentControl(userPermissions.getModifyContentControl()) + .modifyFilter(userPermissions.getModifyFilter()) + .print(userPermissions.getPrint()) + .protect(userPermissions.getProtect()) + .review(userPermissions.getReview()) + .reviewGroups(getReviewGroups(userPermissions)) + .userInfoGroups(getUserInfoGroups(userPermissions)) + .build(); + } + + @Override + public List