all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-installer] answer: perform basic input validation for keyboard
@ 2024-04-24  8:48 Christian Ebner
  2024-04-24  9:20 ` Stoiko Ivanov
  2024-04-24  9:34 ` [pve-devel] applied: " Thomas Lamprecht
  0 siblings, 2 replies; 4+ messages in thread
From: Christian Ebner @ 2024-04-24  8:48 UTC (permalink / raw)
  To: pve-devel

Currently it is possible to validate and create an iso with an
invalid keyboad layout, only failing later during installation.

Add a basic check for correct keyboard layout by defining an enum
with allowed variants.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
 proxmox-auto-installer/src/answer.rs | 39 +++++++++++++++++++++++++++-
 proxmox-auto-installer/src/utils.rs  |  8 ++++--
 2 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/proxmox-auto-installer/src/answer.rs b/proxmox-auto-installer/src/answer.rs
index a6cf8b7..af7485a 100644
--- a/proxmox-auto-installer/src/answer.rs
+++ b/proxmox-auto-installer/src/answer.rs
@@ -23,7 +23,7 @@ pub struct Answer {
 pub struct Global {
     pub country: String,
     pub fqdn: Fqdn,
-    pub keyboard: String,
+    pub keyboard: KeyboardLayout,
     pub mailto: String,
     pub timezone: String,
     pub root_password: String,
@@ -270,3 +270,40 @@ pub struct BtrfsOptions {
     pub hdsize: Option<f64>,
     pub raid: Option<BtrfsRaidLevel>,
 }
+
+#[derive(Clone, Deserialize, Serialize, Debug, PartialEq)]
+#[serde(rename_all = "kebab-case", deny_unknown_fields)]
+pub enum KeyboardLayout {
+    De,
+    DeCh,
+    Dk,
+    EnGb,
+    EnUs,
+    Es,
+    Fi,
+    Fr,
+    FrBe,
+    FrCa,
+    FrCh,
+    Hu,
+    Is,
+    It,
+    Jp,
+    Lt,
+    Mk,
+    Nl,
+    No,
+    Pl,
+    Pt,
+    PtBr,
+    Se,
+    Si,
+    Tr,
+}
+
+impl std::fmt::Display for KeyboardLayout {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        let keyboard_layout = serde_json::to_value(self).unwrap().to_string();
+        write!(f, "{}", keyboard_layout.trim_matches('\"'))
+    }
+}
diff --git a/proxmox-auto-installer/src/utils.rs b/proxmox-auto-installer/src/utils.rs
index 7e1366c..202ad41 100644
--- a/proxmox-auto-installer/src/utils.rs
+++ b/proxmox-auto-installer/src/utils.rs
@@ -281,7 +281,11 @@ pub fn verify_locale_settings(answer: &Answer, locales: &LocaleInfo) -> Result<(
     {
         bail!("country code '{}' is not valid", &answer.global.country);
     }
-    if !locales.kmap.keys().any(|i| i == &answer.global.keyboard) {
+    if !locales
+        .kmap
+        .keys()
+        .any(|i| i == &answer.global.keyboard.to_string())
+    {
         bail!("keyboard layout '{}' is not valid", &answer.global.keyboard);
     }
 
@@ -328,7 +332,7 @@ pub fn parse_answer(
 
         country: answer.global.country.clone(),
         timezone: answer.global.timezone.clone(),
-        keymap: answer.global.keyboard.clone(),
+        keymap: answer.global.keyboard.to_string(),
 
         password: answer.global.root_password.clone(),
         mailto: answer.global.mailto.clone(),
-- 
2.39.2



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


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-04-24  9:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-24  8:48 [pve-devel] [PATCH pve-installer] answer: perform basic input validation for keyboard Christian Ebner
2024-04-24  9:20 ` Stoiko Ivanov
2024-04-24  9:26   ` Christian Ebner
2024-04-24  9:34 ` [pve-devel] applied: " Thomas Lamprecht

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