diff --git a/src/main/java/com/uid2/admin/vertx/service/EncryptedFilesSyncService.java b/src/main/java/com/uid2/admin/vertx/service/EncryptedFilesSyncService.java
index 3c5a6624..5a736873 100644
--- a/src/main/java/com/uid2/admin/vertx/service/EncryptedFilesSyncService.java
+++ b/src/main/java/com/uid2/admin/vertx/service/EncryptedFilesSyncService.java
@@ -3,6 +3,7 @@
import com.uid2.admin.auth.AdminAuthMiddleware;
import com.uid2.admin.job.JobDispatcher;
import com.uid2.admin.job.jobsync.EncryptedFilesSyncJob;
+import com.uid2.admin.vertx.Endpoints;
import com.uid2.admin.vertx.WriteLock;
import com.uid2.shared.auth.Role;
import com.uid2.shared.store.reader.RotatingCloudEncryptionKeyProvider;
@@ -38,14 +39,14 @@ public EncryptedFilesSyncService(
@Override
public void setupRoutes(Router router) {
- router.post("/api/encrypted-files/refresh").blockingHandler(auth.handle((ctx) -> {
+ router.post(Endpoints.API_ENCRYPTED_FILES_REFRESH.toString()).blockingHandler(auth.handle((ctx) -> {
synchronized (writeLock) {
this.handleEncryptedFileSync(ctx);
}
},
Role.MAINTAINER, Role.PRIVATE_OPERATOR_SYNC));
- router.post("/api/encrypted-files/syncNow").blockingHandler(auth.handle(
+ router.post(Endpoints.API_ENCRYPTED_FILES_SYNC_NOW.toString()).blockingHandler(auth.handle(
this::handleEncryptedFileSyncNow,
Role.MAINTAINER, Role.PRIVATE_OPERATOR_SYNC));
}
diff --git a/webroot/adm/cloud-encryption-key.html b/webroot/adm/cloud-encryption-key.html
index cc4e9ecf..a4812e87 100644
--- a/webroot/adm/cloud-encryption-key.html
+++ b/webroot/adm/cloud-encryption-key.html
@@ -22,6 +22,8 @@
Operations
@@ -46,7 +48,21 @@ Output
{
name: "Site",
formatter: (cell, row) => {
- return gridjs.html(`${cell.siteId} - ${cell.siteName}`)
+ return gridjs.html(`${formatSite(cell)}`)
+ },
+ sort: {
+ compare: (a, b) => {
+ const fullA = formatSite(a);
+ const fullB = formatSite(b);
+
+ if (fullA > fullB) {
+ return 1;
+ } else if (fullA < fullB) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
}
},
{
@@ -73,7 +89,7 @@ Output
if (cellIndex === 0) {
return cell;
} else if (cellIndex === 1) {
- return `${cell.siteId} - ${cell.siteName}`;
+ return formatSite(cell);
}
}
},
@@ -97,7 +113,11 @@ Output
timeZoneName: "short"
};
return date.toLocaleString("en-US", options);
- }
+ };
+
+ const formatSite = (site) => {
+ return `${site.siteId} - ${site.siteName}`;
+ };
const updateGrid = (grid, data) => {
const groupedData = data.cloudEncryptionKeys.reduce((acc, key) => {
@@ -123,36 +143,49 @@ Output
grid
.updateConfig({ data: gridData })
.forceRender();
- }
+ };
const clearGrid = (grid) => {
grid
.updateConfig({ data: [] })
.forceRender();
- }
+ };
+
+ const doList = () => {
+ clearGrid(grid);
+ doApiCallWithCallback("GET", "/api/site/list", (text) => {
+ const sites = JSON.parse(text);
+ const siteDict = sites.reduce((acc, site) => {
+ acc[site.id] = site.name;
+ return acc;
+ }, {});
+
+ doApiCallWithCallback("GET", "/api/cloud-encryption-key/list", (text) => {
+ const data = JSON.parse(text);
+ data.cloudEncryptionKeys.forEach((key) => {
+ key.siteName = !siteDict[key.siteId] ? "Unknown site" : siteDict[key.siteId]
+ });
+ updateGrid(grid, data);
+ }, errorCallback);
+ }, errorCallback);
+ };
- $(document).ready(function () {
- $("#doMeta").on("click", function () {
+ $(document).ready(() => {
+ $("#doMeta").on("click", () => {
doApiCall("GET", "/api/cloud-encryption-key/metadata", "#standardOutput", "#errorOutput");
});
- $("#doList").on("click", function () {
- clearGrid(grid);
- doApiCallWithCallback("GET", "/api/site/list", (text) => {
- const sites = JSON.parse(text);
- const siteDict = sites.reduce((acc, site) => {
- acc[site.id] = site.name;
- return acc;
- }, {});
-
- doApiCallWithCallback("GET", "/api/cloud-encryption-key/list", (text) => {
- const data = JSON.parse(text);
- data.cloudEncryptionKeys.forEach((key) => {
- key.siteName = !siteDict[key.siteId] ? "Unknown site" : siteDict[key.siteId]
- });
- updateGrid(grid, data);
- }, errorCallback);
- }, errorCallback);
+ $("#doList").on("click", () => {
+ doList();
+ });
+
+ $("#doRotate").on("click", () => {
+ doApiCall("POST", "/api/cloud-encryption-key/rotate", "#standardOutput", "#errorOutput");
+ doList();
+ });
+
+ $("#doEncrypt").on("click", () => {
+ doApiCall("POST", "/api/encrypted-files/syncNow", "#standardOutput", "#errorOutput");
});
});