From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id D92EE1FF13B for ; Wed, 11 Feb 2026 16:19:58 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 08C183187D; Wed, 11 Feb 2026 16:20:43 +0100 (CET) From: Shan Shaji To: pdm-devel@lists.proxmox.com Subject: [PATCH proxmox v3 1/1] pve-api-types: generate missing `delete_token` method Date: Wed, 11 Feb 2026 16:20:16 +0100 Message-ID: <20260211152016.445817-8-s.shaji@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260211152016.445817-1-s.shaji@proxmox.com> References: <20260211152016.445817-1-s.shaji@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1770823151973 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.111 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: I3PQ4ZFJJY2GT7WXTJNOWCHNLS3M7POY X-Message-ID-Hash: I3PQ4ZFJJY2GT7WXTJNOWCHNLS3M7POY X-MailFrom: s.shaji@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Removing a remote node from PDM and adding it again is prevented by the already existing token. Inorder to allow deletion of token from PVE generate the endpoint that is necessary to call from PDM. Signed-off-by: Shan Shaji --- changes since v2: - Regenerate `delete_token` method. The new change wraps the params with percent_encode function. pve-api-types/generate.pl | 1 + pve-api-types/src/generated/code.rs | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/pve-api-types/generate.pl b/pve-api-types/generate.pl index e5c5d051..da8c2d47 100755 --- a/pve-api-types/generate.pl +++ b/pve-api-types/generate.pl @@ -362,6 +362,7 @@ Schema2Rust::derive('ListRealm' => 'Clone', 'PartialEq'); # api(GET => '/access/users/{userid}', 'get_user', 'return-name' => 'User'); api(POST => '/access/users/{userid}/token/{tokenid}', 'create_token', 'param-name' => 'CreateToken'); Schema2Rust::derive('CreateToken' => 'Default'); +api(DELETE => '/access/users/{userid}/token/{tokenid}', 'delete_token'); api(GET => '/nodes/{node}/apt/update', 'list_available_updates', 'return-name' => 'AptUpdateInfo'); api(POST => '/nodes/{node}/apt/update', 'update_apt_database', 'output-type' => 'PveUpid', 'param-name' => 'AptUpdateParams'); diff --git a/pve-api-types/src/generated/code.rs b/pve-api-types/src/generated/code.rs index bdf93884..c12f6bbe 100644 --- a/pve-api-types/src/generated/code.rs +++ b/pve-api-types/src/generated/code.rs @@ -634,6 +634,11 @@ pub trait PveClient { )) } + /// Remove API token for a specific user. + async fn delete_token(&self, userid: &str, tokenid: &str) -> Result<(), Error> { + Err(Error::Other("delete_token not implemented")) + } + /// Get APT repository information. async fn get_apt_repositories(&self, node: &str) -> Result { Err(Error::Other("get_apt_repositories not implemented")) @@ -1802,6 +1807,16 @@ where self.0.delete(url).await?.nodata() } + /// Remove API token for a specific user. + async fn delete_token(&self, userid: &str, tokenid: &str) -> Result<(), Error> { + let url = &format!( + "/api2/extjs/access/users/{}/token/{}", + percent_encode(userid.as_bytes(), percent_encoding::NON_ALPHANUMERIC), + percent_encode(tokenid.as_bytes(), percent_encoding::NON_ALPHANUMERIC) + ); + self.0.delete(url).await?.nodata() + } + /// Get APT repository information. async fn get_apt_repositories(&self, node: &str) -> Result { let url = &format!( -- 2.47.3