diff --git a/app/src/main/java/de/sebse/fuplanner/services/fulogin/UserLoginTask.java b/app/src/main/java/de/sebse/fuplanner/services/fulogin/UserLoginTask.java index 25827ee..8f779c5 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/fulogin/UserLoginTask.java +++ b/app/src/main/java/de/sebse/fuplanner/services/fulogin/UserLoginTask.java @@ -17,6 +17,7 @@ import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.kvv.sync.BBLogin; import de.sebse.fuplanner.services.kvv.sync.FULogin; import de.sebse.fuplanner.services.kvv.sync.KVVLogin; +import de.sebse.fuplanner.services.kvv.types.LoginTokenKVV; import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.network.NetworkError; import de.sebse.fuplanner.tools.network.NetworkErrorCallback; @@ -76,7 +77,17 @@ public class UserLoginTask extends AsyncTask { login.set(success1.toJsonString()); latch.countDown(); }, errorFunc); - }, errorFunc); + }, error -> { + if (error.getCode() == 100101) { + // KVV never used + LoginTokenKVV loginTokenKVV = new LoginTokenKVV(mUsername, ""); + loginTokenKVV.setNotAvailable(); + login.set(loginTokenKVV.toJsonString()); + latch.countDown(); + } else { + errorFunc.onError(error); + } + }); break; case AccountGeneral.AUTHTOKEN_TYPE_BLACKBOARD: mBBLogin.doLogin(mUsername, mPassword, success -> { diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java index b91676e..ac9d7c5 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java @@ -68,22 +68,36 @@ public class KVVLogin extends HTTPService { public void doLogin(String username, String password, NetworkCallback callback, NetworkErrorCallback error) { - step1(success1 -> { - String samlLocation = success1.get("Location"); - mFULogin.fulogin(samlLocation, username, password, samlResponse -> { - step5(samlResponse, success5 -> { - String shibsessionKey = success5.get("shibsessionKey"); - String shibsessionName = success5.get("shibsessionName"); - step6(shibsessionKey, shibsessionName, success6 -> { - String kvvJSESSIONID = success6.get("JSESSIONID"); - LoginTokenKVV token = new LoginTokenKVV(username, kvvJSESSIONID); - callback.onResponse(token); + step0(username, success -> { + step1(success1 -> { + String samlLocation = success1.get("Location"); + mFULogin.fulogin(samlLocation, username, password, samlResponse -> { + step5(samlResponse, success5 -> { + String shibsessionKey = success5.get("shibsessionKey"); + String shibsessionName = success5.get("shibsessionName"); + step6(shibsessionKey, shibsessionName, success6 -> { + String kvvJSESSIONID = success6.get("JSESSIONID"); + LoginTokenKVV token = new LoginTokenKVV(username, kvvJSESSIONID); + callback.onResponse(token); + }, error); }, error); }, error); }, error); }, error); } + private void step0(String username, final NetworkCallback callback, final NetworkErrorCallback errorCallback) { + get(String.format("https://kvv.imp.fu-berlin.de/direct/profile/%s", username), null, result -> { + callback.onResponse(true); + }, error -> { + if (error.networkResponse.statusCode == 500) { + errorCallback.onError(new NetworkError(100101, error.networkResponse.statusCode, "KVV not available!")); + } else { + callback.onResponse(true); + } + }); + } + /* 1= GET https://kvv.imp.fu-berlin.de/Shibboleth.sso/Login?entityID=https://identity.fu-berlin.de/idp-fub -> Location-Header: https://identity.fu-berlin.de/idp-fub/profile/SAML2/Redirect/SSO?SAMLResponse=[SAMLResponse]&RelayState=[RelayState]