public inbox for pdm-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Shannon Sterz <s.sterz@proxmox.com>
To: pdm-devel@lists.proxmox.com
Subject: [PATCH yew-comp 2/3] auth_view: enable editing of default realms
Date: Thu, 18 Jun 2026 12:21:25 +0200	[thread overview]
Message-ID: <20260618102126.177217-3-s.sterz@proxmox.com> (raw)
In-Reply-To: <20260618102126.177217-1-s.sterz@proxmox.com>

so users can set custom comments and mark them as default realm if
required.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 src/auth_view.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/utils/mod.rs |  4 ++--
 2 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/src/auth_view.rs b/src/auth_view.rs
index 9a06979..8be682a 100644
--- a/src/auth_view.rs
+++ b/src/auth_view.rs
@@ -5,7 +5,7 @@ use std::rc::Rc;
 use anyhow::Error;
 
 use proxmox_client::ApiResponseData;
-use pwt::widget::form::{Checkbox, FormContext, TristateBoolean};
+use pwt::widget::form::{Checkbox, DisplayField, Field, FormContext, TristateBoolean};
 use serde_json::Value;
 use yew::html::IntoPropValue;
 use yew::virtual_dom::{VComp, VNode};
@@ -19,6 +19,7 @@ use pwt::widget::{Button, Container, Fa, InputPanel, Toolbar};
 
 use pwt_macros::builder;
 
+use crate::form::delete_empty_values;
 use crate::{
     AuthEditLDAP, AuthEditOpenID, EditWindow, LoadableComponent, LoadableComponentContext,
     LoadableComponentMaster, LoadableComponentScope, LoadableComponentScopeExt,
@@ -37,6 +38,12 @@ pub struct AuthView {
     /// The base url for
     pub base_url: AttrValue,
 
+    /// The base URL to edit the default realms (pam, pve, pdm, pbs etc.). Specify `None` if
+    /// editing the default realms is not supported.
+    #[prop_or(Some("/config/access/".into()))]
+    #[builder(IntoPropValue, into_prop_value)]
+    pub edit_default_realms_base_url: Option<AttrValue>,
+
     /// Allow to add/edit OpenID entries
     #[builder(IntoPropValue, into_prop_value)]
     #[prop_or_default]
@@ -73,6 +80,7 @@ pub enum ViewState {
     EditOpenID(AttrValue),
     EditLDAP(AttrValue),
     EditAd(AttrValue),
+    EditDefaultRealm(AttrValue),
     Sync(BasicRealmInfo),
 }
 
@@ -164,6 +172,33 @@ async fn load_realm(url: impl Into<String>) -> Result<ApiResponseData<Value>, Er
     Ok(response)
 }
 
+fn edit_default_realm(realm: AttrValue, url: AttrValue) -> EditWindow {
+    let url = format!("{url}/{realm}");
+    EditWindow::new(tr!("Edit: {realm}", realm))
+        .loader(url.clone())
+        .renderer({
+            move |_form_ctx: &FormContext| {
+                InputPanel::new()
+                    .padding(4)
+                    .with_field(
+                        tr!("Realm"),
+                        DisplayField::new().name("realm").submit(false),
+                    )
+                    .with_right_field(tr!("Default Realm"), Checkbox::new().name("default"))
+                    .with_large_field(tr!("Comment"), Field::new().name("comment"))
+                    .into()
+            }
+        })
+        .on_submit(move |form_ctx: FormContext| {
+            let url = url.clone();
+            async move {
+                let data = form_ctx.get_submit_data();
+                let data = delete_empty_values(&data, &["comment"], true);
+                crate::http_put(&url, Some(data)).await
+            }
+        })
+}
+
 impl ProxmoxAuthView {
     fn get_selected_record(&self) -> Option<BasicRealmInfo> {
         let selected_key = self.selection.selected_key();
@@ -254,6 +289,11 @@ impl LoadableComponent for ProxmoxAuthView {
                     "ad" if props.ad_base_url.is_some() => {
                         Some(ViewState::EditAd(info.realm.into()))
                     }
+                    "pam" | "pbs" | "pdm" | "pve"
+                        if props.edit_default_realms_base_url.is_some() =>
+                    {
+                        Some(ViewState::EditDefaultRealm(info.realm.into()))
+                    }
                     _ => return true,
                 };
 
@@ -285,7 +325,7 @@ impl LoadableComponent for ProxmoxAuthView {
             if let Some(auth_info) = crate::utils::get_auth_domain_info(&realm_info.ty) {
                 sync_disabled = !auth_info.sync;
                 remove_disabled = !auth_info.add;
-                edit_disabled = !auth_info.add;
+                edit_disabled = !auth_info.edit;
             }
         }
 
@@ -408,6 +448,14 @@ impl LoadableComponent for ProxmoxAuthView {
                     .on_close(ctx.link().change_view_callback(|_| None))
                     .into(),
             ),
+            ViewState::EditDefaultRealm(realm) => Some(
+                edit_default_realm(
+                    realm.clone(),
+                    props.edit_default_realms_base_url.clone().unwrap(),
+                )
+                .on_done(ctx.link().change_view_callback(|_| None))
+                .into(),
+            ),
             ViewState::Sync(realm) => {
                 let link = ctx.link().clone();
                 let url = format!(
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
index c007286..25fd414 100644
--- a/src/utils/mod.rs
+++ b/src/utils/mod.rs
@@ -172,7 +172,7 @@ pub fn get_auth_domain_info(ty: &str) -> Option<AuthDomainInfo> {
             ty: ty.to_string(),
             //description: tr!("Linux PAM"),
             add: false,
-            edit: false,
+            edit: true,
             tfa: true,
             pwchange: false,
             sync: false,
@@ -184,7 +184,7 @@ pub fn get_auth_domain_info(ty: &str) -> Option<AuthDomainInfo> {
             ty: ty.to_string(),
             //description: tr!("Proxmox VE authentication server"),
             add: false,
-            edit: false,
+            edit: true,
             tfa: true,
             pwchange: true,
             sync: false,
-- 
2.47.3





  parent reply	other threads:[~2026-06-18 10:21 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-18 10:21 [PATCH datacenter-manager/yew-comp 0/3] Allow Editing of Default Realms in PDM Shannon Sterz
2026-06-18 10:21 ` [PATCH datacenter-manager 1/3] server: api: access: add endpoints for configuring pdm and pam realms Shannon Sterz
2026-06-18 10:21 ` Shannon Sterz [this message]
2026-06-18 10:21 ` [PATCH yew-comp 3/3] auth_view: clarify the documentation of pre-existing properties Shannon Sterz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260618102126.177217-3-s.sterz@proxmox.com \
    --to=s.sterz@proxmox.com \
    --cc=pdm-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal