all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pdm-devel] [PATCH datacenter-manager] ui: wizzard/edit remote: validate remote host and port
@ 2025-12-16 15:37 Shannon Sterz
  0 siblings, 0 replies; only message in thread
From: Shannon Sterz @ 2025-12-16 15:37 UTC (permalink / raw)
  To: pdm-devel

we did not validate these fields before, leading to situations where
users could enter a value with a schema here (such as "https://") that
lead to errors down the line.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
we might not want to call it a "Web UI URL" when editing a remote. a url
indicates that i should be able, for example, to copy the url from my
browser's address bar and paste it here. this isn't the case. we may
want to call it "<IP/Hostname>:Port" just like we do in the add dialog.

 lib/pdm-api-types/src/lib.rs          | 3 +++
 ui/src/remotes/edit_remote.rs         | 2 ++
 ui/src/remotes/wizard_page_connect.rs | 3 ++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/pdm-api-types/src/lib.rs b/lib/pdm-api-types/src/lib.rs
index 5daaa3f..d4cc7ef 100644
--- a/lib/pdm-api-types/src/lib.rs
+++ b/lib/pdm-api-types/src/lib.rs
@@ -137,6 +137,9 @@ pub const HOST_PORT_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&HOST_POR
 pub const HOST_OPTIONAL_PORT_FORMAT: ApiStringFormat =
     ApiStringFormat::Pattern(&HOST_OPTIONAL_PORT_REGEX);
 pub const HTTP_URL_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&HTTP_URL_REGEX);
+pub const HOST_OPTIONAL_PORT_SCHEMA: Schema = StringSchema::new("A host with an optional port.")
+    .format(&HOST_OPTIONAL_PORT_FORMAT)
+    .schema();

 pub const DAILY_DURATION_FORMAT: ApiStringFormat =
     ApiStringFormat::VerifyFn(|s| parse_daily_duration(s).map(drop));
diff --git a/ui/src/remotes/edit_remote.rs b/ui/src/remotes/edit_remote.rs
index 925d11a..1b6b580 100644
--- a/ui/src/remotes/edit_remote.rs
+++ b/ui/src/remotes/edit_remote.rs
@@ -1,6 +1,7 @@
 use std::rc::Rc;

 use anyhow::Error;
+use pdm_api_types::HOST_OPTIONAL_PORT_SCHEMA;
 use serde_json::Value;
 use yew::html::IntoEventCallback;
 use yew::virtual_dom::{VComp, VNode};
@@ -118,6 +119,7 @@ fn edit_remote_input_panel(_form_ctx: &FormContext, remote_id: &str) -> Html {
             tr!("Web UI URL"),
             Field::new()
                 .name("web-url")
+                .schema(&HOST_OPTIONAL_PORT_SCHEMA)
                 .placeholder(tr!("Use first endpoint.")),
         )
         .with_custom_child(
diff --git a/ui/src/remotes/wizard_page_connect.rs b/ui/src/remotes/wizard_page_connect.rs
index fb04f60..b850b5c 100644
--- a/ui/src/remotes/wizard_page_connect.rs
+++ b/ui/src/remotes/wizard_page_connect.rs
@@ -15,7 +15,7 @@ use pwt_macros::builder;
 use proxmox_yew_comp::{KVGrid, KVGridRow, SchemaValidation, WizardPageRenderInfo};

 use pdm_api_types::remotes::{RemoteType, TlsProbeOutcome};
-use pdm_api_types::CERT_FINGERPRINT_SHA256_SCHEMA;
+use pdm_api_types::{CERT_FINGERPRINT_SHA256_SCHEMA, HOST_OPTIONAL_PORT_SCHEMA};
 use proxmox_acme_api::CertificateInfo;

 #[derive(Clone, PartialEq, Properties)]
@@ -242,6 +242,7 @@ impl Component for PdmWizardPageConnect {
                 Field::new()
                     .name("hostname")
                     .placeholder(tr!("<IP/Hostname>:Port"))
+                    .schema(&HOST_OPTIONAL_PORT_SCHEMA)
                     .required(true),
             )
             .with_large_field(
--
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-12-16 15:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-16 15:37 [pdm-devel] [PATCH datacenter-manager] ui: wizzard/edit remote: validate remote host and port Shannon Sterz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal