feat(java): refresh file config

This commit is contained in:
sshakndr
2024-12-12 13:12:58 +07:00
parent bf9c1dc36c
commit 3e4b1b509b
5 changed files with 72 additions and 1 deletions

View File

@ -20,6 +20,8 @@ package controllers;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import entities.FileModel;
import entities.FileType;
import entities.User;
import helpers.ConfigManager;
@ -143,6 +145,9 @@ public class IndexServlet extends HttpServlet {
case "formats":
formats(request, response, writer);
break;
case "config":
config(request, response, writer);
break;
default:
break;
}
@ -1074,6 +1079,57 @@ public class IndexServlet extends HttpServlet {
writer.write(gson.toJson(data));
}
private static void config(final HttpServletRequest request,
final HttpServletResponse response,
final PrintWriter writer) {
try {
String fileName = FileUtility.getFileName(request.getParameter("fileName"));
String permissions = FileUtility.getFileName(request.getParameter("permissions"));
Boolean directUrl = request.getParameter("directUrl").toLowerCase() == "true";
if (!new File(DocumentManager.storagePath(fileName, null)).exists()) {
throw(new Exception("File not found"));
}
CookieManager cm = new CookieManager(request);
User user = Users.getUser(cm.getCookie("uid"));
Gson gson = new Gson();
Map<String, Object> document = new HashMap<>();
document.put("title", fileName);
document.put("key", ServiceConverter
.generateRevisionId(DocumentManager
.curUserHostAddress(null) + "/" + fileName + "/"
+ Long.toString(new File(DocumentManager.storagePath(fileName, null))
.lastModified())));
document.put("url", DocumentManager.getDownloadUrl(fileName, true));
document.put("referenceData", new FileModel.ReferenceData(
fileName, DocumentManager.curUserHostAddress(null), user));
document.put("permissions", gson.fromJson(permissions, new TypeToken<Map<String, Object>>() { }.getType()));
if (directUrl) {
document.put("directUrl", DocumentManager.getDownloadUrl(fileName, false));
}
Map<String, Object> editorConfig = new HashMap<>();
editorConfig.put("mode", "edit");
editorConfig.put("callbackUrl", DocumentManager.getCallback(fileName));
Map<String, Object> config = new HashMap<>();
config.put("document", document);
config.put("editorConfig", editorConfig);
if (DocumentManager.tokenEnabled()) {
config.put("token", DocumentManager.createToken(config));
}
writer.write(gson.toJson(config));
} catch (Exception ex) {
JSONObject responseBody = new JSONObject();
responseBody.put("error", ex.getMessage());
String responseContent = responseBody.toJSONString();
writer.write(responseContent);
}
}
// process get request
@Override
protected void doGet(final HttpServletRequest request,

View File

@ -375,7 +375,7 @@ public class FileModel {
}
}
public class ReferenceData {
public static class ReferenceData {
private final String instanceId;
private final Map<String, String> fileKey;
public ReferenceData(final String fileName, final String curUserHostAddress, final User user) {

View File

@ -84,6 +84,7 @@ public final class Users {
add("Can't protect file");
add("View file without collaboration");
add("Cant submit forms");
add("Can't refresh outdated file");
}};
private static List<User> users = new ArrayList<User>() {{

View File

@ -170,6 +170,18 @@
}
};
var onRequestRefreshFile = function(event) {
let xhr = new XMLHttpRequest();
xhr.open("GET", "IndexServlet?type=config&fileName=" + encodeURIComponent(config.document.title) +
"&directUrl=" + !!config.document.directUrl +
"&permissions=" + encodeURIComponent(JSON.stringify(config.document.permissions)));
xhr.send();
xhr.onload = function () {
innerAlert(xhr.responseText);
docEditor.refreshFile(JSON.parse(xhr.responseText));
};
};
var onRequestOpen = function(event) { // user open external data source
innerAlert("onRequestOpen");
var windowName = event.data.windowName;
@ -366,6 +378,7 @@
};
if (config.editorConfig.user.id) {
config.events['onRequestRefreshFile'] = onRequestRefreshFile;
config.events['onRequestClose'] = onRequestClose;
// add mentions for not anonymous users
config.events['onRequestUsers'] = onRequestUsers;