More efficient re-login

This commit is contained in:
Caesar2011
2019-02-03 17:11:58 +01:00
parent 3380e79232
commit a6b34f7814
4 changed files with 40 additions and 22 deletions

View File

@@ -22,6 +22,11 @@ public class Login extends HTTPService {
public static final int RESTORE_STATUS_SUCCESS = 1; public static final int RESTORE_STATUS_SUCCESS = 1;
public static final int RESTORE_STATUS_ERROR = 2; public static final int RESTORE_STATUS_ERROR = 2;
public static final int RESTORE_STATUS_INVALID_PASSWORD = 3; public static final int RESTORE_STATUS_INVALID_PASSWORD = 3;
public static final int LOGOUT_KVV = 2;
public static final int LOGOUT_BB = 1;
public static final int RELOGIN = 0;
private final KVVListener mListener; private final KVVListener mListener;
@Nullable private LoginTokenKVV mTokenKVV; @Nullable private LoginTokenKVV mTokenKVV;
@Nullable private LoginTokenBB mTokenBB; @Nullable private LoginTokenBB mTokenBB;
@@ -110,26 +115,38 @@ public class Login extends HTTPService {
return mTokenBB; return mTokenBB;
} }
void refreshLogin(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error) { void refreshLogin(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error, int flags) {
boolean isFirst = mRefreshCallbacks.isEmpty(); boolean isFirst = mRefreshCallbacks.isEmpty();
mRefreshCallbacks.add(success, error); mRefreshCallbacks.add(success, error);
if (!isFirst) if (!isFirst)
return; return;
refreshLoginRunner(success, error, flags);
}
private void refreshLoginRunner(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error, int flags) {
CustomAccountManager manager = mListener.getAccountManager(); CustomAccountManager manager = mListener.getAccountManager();
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_KVV, ignored -> { if ((flags & LOGOUT_KVV) == LOGOUT_KVV) {
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_BLACKBOARD, ignored2 -> { manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_KVV, ignored -> {
restoreOnlineLogin(restoreResult -> { refreshLoginRunner(success, error, flags & ~LOGOUT_KVV);
if (restoreResult == RESTORE_STATUS_SUCCESS)
testLoginToken(mRefreshCallbacks::responseResponse, mRefreshCallbacks::responseError);
else if (restoreResult == RESTORE_STATUS_INVALID_PASSWORD) {
logout(true);
mRefreshCallbacks.responseError(new NetworkError(100180, 403, "Re-login failed (password)!"));
} else {
mRefreshCallbacks.responseError(new NetworkError(100181, 403, "Re-login failed (error)!"));
}
});
}); });
}); } else if ((flags & LOGOUT_BB) == LOGOUT_BB) {
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_BLACKBOARD, ignored -> {
refreshLoginRunner(success, error, flags & ~LOGOUT_BB);
});
} else if (flags == RELOGIN) {
restoreOnlineLogin(restoreResult -> {
if (restoreResult == RESTORE_STATUS_SUCCESS)
testLoginToken(mRefreshCallbacks::responseResponse, mRefreshCallbacks::responseError);
else if (restoreResult == RESTORE_STATUS_INVALID_PASSWORD) {
logout(true);
mRefreshCallbacks.responseError(new NetworkError(100180, 403, "Re-login failed (password)!"));
} else {
mRefreshCallbacks.responseError(new NetworkError(100181, 403, "Re-login failed (error)!"));
}
});
} else {
throw new IllegalArgumentException("Invalid flag in refreshLoginRunner: "+flags);
}
} }

View File

@@ -14,6 +14,7 @@ import java.util.LinkedHashSet;
import java.util.regex.MatchResult; import java.util.regex.MatchResult;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import androidx.arch.core.util.Function;
import de.sebse.fuplanner.services.kvv.types.Lecturer; import de.sebse.fuplanner.services.kvv.types.Lecturer;
import de.sebse.fuplanner.services.kvv.types.Modules; import de.sebse.fuplanner.services.kvv.types.Modules;
import de.sebse.fuplanner.services.kvv.types.Semester; import de.sebse.fuplanner.services.kvv.types.Semester;
@@ -129,7 +130,7 @@ public class ModulesList extends HTTPService {
mQueue.next(); mQueue.next();
return; return;
} }
NetworkErrorCallback errorFunc = (error -> { Function<Integer, NetworkErrorCallback> errorFunc = ((Integer errorCode) -> (error -> {
if (retries > 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) { if (retries > 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) {
mLogin.refreshLogin(success -> { mLogin.refreshLogin(success -> {
recv(callback, errorCallback, forceRefresh, retries - 1); recv(callback, errorCallback, forceRefresh, retries - 1);
@@ -137,12 +138,12 @@ public class ModulesList extends HTTPService {
}, error1 -> { }, error1 -> {
errorCallback.onError(error1); errorCallback.onError(error1);
mQueue.next(); mQueue.next();
}); }, errorCode);
return; return;
} }
errorCallback.onError(error); errorCallback.onError(error);
mQueue.next(); mQueue.next();
}); }));
this.upgradeKVV(successKVV -> { this.upgradeKVV(successKVV -> {
this.upgradeBlackboard(successKVV, success -> { this.upgradeBlackboard(successKVV, success -> {
if (this.mModules == null) if (this.mModules == null)
@@ -153,8 +154,8 @@ public class ModulesList extends HTTPService {
} }
callback.onResponse(this.mModules); callback.onResponse(this.mModules);
mQueue.next(); mQueue.next();
}, errorFunc); }, errorFunc.apply(Login.LOGOUT_BB));
}, errorFunc); }, errorFunc.apply(Login.LOGOUT_KVV));
}); });
} }

View File

@@ -257,11 +257,11 @@ public class ModulesResources extends PartModules<ArrayList<Resource>> {
return; return;
} }
} }
fileUpgrade(filename, url , modulename, callback, error -> { fileUpgrade(filename, url, modulename, callback, error -> {
if (retries >= 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) { if (retries >= 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) {
mLogin.refreshLogin(success -> { mLogin.refreshLogin(success -> {
file(filename, url, modulename, callback, errorCallback, forceRefresh, retries-1); file(filename, url, modulename, callback, errorCallback, forceRefresh, retries-1);
}, errorCallback); }, errorCallback, url.contains("lms.fu-berlin.de") ? Login.LOGOUT_BB : Login.LOGOUT_KVV);
return; return;
} }
errorCallback.onError(error); errorCallback.onError(error);

View File

@@ -39,7 +39,7 @@ abstract class PartModules<T> extends Part<Modules.Module> {
}, error1 -> { }, error1 -> {
errorCallback.onError(error1); errorCallback.onError(error1);
mQueue.next(); mQueue.next();
}); }, module.getModuleType() == Modules.TYPE_BB ? Login.LOGOUT_BB : Login.LOGOUT_KVV);
return; return;
} }
errorCallback.onError(error); errorCallback.onError(error);