From 93f072d1fcf578c4e7550bd755e84bd46abcd493 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 | 30 +++++++++++++++++++++++------- js/ui/unlockDialog.js | 16 ++++++++++++++-- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 15841a3fb..c7648c292 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', @@ -431,7 +436,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 46bd8959f..b01ea3772 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -475,7 +475,12 @@ const LoginDialog = new Lang.Class({ x_align: St.Align.START, x_fill: true }); - this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAndLogIn)); + this._notListedButton.connect('clicked', + Lang.bind(this, function() { + this._authPrompt.cancelButton.show(); + this._hideUserListAndLogIn(); + })); + this._notListedButton.hide(); this._userSelectionBox.add(this._notListedButton, @@ -585,15 +590,17 @@ const LoginDialog = new Lang.Class({ this._showPrompt(); }, - _onReset: function() { + _onReset: function(authPrompt, beginRequest) { this._sessionMenuButton.updateSensitivity(true); this._user = null; - if (this._disableUserList) + if (this._disableUserList) { + this._authPrompt.cancelButton.hide(); this._hideUserListAndLogIn(); - else + } else { this._showUserList(); + } }, _onDefaultSessionChanged: function(client, sessionId) { @@ -634,7 +641,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: ")); @@ -818,11 +825,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();