Loading app/src/main/java/com/nextcloud/android/sso/InputStreamBinder.java +11 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.Binder; import android.os.ParcelFileDescriptor; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.nextcloud.android.sso.aidl.IInputStreamService; Loading Loading @@ -345,6 +346,7 @@ public class InputStreamBinder extends IInputStreamService.Stub { method.setQueryString(convertMapToNVP(request.getParameter())); } method.addRequestHeader("OCS-APIREQUEST", "true"); addAccessTokenHeader(account, method); for (Map.Entry<String, List<String>> header : request.getHeader().entrySet()) { // https://stackoverflow.com/a/3097052 Loading Loading @@ -413,6 +415,7 @@ public class InputStreamBinder extends IInputStreamService.Stub { } method.addRequestHeader("OCS-APIREQUEST", "true"); addAccessTokenHeader(account, method); for (Map.Entry<String, List<String>> header : request.getHeader().entrySet()) { // https://stackoverflow.com/a/3097052 Loading Loading @@ -447,6 +450,14 @@ public class InputStreamBinder extends IInputStreamService.Stub { } } private void addAccessTokenHeader(@NonNull Account account, @NonNull HttpMethodBase method) { String token = AccountManagerUtils.getAccessToken(context, account); if (token != null) { method.addRequestHeader("Authorization", "Bearer " + token); method.addRequestHeader("OIDC-LOGIN-WITH-TOKEN", "true"); } } private static String getAcountPwd(Account account, Context ctx) throws AccountUtils.AccountNotFoundException { return AccountManager.get(ctx).getPassword(account); } Loading app/src/main/java/com/nextcloud/android/utils/AccountManagerUtils.java +26 −0 Original line number Diff line number Diff line Loading @@ -23,8 +23,16 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import net.openid.appauth.AuthState; import org.json.JSONException; import java.util.logging.Level; import at.bitfire.davdroid.Constants; import at.bitfire.davdroid.R; import at.bitfire.davdroid.log.Logger; import at.bitfire.davdroid.settings.AccountSettings; public final class AccountManagerUtils { Loading Loading @@ -54,4 +62,22 @@ public final class AccountManagerUtils { return context.getString(R.string.eelo_account_type); } @Nullable public static String getAccessToken(@NonNull Context context, @NonNull Account account) { AccountManager accountManager = AccountManager.get(context); String authStateString = accountManager.getUserData(account, AccountSettings.KEY_AUTH_STATE); if (authStateString == null) { return null; } try { AuthState authState = AuthState.jsonDeserialize(authStateString); return authState.getAccessToken(); } catch (JSONException e) { Logger.INSTANCE.getLog().log(Level.SEVERE, "failed to deserialize authState", e); } return null; } } Loading
app/src/main/java/com/nextcloud/android/sso/InputStreamBinder.java +11 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.Binder; import android.os.ParcelFileDescriptor; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.nextcloud.android.sso.aidl.IInputStreamService; Loading Loading @@ -345,6 +346,7 @@ public class InputStreamBinder extends IInputStreamService.Stub { method.setQueryString(convertMapToNVP(request.getParameter())); } method.addRequestHeader("OCS-APIREQUEST", "true"); addAccessTokenHeader(account, method); for (Map.Entry<String, List<String>> header : request.getHeader().entrySet()) { // https://stackoverflow.com/a/3097052 Loading Loading @@ -413,6 +415,7 @@ public class InputStreamBinder extends IInputStreamService.Stub { } method.addRequestHeader("OCS-APIREQUEST", "true"); addAccessTokenHeader(account, method); for (Map.Entry<String, List<String>> header : request.getHeader().entrySet()) { // https://stackoverflow.com/a/3097052 Loading Loading @@ -447,6 +450,14 @@ public class InputStreamBinder extends IInputStreamService.Stub { } } private void addAccessTokenHeader(@NonNull Account account, @NonNull HttpMethodBase method) { String token = AccountManagerUtils.getAccessToken(context, account); if (token != null) { method.addRequestHeader("Authorization", "Bearer " + token); method.addRequestHeader("OIDC-LOGIN-WITH-TOKEN", "true"); } } private static String getAcountPwd(Account account, Context ctx) throws AccountUtils.AccountNotFoundException { return AccountManager.get(ctx).getPassword(account); } Loading
app/src/main/java/com/nextcloud/android/utils/AccountManagerUtils.java +26 −0 Original line number Diff line number Diff line Loading @@ -23,8 +23,16 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import net.openid.appauth.AuthState; import org.json.JSONException; import java.util.logging.Level; import at.bitfire.davdroid.Constants; import at.bitfire.davdroid.R; import at.bitfire.davdroid.log.Logger; import at.bitfire.davdroid.settings.AccountSettings; public final class AccountManagerUtils { Loading Loading @@ -54,4 +62,22 @@ public final class AccountManagerUtils { return context.getString(R.string.eelo_account_type); } @Nullable public static String getAccessToken(@NonNull Context context, @NonNull Account account) { AccountManager accountManager = AccountManager.get(context); String authStateString = accountManager.getUserData(account, AccountSettings.KEY_AUTH_STATE); if (authStateString == null) { return null; } try { AuthState authState = AuthState.jsonDeserialize(authStateString); return authState.getAccessToken(); } catch (JSONException e) { Logger.INSTANCE.getLog().log(Level.SEVERE, "failed to deserialize authState", e); } return null; } }