Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21f3573a authored by Fahim Salam Chowdhury's avatar Fahim Salam Chowdhury 👽
Browse files

pass accesstoken if present for nextcloud sso requests

parent eb7e3ebe
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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
@@ -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);
    }
+26 −0
Original line number Diff line number Diff line
@@ -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 {

@@ -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;
    }
}