From 1dbc5b7a89955213c9ba288dd77a757f0cb45858 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 2 Nov 2022 16:47:42 +0100 Subject: [PATCH] Get token when classic way failed (openId) --- .../activities/WebviewConnectActivity.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java index f33fecf3d..faa2e44a8 100644 --- a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java @@ -36,6 +36,8 @@ import android.view.View; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.WebChromeClient; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; @@ -44,6 +46,8 @@ import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; import androidx.preference.PreferenceManager; +import java.util.Iterator; +import java.util.Map; import java.util.regex.Matcher; import app.fedilab.android.BaseMainActivity; @@ -67,6 +71,7 @@ public class WebviewConnectActivity extends BaseActivity { private String login_url; private boolean requestedAdmin; + @SuppressWarnings("deprecation") public static void clearCookies(Context context) { @@ -193,6 +198,57 @@ public class WebviewConnectActivity extends BaseActivity { }*/ + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + if (request.getUrl().toString().contains(currentInstanceLogin + "/api/v1")) { + request.getRequestHeaders(); + Map requestHeaders = request.getRequestHeaders(); + Iterator> it = requestHeaders.entrySet().iterator(); + String token = null; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (pair.getKey().equals("Authorization")) { + token = pair.getValue(); + break; + } + it.remove(); + } + if (token != null) { + AccountsVM accountsVM = new ViewModelProvider(WebviewConnectActivity.this).get(AccountsVM.class); + String finalToken = token; + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + accountsVM.getConnectedAccount(currentInstanceLogin, finalToken).observe(WebviewConnectActivity.this, mastodonAccount -> { + if (mastodonAccount != null) { + Account account = new Account(); + account.client_id = client_idLogin; + account.client_secret = client_secretLogin; + account.token = finalToken; + account.api = apiLogin; + account.software = softwareLogin; + account.instance = currentInstanceLogin; + account.mastodon_account = mastodonAccount; + account.user_id = mastodonAccount.id; + //We check if user have really moderator rights + if (requestedAdmin) { + AdminVM adminVM = new ViewModelProvider(WebviewConnectActivity.this).get(AdminVM.class); + adminVM.getAccount(account.instance, account.token, account.user_id).observe(WebviewConnectActivity.this, adminAccount -> { + account.admin = adminAccount != null; + proceedLogin(WebviewConnectActivity.this, account); + }); + } else { + proceedLogin(WebviewConnectActivity.this, account); + } + } else { + Toasty.error(WebviewConnectActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); + } + }); + }; + mainHandler.post(myRunnable); + } + } + return super.shouldInterceptRequest(view, request); + } + @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { super.shouldOverrideUrlLoading(view, url);