[gnome-boxes/check-whether-express-install-needs-password: 2/2] unattended-installer/setup-box: Check libosinfo for optional passwords



commit 9746c634d4c4a6ec4fcdb1cf61112815d2347d68
Author: Felipe Borges <felipeborges gnome org>
Date:   Wed Feb 20 17:20:02 2019 +0100

    unattended-installer/setup-box: Check libosinfo for optional passwords
    
    libosinfo is able to tell us whether a given OS needs a password
    for its install scripts. This way we can guarantee that users won't
    perform Express Installations in which they will be locked out of
    their session for not knowing the password created at installation.
    
    Fixes #99

 data/ui/unattended-setup-box.ui |  1 +
 src/unattended-installer.vala   | 14 ++++++++++++++
 src/unattended-setup-box.vala   | 21 +++++++++++++++++++++
 3 files changed, 36 insertions(+)
---
diff --git a/data/ui/unattended-setup-box.ui b/data/ui/unattended-setup-box.ui
index 3d11722f..fab22ebf 100644
--- a/data/ui/unattended-setup-box.ui
+++ b/data/ui/unattended-setup-box.ui
@@ -192,6 +192,7 @@
                     <signal name="changed" handler="on_password_entry_changed"/>
                     <signal name="focus-out-event" handler="on_password_entry_focus_out"/>
                     <signal name="activate" handler="on_password_entry_activated"/>
+                    <signal name="notify::text" handler="on_mandatory_input_changed"/>
                   </object>
                 </child>
               </object>
diff --git a/src/unattended-installer.vala b/src/unattended-installer.vala
index 7de5c622..62f8c690 100644
--- a/src/unattended-installer.vala
+++ b/src/unattended-installer.vala
@@ -27,6 +27,20 @@
         }
     }
 
+    public bool needs_password {
+        get {
+            foreach (var s in scripts.get_elements ()) {
+                var script = s as InstallScript;
+
+                var param = script.get_config_param (INSTALL_CONFIG_PROP_USER_PASSWORD);
+                if (param == null || param.is_optional ())
+                    return false;
+            }
+
+            return true;
+        }
+    }
+
     public UnattendedSetupBox setup_box;
 
     public File? disk_file;           // Used for installer scripts, user avatar and pre-installation drivers
diff --git a/src/unattended-setup-box.vala b/src/unattended-setup-box.vala
index 1ecfc086..a6cf96b5 100644
--- a/src/unattended-setup-box.vala
+++ b/src/unattended-setup-box.vala
@@ -11,6 +11,7 @@
     public bool ready_for_express {
         get {
             return username != "" &&
+                   !needs_password &&
                    (product_key_format == null ||
                     product_key_entry.text_length == product_key_format.length);
         }
@@ -72,6 +73,25 @@
 
     public signal void user_wants_to_create (); // User wants to already create the VM
 
+    private bool _needs_password;
+    private bool needs_password {
+        get {
+            if (password != "")
+                return false;
+
+            if (_needs_password) {
+                password_notebook.next_page ();
+                password_entry.grab_focus ();
+            }
+
+            return _needs_password;
+        }
+
+        set {
+            _needs_password = value;
+        }
+    }
+
     [GtkChild]
     private Gtk.InfoBar needs_internet_bar;
     [GtkChild]
@@ -110,6 +130,7 @@ public UnattendedSetupBox (InstallerMedia media, string? product_key_format, boo
         var msg = _("Express installation of %s requires an internet connection.").printf (media.label);
         needs_internet_label.label = msg;
         needs_internet_bar.visible = needs_internet;
+        needs_password = (media as UnattendedInstaller).needs_password;
         media_path = media.device_file;
         keyfile = new GLib.KeyFile ();
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]