[gnome-shell/gnome-3-8] polkitAgent: Allow retrying mistyped passwords
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-8] polkitAgent: Allow retrying mistyped passwords
- Date: Mon, 13 May 2013 19:10:29 +0000 (UTC)
commit 17aa8e0488d83feb9ad34f345fc7b848bb2b4aa5
Author: Stef Walter <stefw gnome org>
Date: Wed Apr 17 11:05:36 2013 +0200
polkitAgent: Allow retrying mistyped passwords
Don't hide the polkit agent window when someone mistypes their password.
Allow them to try again. The user can cancel at any point.
https://bugzilla.gnome.org/show_bug.cgi?id=684431
js/ui/components/polkitAgent.js | 62 ++++++++++++++------------------------
1 files changed, 23 insertions(+), 39 deletions(-)
---
diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js
index 15307f3..20e8b2a 100644
--- a/js/ui/components/polkitAgent.js
+++ b/js/ui/components/polkitAgent.js
@@ -31,7 +31,6 @@ const AuthenticationDialog = new Lang.Class({
this.message = message;
this.userNames = userNames;
this._wasDismissed = false;
- this._completed = false;
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
@@ -177,16 +176,16 @@ const AuthenticationDialog = new Lang.Class({
this._identityToAuth = Polkit.UnixUser.new_for_name(userName);
this._cookie = cookie;
+ },
+ performAuthentication: function() {
+ this.destroySession();
this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
cookie: this._cookie });
this._session.connect('completed', Lang.bind(this, this._onSessionCompleted));
this._session.connect('request', Lang.bind(this, this._onSessionRequest));
this._session.connect('show-error', Lang.bind(this, this._onSessionShowError));
this._session.connect('show-info', Lang.bind(this, this._onSessionShowInfo));
- },
-
- startAuthentication: function() {
this._session.initiate();
},
@@ -208,14 +207,14 @@ const AuthenticationDialog = new Lang.Class({
log('polkitAuthenticationAgent: Failed to show modal dialog.' +
' Dismissing authentication request for action-id ' + this.actionId +
' cookie ' + this._cookie);
- this._emitDone(false, true);
+ this._emitDone(true);
}
},
- _emitDone: function(keepVisible, dismissed) {
+ _emitDone: function(dismissed) {
if (!this._doneEmitted) {
this._doneEmitted = true;
- this.emit('done', keepVisible, dismissed);
+ this.emit('done', dismissed);
}
},
@@ -244,12 +243,16 @@ const AuthenticationDialog = new Lang.Class({
},
_onSessionCompleted: function(session, gainedAuthorization) {
- if (this._completed)
+ if (this._completed || this._doneEmitted)
return;
this._completed = true;
- if (!gainedAuthorization) {
+ /* Yay, all done */
+ if (gainedAuthorization) {
+ this._emitDone(false);
+
+ } else {
/* Unless we are showing an existing error message from the PAM
* module (the PAM module could be reporting the authentication
* error providing authentication-method specific information),
@@ -265,8 +268,10 @@ const AuthenticationDialog = new Lang.Class({
this._infoMessageLabel.hide();
this._nullMessageLabel.hide();
}
+
+ /* Try and authenticate again */
+ this.performAuthentication();
}
- this._emitDone(!gainedAuthorization, false);
},
_onSessionRequest: function(session, request, echo_on) {
@@ -310,6 +315,7 @@ const AuthenticationDialog = new Lang.Class({
if (this._session) {
if (!this._completed)
this._session.cancel();
+ this._completed = false;
this._session = null;
}
},
@@ -324,7 +330,7 @@ const AuthenticationDialog = new Lang.Class({
cancel: function() {
this._wasDismissed = true;
this.close(global.get_current_time());
- this._emitDone(false, true);
+ this._emitDone(true);
},
});
Signals.addSignalMethods(AuthenticationDialog.prototype);
@@ -334,7 +340,6 @@ const AuthenticationAgent = new Lang.Class({
_init: function() {
this._currentDialog = null;
- this._isCompleting = false;
this._handle = null;
this._native = new Shell.PolkitAuthenticationAgent();
this._native.connect('initiate', Lang.bind(this, this._onInitiate));
@@ -371,45 +376,24 @@ const AuthenticationAgent = new Lang.Class({
// discussion.
this._currentDialog.connect('done', Lang.bind(this, this._onDialogDone));
- this._currentDialog.startAuthentication();
+ this._currentDialog.performAuthentication();
},
_onCancel: function(nativeAgent) {
- this._completeRequest(false, false);
+ this._completeRequest(false);
},
- _onDialogDone: function(dialog, keepVisible, dismissed) {
- this._completeRequest(keepVisible, dismissed);
+ _onDialogDone: function(dialog, dismissed) {
+ this._completeRequest(dismissed);
},
- _reallyCompleteRequest: function(dismissed) {
+ _completeRequest: function(dismissed) {
this._currentDialog.close();
this._currentDialog.destroySession();
this._currentDialog = null;
- this._isCompleting = false;
- this._native.complete(dismissed)
+ this._native.complete(dismissed);
},
-
- _completeRequest: function(keepVisible, wasDismissed) {
- if (this._isCompleting)
- return;
-
- this._isCompleting = true;
-
- if (keepVisible) {
- // Give the user 2 seconds to read 'Authentication Failure' before
- // dismissing the dialog
- Mainloop.timeout_add(2000,
- Lang.bind(this,
- function() {
- this._reallyCompleteRequest(wasDismissed);
- return false;
- }));
- } else {
- this._reallyCompleteRequest(wasDismissed);
- }
- }
});
const Component = AuthenticationAgent;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]