summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-10-05 14:09:58 +0200
committerSimon Rettberg2015-10-05 14:09:58 +0200
commit14c783be43800bc59ea5c35214a47ad1f08ce78c (patch)
tree3842722ca563414e67d22efe5254486236828f5c /dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
parent[client] Show satellite selection dialog again if connect failed but login su... (diff)
downloadtutor-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.java187
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(