From 023f4b31d994e4005a72fca8cfe012b7a80e0012 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Sun, 28 Jul 2013 17:49:50 -0400 Subject: [PATCH] authPrompt: add support for auth without username This commit introduces a new BeginRequestType enum which gets passed to the 'reset' signal to specify whether a username should be provided to the begin() method and changes the loginDialog to comply. Currently, the signal only ever gets emitted with AuthPrompt.BeginRequestType.PROVIDE_USERNAME but that will change in the future when providing smartcard support. https://bugzilla.gnome.org/show_bug.cgi?id=683437 --- js/gdm/authPrompt.js | 7 ++++++- js/gdm/loginDialog.js | 32 +++++++++++++++++++++++--------- js/ui/unlockDialog.js | 16 ++++++++++++++-- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 1c6719e49..5456ee969 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -31,6 +31,11 @@ const AuthPromptStatus = { VERIFICATION_SUCCEEDED: 3 }; +const BeginRequestType = { + PROVIDE_USERNAME: 0, + DONT_PROVIDE_USERNAME: 1 +}; + const AuthPrompt = new Lang.Class({ Name: 'AuthPrompt', @@ -423,7 +428,7 @@ const AuthPrompt = new Lang.Class({ if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED) this.emit('failed'); - this.emit('reset'); + this.emit('reset', BeginRequestType.PROVIDE_USERNAME); }, addCharacter: function(unichar) { diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js index 618c1952e..e6627194a 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -478,7 +478,7 @@ const LoginDialog = new Lang.Class({ this._notListedButton.connect('clicked', Lang.bind(this, function() { this._authPrompt.cancelButton.show(); - this._hideUserListAndLogIn(); + this._hideUserListAskForUsernameAndBeginVerification(); })); this._notListedButton.hide(); @@ -577,16 +577,21 @@ const LoginDialog = new Lang.Class({ this._showPrompt(); }, - _onReset: function() { + _onReset: function(authPrompt, beginRequest) { this._sessionMenuButton.updateSensitivity(true); this._user = null; - if (this._disableUserList) { - this._authPrompt.cancelButton.hide(); - this._hideUserListAndLogIn(); + if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) { + if (this._disableUserList) { + this._authPrompt.cancelButton.hide(); + this._hideUserListAskForUsernameAndBeginVerification(); + } else { + this._showUserList(); + } } else { - this._showUserList(); + this._authPrompt.cancelButton.hide(); + this._hideUserListAndBeginVerification(); } }, @@ -631,7 +636,7 @@ const LoginDialog = new Lang.Class({ this._authPrompt.setHint(_("(e.g., user or %s)").format(hint)); }, - _askForUsernameAndLogIn: function() { + _askForUsernameAndBeginVerification: function() { this._authPrompt.setPasswordChar(''); this._authPrompt.setQuestion(_("Username: ")); @@ -814,11 +819,20 @@ const LoginDialog = new Lang.Class({ this._userSelectionBox.visible = expanded; }, - _hideUserListAndLogIn: function() { + _hideUserList: function() { this._setUserListExpanded(false); if (this._userSelectionBox.visible) GdmUtil.cloneAndFadeOutActor(this._userSelectionBox); - this._askForUsernameAndLogIn(); + }, + + _hideUserListAskForUsernameAndBeginVerification: function() { + this._hideUserList(); + this._askForUsernameAndBeginVerification(); + }, + + _hideUserListAndBeginVerification: function() { + this._hideUserList(); + this._authPrompt.begin(); }, _showUserList: function() { diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js index 8f30d6e95..13a2bd416 100644 --- a/js/ui/unlockDialog.js +++ b/js/ui/unlockDialog.js @@ -51,7 +51,7 @@ const UnlockDialog = new Lang.Class({ this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY); this._authPrompt.connect('failed', Lang.bind(this, this._fail)); this._authPrompt.connect('cancelled', Lang.bind(this, this._fail)); - this._authPrompt.setUser(this._user); + this._authPrompt.connect('reset', Lang.bind(this, this._onReset)); this._authPrompt.setPasswordChar('\u25cf'); this._authPrompt.nextButton.label = _("Unlock"); @@ -75,7 +75,7 @@ const UnlockDialog = new Lang.Class({ this._otherUserButton = null; } - this._authPrompt.begin({ userName: this._userName }); + this._authPrompt.reset(); this._updateSensitivity(true); Main.ctrlAltTabManager.addGroup(this.actor, _("Unlock Window"), 'dialog-password-symbolic'); @@ -97,6 +97,18 @@ const UnlockDialog = new Lang.Class({ this.emit('failed'); }, + _onReset: function(authPrompt, beginRequest) { + let userName; + if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) { + this._authPrompt.setUser(this._user); + userName = this._userName; + } else { + userName = null; + } + + this._authPrompt.begin({ userName: userName }); + }, + _escape: function() { if (this.allowCancel) this._authPrompt.cancel();