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
This commit is contained in:
parent
1104a385fa
commit
93f072d1fc
@ -31,6 +31,11 @@ const AuthPromptStatus = {
|
|||||||
VERIFICATION_SUCCEEDED: 3
|
VERIFICATION_SUCCEEDED: 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const BeginRequestType = {
|
||||||
|
PROVIDE_USERNAME: 0,
|
||||||
|
DONT_PROVIDE_USERNAME: 1
|
||||||
|
};
|
||||||
|
|
||||||
const AuthPrompt = new Lang.Class({
|
const AuthPrompt = new Lang.Class({
|
||||||
Name: 'AuthPrompt',
|
Name: 'AuthPrompt',
|
||||||
|
|
||||||
@ -431,7 +436,7 @@ const AuthPrompt = new Lang.Class({
|
|||||||
if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED)
|
if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED)
|
||||||
this.emit('failed');
|
this.emit('failed');
|
||||||
|
|
||||||
this.emit('reset');
|
this.emit('reset', BeginRequestType.PROVIDE_USERNAME);
|
||||||
},
|
},
|
||||||
|
|
||||||
addCharacter: function(unichar) {
|
addCharacter: function(unichar) {
|
||||||
|
@ -475,7 +475,12 @@ const LoginDialog = new Lang.Class({
|
|||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
x_fill: true });
|
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._notListedButton.hide();
|
||||||
|
|
||||||
this._userSelectionBox.add(this._notListedButton,
|
this._userSelectionBox.add(this._notListedButton,
|
||||||
@ -585,15 +590,17 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._showPrompt();
|
this._showPrompt();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onReset: function() {
|
_onReset: function(authPrompt, beginRequest) {
|
||||||
this._sessionMenuButton.updateSensitivity(true);
|
this._sessionMenuButton.updateSensitivity(true);
|
||||||
|
|
||||||
this._user = null;
|
this._user = null;
|
||||||
|
|
||||||
if (this._disableUserList)
|
if (this._disableUserList) {
|
||||||
|
this._authPrompt.cancelButton.hide();
|
||||||
this._hideUserListAndLogIn();
|
this._hideUserListAndLogIn();
|
||||||
else
|
} else {
|
||||||
this._showUserList();
|
this._showUserList();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDefaultSessionChanged: function(client, sessionId) {
|
_onDefaultSessionChanged: function(client, sessionId) {
|
||||||
@ -634,7 +641,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._authPrompt.setHint(_("(e.g., user or %s)").format(hint));
|
this._authPrompt.setHint(_("(e.g., user or %s)").format(hint));
|
||||||
},
|
},
|
||||||
|
|
||||||
_askForUsernameAndLogIn: function() {
|
_askForUsernameAndBeginVerification: function() {
|
||||||
this._authPrompt.setPasswordChar('');
|
this._authPrompt.setPasswordChar('');
|
||||||
this._authPrompt.setQuestion(_("Username: "));
|
this._authPrompt.setQuestion(_("Username: "));
|
||||||
|
|
||||||
@ -818,11 +825,20 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userSelectionBox.visible = expanded;
|
this._userSelectionBox.visible = expanded;
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideUserListAndLogIn: function() {
|
_hideUserList: function() {
|
||||||
this._setUserListExpanded(false);
|
this._setUserListExpanded(false);
|
||||||
if (this._userSelectionBox.visible)
|
if (this._userSelectionBox.visible)
|
||||||
GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
||||||
this._askForUsernameAndLogIn();
|
},
|
||||||
|
|
||||||
|
_hideUserListAskForUsernameAndBeginVerification: function() {
|
||||||
|
this._hideUserList();
|
||||||
|
this._askForUsernameAndBeginVerification();
|
||||||
|
},
|
||||||
|
|
||||||
|
_hideUserListAndBeginVerification: function() {
|
||||||
|
this._hideUserList();
|
||||||
|
this._authPrompt.begin();
|
||||||
},
|
},
|
||||||
|
|
||||||
_showUserList: function() {
|
_showUserList: function() {
|
||||||
|
@ -51,7 +51,7 @@ const UnlockDialog = new Lang.Class({
|
|||||||
this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
|
this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
|
||||||
this._authPrompt.connect('failed', Lang.bind(this, this._fail));
|
this._authPrompt.connect('failed', Lang.bind(this, this._fail));
|
||||||
this._authPrompt.connect('cancelled', 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.setPasswordChar('\u25cf');
|
||||||
this._authPrompt.nextButton.label = _("Unlock");
|
this._authPrompt.nextButton.label = _("Unlock");
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ const UnlockDialog = new Lang.Class({
|
|||||||
this._otherUserButton = null;
|
this._otherUserButton = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._authPrompt.begin({ userName: this._userName });
|
this._authPrompt.reset();
|
||||||
this._updateSensitivity(true);
|
this._updateSensitivity(true);
|
||||||
|
|
||||||
Main.ctrlAltTabManager.addGroup(this.actor, _("Unlock Window"), 'dialog-password-symbolic');
|
Main.ctrlAltTabManager.addGroup(this.actor, _("Unlock Window"), 'dialog-password-symbolic');
|
||||||
@ -97,6 +97,18 @@ const UnlockDialog = new Lang.Class({
|
|||||||
this.emit('failed');
|
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() {
|
_escape: function() {
|
||||||
if (this.allowCancel)
|
if (this.allowCancel)
|
||||||
this._authPrompt.cancel();
|
this._authPrompt.cancel();
|
||||||
|
Loading…
Reference in New Issue
Block a user