Răsfoiți Sursa

fix: do not enforce updater's `pubkey` field when `active` is false

Lucas Nogueira 3 ani în urmă
părinte
comite
ec8661f18e
1 a modificat fișierele cu 33 adăugiri și 1 ștergeri
  1. 33 1
      core/tauri-utils/src/config.rs

+ 33 - 1
core/tauri-utils/src/config.rs

@@ -1454,7 +1454,7 @@ impl<'de> Deserialize<'de> for UpdaterEndpoint {
 
 /// The Updater configuration object.
 #[skip_serializing_none]
-#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
+#[derive(Debug, PartialEq, Clone, Serialize)]
 #[cfg_attr(feature = "schema", derive(JsonSchema))]
 #[serde(rename_all = "camelCase", deny_unknown_fields)]
 pub struct UpdaterConfig {
@@ -1470,6 +1470,38 @@ pub struct UpdaterConfig {
   pub pubkey: String,
 }
 
+impl<'de> Deserialize<'de> for UpdaterConfig {
+  fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+  where
+    D: Deserializer<'de>,
+  {
+    #[derive(Deserialize)]
+    struct InnerUpdaterConfig {
+      #[serde(default)]
+      active: bool,
+      #[serde(default = "default_dialog")]
+      dialog: bool,
+      endpoints: Option<Vec<UpdaterEndpoint>>,
+      pubkey: Option<String>,
+    }
+
+    let config = InnerUpdaterConfig::deserialize(deserializer)?;
+
+    if config.active && config.pubkey.is_none() {
+      return Err(DeError::custom(
+        "The updater `pubkey` configuration is required.",
+      ));
+    }
+
+    Ok(UpdaterConfig {
+      active: config.active,
+      dialog: config.dialog,
+      endpoints: config.endpoints,
+      pubkey: config.pubkey.unwrap_or_else(String::new),
+    })
+  }
+}
+
 impl Default for UpdaterConfig {
   fn default() -> Self {
     Self {