diff options
author | Simon Rettberg | 2015-09-23 16:52:16 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-23 16:52:16 +0200 |
commit | 8bb1ae726b5108d8ff58dbfd36378fb8319dfa98 (patch) | |
tree | 05e0b880c824673bc9d7e0d8bc2c33e8c3630b28 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java | |
parent | [server] Fix race condition on delete; check for vmstore before up/download (diff) | |
download | tutor-module-8bb1ae726b5108d8ff58dbfd36378fb8319dfa98.tar.gz tutor-module-8bb1ae726b5108d8ff58dbfd36378fb8319dfa98.tar.xz tutor-module-8bb1ae726b5108d8ff58dbfd36378fb8319dfa98.zip |
[client] Disable login button while login is running; create legacy vmx if server doesn't supply one
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java index 8b16bd2b..342ce9eb 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java @@ -73,18 +73,21 @@ public class LoginWindow extends LoginWindowLayout { private final String NO_USERNAME = "Kein Benutzername angegeben!"; private final String NO_PASSWORD = "Kein Passwort angegeben!"; - public static boolean forceCustomSatellite; + private boolean forceCustomSatellite = false; + private final KeyEventDispatcher satelliteShiftDispatcher = new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent event) { - int type = event.getID(); int code = event.getKeyCode(); if (code == KeyEvent.VK_SHIFT) { // shift key is pressed + int type = event.getID(); if (type == KeyEvent.KEY_PRESSED) { forceCustomSatellite = true; - } else if (type == KeyEvent.KEY_RELEASED) + event.consume(); + } else if (type == KeyEvent.KEY_RELEASED) { forceCustomSatellite = false; - event.consume(); + event.consume(); + } } return event.isConsumed(); } @@ -213,8 +216,7 @@ public class LoginWindow extends LoginWindowLayout { return; } - idpCombo.setModel( - new DefaultComboBoxModel<Organization>(orgs.toArray(new Organization[orgs.size()]))); + idpCombo.setModel(new DefaultComboBoxModel<Organization>(orgs.toArray(new Organization[orgs.size()]))); // now check if we had a saved identity provider String savedOrganizationId = Config.getIdentityProvider(); idpCombo.setSelectedItem(OrganizationCache.find(savedOrganizationId)); @@ -292,7 +294,8 @@ public class LoginWindow extends LoginWindowLayout { // username contains a known organization if (!selectedOrg.equals(orgInUsername)) { // but it does not match the one selected in the combobox - boolean ret = Gui.showMessageBox(this, + boolean ret = Gui.showMessageBox( + this, "Der angegebene Benutzername enthält eine Organisation, die nicht mit Ihrer IDP-Auswahl übereinstimmt." + "\nWollen Sie die in Ihrem Benutzername gefundene Organisation verwenden?", MessageType.QUESTION_YESNO, null, null); @@ -314,11 +317,16 @@ public class LoginWindow extends LoginWindowLayout { final LoginWindow me = this; final AuthenticatorCallback authenticatorCallback = new AuthenticatorCallback() { @Override - public void postLogin(ReturnCode returnCode, AuthenticationData data, Throwable t) { + public void postLogin(ReturnCode returnCode, final AuthenticationData data, Throwable t) { switch (returnCode) { case NO_ERROR: - postSuccessfulLogin(data); - break; + Gui.asyncExec(new Runnable() { + @Override + public void run() { + postSuccessfulLogin(data); + } + }); + return; case IDENTITY_PROVIDER_ERROR: Gui.showMessageBox(me, "IdP Error", MessageType.ERROR, LOGGER, null); break; @@ -329,10 +337,9 @@ public class LoginWindow extends LoginWindowLayout { LOGGER, t); break; case UNREGISTERED_ERROR: - Gui.showMessageBox(me, - "You are not registered to bwLehrpool. Please visit " - + ShibbolethEcp.getRegistrationUrl() + " and register first.", - MessageType.ERROR, LOGGER, t); + Gui.showMessageBox(me, "You are not registered to bwLehrpool. Please visit " + + ShibbolethEcp.getRegistrationUrl() + " and register first.", MessageType.ERROR, + LOGGER, t); break; case INVALID_URL_ERROR: Gui.showMessageBox(me, "ECP Authenticator says: Invalid URL.", MessageType.ERROR, LOGGER, @@ -343,6 +350,7 @@ public class LoginWindow extends LoginWindowLayout { Gui.showMessageBox(me, "Internal error!", MessageType.ERROR, LOGGER, null); break; } + loginButton.setEnabled(true); } }; @@ -363,20 +371,23 @@ public class LoginWindow extends LoginWindowLayout { return; } - // Execute login - App.waitForInit(); + loginButton.setEnabled(false); final String finalUsername = username; QuickTimer.scheduleOnce(new Task() { @Override public void fire() { + // Execute login + App.waitForInit(); try { authenticator.login(finalUsername, password, authenticatorCallback); + return; } catch (TException e) { ThriftError.showMessage(LoginWindow.this, LOGGER, e, "Anmeldung fehlgeschlagen"); } catch (Exception e) { Gui.showMessageBox(LoginWindow.this, "Anmeldung fehlgeschlagen", MessageType.ERROR, LOGGER, e); } + loginButton.setEnabled(true); } }); } @@ -391,18 +402,19 @@ public class LoginWindow extends LoginWindowLayout { // Update known suggested fingerprints importFingerprints(data.satellites); // now try to init the session with the data received - if (ThriftActions.initSession(data, SwingUtilities.getWindowAncestor(this))) { + if (ThriftActions.initSession(data, forceCustomSatellite, SwingUtilities.getWindowAncestor(this))) { if (saveUsernameCheck.isSelected()) { Config.saveCurrentSession(Session.getSatelliteAddress(), Session.getSatelliteToken(), Session.getMasterToken()); } // Remove the listener for the shift key. (For forcing the satellite selection) - KeyboardFocusManager.getCurrentKeyboardFocusManager() - .removeKeyEventDispatcher(satelliteShiftDispatcher); + KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher( + satelliteShiftDispatcher); dispose(); return; } + loginButton.setEnabled(true); } /** |