diff options
author | Simon Rettberg | 2015-10-05 14:09:58 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-10-05 14:09:58 +0200 |
commit | 14c783be43800bc59ea5c35214a47ad1f08ce78c (patch) | |
tree | 3842722ca563414e67d22efe5254486236828f5c /dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java | |
parent | [client] Show satellite selection dialog again if connect failed but login su... (diff) | |
download | tutor-module-14c783be43800bc59ea5c35214a47ad1f08ce78c.tar.gz tutor-module-14c783be43800bc59ea5c35214a47ad1f08ce78c.tar.xz tutor-module-14c783be43800bc59ea5c35214a47ad1f08ce78c.zip |
[client] FORGOT THIS FILE HERE!
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java | 187 |
1 files changed, 101 insertions, 86 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java index d22bf39c..1f3ac817 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java @@ -13,6 +13,7 @@ import javax.swing.JFileChooser; import org.apache.log4j.Logger; import org.apache.thrift.TException; +import org.apache.thrift.transport.TTransportException; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; import org.openslx.bwlp.thrift.iface.ImagePermissions; @@ -81,107 +82,121 @@ public class ThriftActions { * @return true if initialising the session worked, false otherwise */ public static boolean initSession(AuthenticationData data, boolean forceCustomSatellite, Window window) { + final boolean interactive = (data != null); Client client = null; WhoamiInfo whoami = null; String address = null; String satToken = null; String masterToken = null; - if (data == null) { - // in session resume - SavedSession session = Config.getSavedSession(); - if (session == null) - return false; - address = session.address; - satToken = session.token; - masterToken = session.masterToken; - } else { - // after login - Satellite sat = null; - if (data.satellites != null && data.satellites.size() == 1 && !forceCustomSatellite) { - sat = data.satellites.get(0); + + if (interactive && !forceCustomSatellite && (data.satellites == null || data.satellites.isEmpty())) { + Gui.asyncMessageBox("Login erfolgreich, aber es wurde kein Satelliten-Server gefunden.\n" + + " Bitte geben Sie die Adresse Ihres Servers manuell an.", MessageType.ERROR, LOGGER, + null); + } + + do { + if (!interactive) { + // in session resume + SavedSession session = Config.getSavedSession(); + if (session == null) + return false; + address = session.address; + satToken = session.token; + masterToken = session.masterToken; } else { - if (data.satellites.isEmpty()) { - Gui.asyncMessageBox("Login erfolgreich, aber es wurde kein Satellit-Server gefunden.\n" - + " Bitte geben Sie die Adresse Ihres Satelliten an.", MessageType.ERROR, LOGGER, - null); + // after global login, try to contact satellite + Satellite sat = null; + if (data.satellites != null && data.satellites.size() == 1 && !forceCustomSatellite) { + sat = data.satellites.get(0); } - sat = SatelliteListWindow.open(window, data.satellites); - } - if (sat == null || sat.addressList == null) { - // TODO: Ask for manual IP address entry - Gui.asyncMessageBox("Login erfolgreich, aber es wurde kein Satelliten-Server ausgewählt.\n" - + "Vorgang abgebrochen.", MessageType.ERROR, LOGGER, null); - return false; - } - if (sat.addressList.isEmpty()) { - // TODO: Ask for manual IP address entry - Gui.asyncMessageBox("Login erfolgreich, aber für den ausgewählten Satelliten-Server ist\n" - + "keine Adresse hinterlegt. Kann nicht verbinden.", MessageType.ERROR, LOGGER, null); - return false; - } - address = sat.addressList.get(0); - satToken = data.satelliteToken; - masterToken = data.masterToken; + if (sat == null) { + sat = SatelliteListWindow.open(window, data.satellites); + if (sat == null) + return false; + } + + if (sat.addressList == null || sat.addressList.isEmpty()) { + Gui.asyncMessageBox( + "Login erfolgreich, aber für den ausgewählten Satelliten-Server ist\n" + + "keine Adresse hinterlegt. Kann nicht verbinden.", MessageType.ERROR, + LOGGER, null); + continue; + } + address = sat.addressList.get(0); + satToken = data.satelliteToken; + masterToken = data.masterToken; - } - // try to get a new client - client = ThriftManager.getNewSatelliteClient(GraphicalCertHandler.getSslContext(address), address, - App.THRIFT_SSL_PORT, App.THRIFT_TIMEOUT_MS); - if (client == null) { - if (data != null) { - Gui.asyncMessageBox( - "Authentifizierung erfolgreich, die Verbindung zum Satelliten-Server ist jedoch nicht möglich.\n\n" - + "Möglicherweise ist der Server nicht verfügbar, oder die Netzwerkverbindung gestört.", - MessageType.ERROR, null, null); } - return false; - } - // check our version - long remoteVersion = 0; - try { - remoteVersion = client.getVersion(); - } catch (TException e) { - LOGGER.debug("Failed to retrieve remote version: ", e); - return false; - } - if (remoteVersion != Version.VERSION) { - if (data != null) { - Gui.asyncMessageBox( - "Das von Ihnen verwendete Dozentenmodul ist nicht mit dem Satelliten-Server kompatibel.\n" - + "Ihre Version: " + Version.VERSION + "\n" + "Satelliten-Version: " - + remoteVersion, MessageType.ERROR, LOGGER, null); + // common for resume and fresh login + // try to get a new client + client = ThriftManager.getNewSatelliteClient(GraphicalCertHandler.getSslContext(address), + address, App.THRIFT_SSL_PORT, 5000); + + // RPC version check + long remoteVersion = -1; + if (client != null) { + try { + remoteVersion = client.getVersion(); + } catch (TTransportException e) { + } catch (TException e) { + remoteVersion = 1; // Assume something old + } } - return false; - } - // all good, try to get the whoami info - try { - whoami = client.whoami(satToken); - } catch (TAuthorizationException e) { - if (data != null) { - Gui.asyncMessageBox( - "Authentifizierung erfolgreich, der Satellit verweigert jedoch die Verbindung.\n\n" - + "Grund: " + e.number.toString() + " (" + e.message + ")", - MessageType.ERROR, null, null); + + if (client == null || remoteVersion == -1) { + if (interactive) { + Gui.asyncMessageBox( + "Authentifizierung erfolgreich, die Verbindung zum Satelliten-Server ist jedoch nicht möglich.\n\n" + + "Möglicherweise ist der Server nicht verfügbar, oder die Netzwerkverbindung gestört.", + MessageType.ERROR, null, null); + continue; + } + return false; } - return false; - } catch (TInvocationException e) { - if (data != null) { - Gui.asyncMessageBox( - "Authentifizierung erfolgreich, bei der Kommunikation mit dem Satelliten trat jedoch ein interner Server-Fehler auf.", - MessageType.ERROR, LOGGER, e); + + if (remoteVersion != Version.VERSION) { + if (interactive) { + Gui.asyncMessageBox("Das von Ihnen verwendete Dozentenmodul ist nicht mit dem" + + " gewählten Satelliten-Server kompatibel.\n" + + "Ihre Version: "+ Version.VERSION + "\n" + + "Satelliten-Version: " + remoteVersion, + MessageType.ERROR, LOGGER, null); + continue; + } + return false; } - return false; - } catch (Exception e) { - if (data != null) { - Gui.asyncMessageBox( - "Authentifizierung erfolgreich, aber der Satellit akzeptiert das Sitzungstoken nicht.", - MessageType.ERROR, LOGGER, e); + + // all good, try to get the whoami info + try { + whoami = client.whoami(satToken); + } catch (TAuthorizationException e) { + if (interactive) { + ThriftError.showMessage(window, LOGGER, e, + "Authentifizierung erfolgreich, der Satelliten-Server verweigert jedoch die Verbindung.\n" + + "Versuchen Sie, sich erneut anzumelden.\n"); + } + return false; + } catch (TException e) { + if (interactive) { + ThriftError.showMessage(window, LOGGER, e, + "Authentifizierung erfolgreich, bei der Kommunikation mit" + + " dem Satelliten-Server trat jedoch ein interner Fehler auf."); + continue; + } + return false; + } catch (Exception e) { + if (interactive) { + Gui.asyncMessageBox("Unbekannter Fehler beim Verbinden mit dem Satelliten-Server.", + MessageType.ERROR, LOGGER, e); + continue; + } + return false; } - return false; - } - + } while (interactive && whoami == null); + if (whoami != null) { Session.initialize(whoami, address, satToken, masterToken); ThriftManager.setSatelliteAddress( |