diff options
| author | Simon Rettberg | 2015-08-03 19:12:56 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-08-03 19:12:56 +0200 |
| commit | 18e2e65e2afb5eb836ce27f6ea7061120ab819be (patch) | |
| tree | 3309859afb9a081459aa89d318b939caeb4fd5b3 | |
| parent | [client] Remove accidentally commited debug code (diff) | |
| download | tutor-module-18e2e65e2afb5eb836ce27f6ea7061120ab819be.tar.gz tutor-module-18e2e65e2afb5eb836ce27f6ea7061120ab819be.tar.xz tutor-module-18e2e65e2afb5eb836ce27f6ea7061120ab819be.zip | |
[client] Feature: save session to skip login
4 files changed, 67 insertions, 6 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java index 3ef0edcf..928b38d1 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java @@ -25,7 +25,7 @@ public class Config { * Logger for this class */ private final static Logger LOGGER = Logger.getLogger(Config.class); - + public static final int TRANSFER_TIMEOUT = 20 * 1000; // 20s timeout for hung transfers public static interface ErrorCallback { @@ -76,7 +76,7 @@ public class Config { } } else if (osName.contains("linux")) { configPath = System.getProperty("user.home") + "/.config"; - } + } if (configPath == null || configPath.isEmpty()) { // Not Windows nor Linux, try fallback to relative path // TODO MacOS Support? @@ -84,7 +84,8 @@ public class Config { } // Check if we got a path - configFile = new File(configPath + File.separatorChar + "bwSuite" + File.separatorChar + "config.properties"); + configFile = new File(configPath + File.separatorChar + "bwSuite" + File.separatorChar + + "config.properties"); // Check if the directory exists. if (!configFile.getParentFile().exists()) { @@ -98,7 +99,7 @@ public class Config { if (!configFile.exists()) { forceSaveInternal(); } - + // Make sure all settings are saved when we exit Runtime.getRuntime().addShutdownHook(new Thread() { @Override @@ -298,6 +299,31 @@ public class Config { setString("login.method", value); } + /** + * Saves the current session, identified by the satellite server's address + * and token. + * + * @param satAddress + * @param satToken + */ + public static void saveCurrentSession(String satAddress, String satToken) { + setString("session.address", satAddress); + setString("session.token", satToken); + } + + /** + * Load a saved session. + * + * @return Saved session, or <code>null</code> if no session was saved + */ + public static SavedSession getSavedSession() { + SavedSession session = new SavedSession(getString("session.address", ""), getString("session.token", + "")); + if (session.token.isEmpty() || session.address.isEmpty()) + return null; + return session; + } + /* * Generic helpers for different data types */ @@ -372,4 +398,14 @@ public class Config { queueSave(); } + public static class SavedSession { + public final String address; + public final String token; + + public SavedSession(String address, String token) { + this.address = address; + this.token = token; + } + } + } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java index aebcffbd..d5b4d4e3 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java @@ -24,8 +24,12 @@ import javax.swing.JMenuItem; import javax.swing.JPanel; import org.apache.log4j.Logger; +import org.apache.thrift.TException; +import org.openslx.bwlp.thrift.iface.TAuthorizationException; +import org.openslx.bwlp.thrift.iface.TInternalServerError; import org.openslx.dozmod.App; import org.openslx.dozmod.Config; +import org.openslx.dozmod.Config.SavedSession; import org.openslx.dozmod.gui.Gui.GuiCallable; import org.openslx.dozmod.gui.activity.ActivityPanel; import org.openslx.dozmod.gui.activity.UploadPanel; @@ -206,10 +210,20 @@ public abstract class MainWindow { mainWindow.setVisible(true); // here we can check for Session information - if (Session.getSatelliteToken() != null) { + SavedSession session = Config.getSavedSession(); + if (session != null) { // Wait for proxy server init App.waitForInit(); - // TODO: Try to resume session + ThriftManager.setSatelliteAddress(session.address); + try { + ThriftManager.getSatClient().isAuthenticated(session.token); + // TODO: Satellite whoami call + Session.setSatelliteAddress(session.address); + Session.fromSavedSession(session); + LOGGER.info("Saved session used for resume."); + } catch (TException e1) { + LOGGER.info("Session resume failed.", e1); + } } // Session resume probably failed, show login window 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 82c372c5..cda33b80 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 @@ -337,6 +337,7 @@ public class LoginWindow extends LoginWindowLayout { // TODO HACK HACK Session.setSatelliteAddress("132.230.8.113"); + // TODO: Set in proper place, clear saved address if different ThriftManager.setSatelliteAddress(Session.getSatelliteAddress()); // Something like ThriftManager.setSatelliteAddress(Session.getSatelliteAddress()); (might need selection box) Exception e = null; @@ -345,6 +346,10 @@ public class LoginWindow extends LoginWindowLayout { // now read the config to see if the user already agreed to the disclaimer // if (DisclaimerWindow.shouldBeShown()) // VirtualizerNoticeWindow.open(); + // Save session (TODO: Extra checkbox) + if (saveUsernameCheck.isSelected()) { + Config.saveCurrentSession(Session.getSatelliteAddress(), Session.getSatelliteToken()); + } LOGGER.debug("Closing..."); dispose(); return; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java index a3f04a8b..36c6f617 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java @@ -5,6 +5,7 @@ import org.openslx.bwlp.thrift.iface.ClientSessionData; import org.openslx.bwlp.thrift.iface.SessionData; import org.openslx.bwlp.thrift.iface.TInvalidTokenException; import org.openslx.bwlp.thrift.iface.UserInfo; +import org.openslx.dozmod.Config.SavedSession; import org.openslx.dozmod.authentication.ServiceProviderResponse; import org.openslx.thrifthelper.ThriftManager; @@ -62,6 +63,11 @@ public class Session { satelliteToken = response.token; } + public static void fromSavedSession(SavedSession session) { + satelliteToken = session.token; + // TODO: Satellite whoami call + } + /** * @return the first name */ |
