From 5c736faf099fddd76f3293bda8719842b72b4a06 Mon Sep 17 00:00:00 2001 From: Michael Lipp Date: Fri, 13 Sep 2024 10:17:20 +0000 Subject: [PATCH] Add "delete-this-file=1" in connection file by default. --- .../manager/DisplaySecretMonitor.java | 6 +++- .../vmoperator/manager/Reconciler.java | 3 -- .../jdrupes/vmoperator/vmviewer/VmViewer.java | 33 ++++++++++++++++--- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/DisplaySecretMonitor.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/DisplaySecretMonitor.java index 1ea766c..c113253 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/DisplaySecretMonitor.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/DisplaySecretMonitor.java @@ -55,7 +55,11 @@ import org.jgrapes.util.events.ConfigurationUpdate; import org.jose4j.base64url.Base64; /** - * Watches for changes of display secrets. + * Watches for changes of display secrets. The component supports the + * following configuration properties: + * + * * `passwordValidity`: the validity of the random password in seconds. + * Used to calculate the password expiry time in the generated secret. */ @SuppressWarnings({ "PMD.DataflowAnomalyAnalysis", "PMD.TooManyStaticImports" }) public class DisplaySecretMonitor diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java index 1984f89..deb8680 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java @@ -20,17 +20,14 @@ package org.jdrupes.vmoperator.manager; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import freemarker.core.ParseException; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapperBuilder; -import freemarker.template.MalformedTemplateNameException; import freemarker.template.SimpleNumber; import freemarker.template.TemplateException; import freemarker.template.TemplateExceptionHandler; import freemarker.template.TemplateHashModel; import freemarker.template.TemplateMethodModelEx; import freemarker.template.TemplateModelException; -import freemarker.template.TemplateNotFoundException; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.util.generic.dynamic.DynamicKubernetesObject; diff --git a/org.jdrupes.vmoperator.vmviewer/src/org/jdrupes/vmoperator/vmviewer/VmViewer.java b/org.jdrupes.vmoperator.vmviewer/src/org/jdrupes/vmoperator/vmviewer/VmViewer.java index cae53b0..e1e5c6d 100644 --- a/org.jdrupes.vmoperator.vmviewer/src/org/jdrupes/vmoperator/vmviewer/VmViewer.java +++ b/org.jdrupes.vmoperator.vmviewer/src/org/jdrupes/vmoperator/vmviewer/VmViewer.java @@ -38,6 +38,7 @@ import java.net.UnknownHostException; import java.time.Duration; import java.util.Base64; import java.util.Collections; +import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -92,7 +93,21 @@ import org.jgrapes.webconsole.base.events.UpdateConletType; import org.jgrapes.webconsole.base.freemarker.FreeMarkerConlet; /** - * The Class VmViewer. + * The Class VmViewer. The component supports the following + * configuration properties: + * + * * `displayResource`: a map with the following entries: + * - `preferredIpVersion`: `ipv4` or `ipv6` (default: `ipv4`). + * Determines the IP addresses uses in the generated + * connection file. + * * `deleteConnectionFile`: `true` or `false` (default: `true`). + * If `true`, the downloaded connection file will be deleted by + * the remote viewer when opened. + * * `syncPreviewsFor`: a list objects with either property `user` or + * `role` and the associated name (default: `[]`). + * The remote viewer will synchronize the previews for the specified + * users and roles. + * */ @SuppressWarnings({ "PMD.DataflowAnomalyAnalysis", "PMD.ExcessiveImports", "PMD.CouplingBetweenObjects", "PMD.GodClass", "PMD.TooManyMethods" }) @@ -114,6 +129,7 @@ public class VmViewer extends FreeMarkerConlet { private Class preferredIpVersion = Inet4Address.class; private final Set syncUsers = new HashSet<>(); private final Set syncRoles = new HashSet<>(); + private boolean deleteConnectionFile = true; /** * The periodically generated update event. @@ -133,8 +149,8 @@ public class VmViewer extends FreeMarkerConlet { } /** - * Configure the component. - * + * Configure the component. + * * @param event the event */ @SuppressWarnings("unchecked") @@ -155,6 +171,12 @@ public class VmViewer extends FreeMarkerConlet { break; } + // Delete connection file + deleteConnectionFile + = Optional.ofNullable(c.get("deleteConnectionFile")) + .filter(v -> v instanceof String).map(v -> (String) v) + .map(Boolean::parseBoolean).orElse(true); + // Sync for (var entry : (List>) c.getOrDefault( "syncPreviewsFor", Collections.emptyList())) { @@ -317,7 +339,7 @@ public class VmViewer extends FreeMarkerConlet { ConsoleConnection channel, String conletId, ViewerModel model) throws Exception { ResourceBundle resourceBundle = resourceBundle(channel.locale()); - Set renderedAs = new HashSet<>(); + Set renderedAs = EnumSet.noneOf(RenderMode.class); if (event.renderAs().contains(RenderMode.Preview)) { channel.associated(PENDING, Event.class) .ifPresent(e -> { @@ -564,6 +586,9 @@ public class VmViewer extends FreeMarkerConlet { data.append("proxy=").append(u).append('\n'); } }); + if (deleteConnectionFile) { + data.append("delete-this-file=1\n"); + } connection.respond(new NotifyConletView(type(), model.getConletId(), "openConsole", "application/x-virt-viewer", Base64.getEncoder().encodeToString(data.toString().getBytes())));