[gnome-shell/wip/lockdown-show-password: 2321/2321] shellEntry: Support lockdown of "Show Text" menu in password entries




commit 92c4283c0e7a1328e42dce488362b05dc213bf0d
Author: Ray Strode <rstrode redhat com>
Date:   Wed Aug 21 15:06:46 2019 -0400

    shellEntry: Support lockdown of "Show Text" menu in password entries
    
    Some deployments require being able to prevent users from showing
    the password they're currently typing.
    
    This commit adds support for that kind of lockdown.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/687

 js/ui/shellEntry.js | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js
index 38f5a836d2..0bf5d7e80c 100644
--- a/js/ui/shellEntry.js
+++ b/js/ui/shellEntry.js
@@ -1,17 +1,24 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported addContextMenu CapsLockWarning */
 
-const { Clutter, GObject, Pango, Shell, St } = imports.gi;
+const { Clutter, Gio, GObject, Pango, Shell, St } = imports.gi;
 
 const BoxPointer = imports.ui.boxpointer;
 const Main = imports.ui.main;
 const Params = imports.misc.params;
 const PopupMenu = imports.ui.popupMenu;
 
+const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
+const DISABLE_SHOW_PASSWORD_KEY = 'disable-show-password';
+
 var EntryMenu = class extends PopupMenu.PopupMenu {
     constructor(entry) {
         super(entry, 0, St.Side.TOP);
 
+        this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
+        this._lockdownSettings.connect(`changed::${DISABLE_SHOW_PASSWORD_KEY}`,
+            this._applyLockdownSettings.bind(this));
+
         this._entry = entry;
         this._clipboard = St.Clipboard.get_default();
 
@@ -39,6 +46,20 @@ var EntryMenu = class extends PopupMenu.PopupMenu {
         item.connect('activate', this._onPasswordActivated.bind(this));
         this.addMenuItem(item);
         this._passwordItem = item;
+        this._applyLockdownSettings();
+    }
+
+    _applyLockdownSettings() {
+        if (!this._passwordItem)
+            return;
+
+        let passwordDisabled = this._lockdownSettings.get_boolean(DISABLE_SHOW_PASSWORD_KEY);
+
+        this._passwordItem.visible = !passwordDisabled;
+        this._entry.show_peek_icon = !passwordDisabled;
+
+        if (passwordDisabled)
+            this._entry.password_visible = false;
     }
 
     open(animate) {


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