Handle handshake rejections on invalid token, reuse not expired tokens
This commit is contained in:
@ -93,8 +93,9 @@ public final class Startup extends Application {
|
||||
logger.info("Attempting authentication with token...");
|
||||
localDB.initializeUserStorage();
|
||||
localDB.loadUserData();
|
||||
performHandshake(LoginCredentials.loginWithToken(localDB.getUser().getName(), localDB.getAuthToken(), VERSION, localDB.getLastSync()));
|
||||
// TODO: handle unsuccessful handshake
|
||||
if (!performHandshake(
|
||||
LoginCredentials.loginWithToken(localDB.getUser().getName(), localDB.getAuthToken(), VERSION, localDB.getLastSync())))
|
||||
sceneContext.load(SceneInfo.LOGIN_SCENE);
|
||||
} else {
|
||||
|
||||
// Load login scene
|
||||
@ -106,9 +107,10 @@ public final class Startup extends Application {
|
||||
* Tries to perform a Handshake with the server.
|
||||
*
|
||||
* @param credentials the credentials to use for the handshake
|
||||
* @return whether the handshake was successful or offline mode could be entered
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public static void performHandshake(LoginCredentials credentials) {
|
||||
public static boolean performHandshake(LoginCredentials credentials) {
|
||||
final var cacheMap = new CacheMap();
|
||||
cacheMap.put(Message.class, new Cache<Message>());
|
||||
cacheMap.put(GroupMessage.class, new Cache<GroupMessage>());
|
||||
@ -120,10 +122,13 @@ public final class Startup extends Application {
|
||||
if (client.isOnline()) {
|
||||
loadChatScene();
|
||||
client.initReceiver(localDB, cacheMap);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (IOException | InterruptedException | TimeoutException e) {
|
||||
logger.log(Level.INFO, "Could not connect to server. Entering offline mode...");
|
||||
attemptOfflineMode(credentials.getIdentifier());
|
||||
return attemptOfflineMode(credentials.getIdentifier());
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,9 +137,10 @@ public final class Startup extends Application {
|
||||
* for a given user.
|
||||
*
|
||||
* @param identifier the identifier of the user - currently his username
|
||||
* @return whether the offline mode could be entered
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public static void attemptOfflineMode(String identifier) {
|
||||
public static boolean attemptOfflineMode(String identifier) {
|
||||
try {
|
||||
// Try entering offline mode
|
||||
localDB.loadUsers();
|
||||
@ -142,10 +148,12 @@ public final class Startup extends Application {
|
||||
if (clientUser == null) throw new EnvoyException("Could not enter offline mode: user name unknown");
|
||||
client.setSender(clientUser);
|
||||
loadChatScene();
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
new Alert(AlertType.ERROR, "Client error: " + e).showAndWait();
|
||||
logger.log(Level.SEVERE, "Offline mode could not be loaded: ", e);
|
||||
System.exit(1);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user