Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-06-17 18:58:00 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-06-17 19:14:01 +0300
commita220f84861447cfd860fd2b5110b28501903efcf (patch)
treeedc39b0d24ae4af5330fc75f7bf6d1da0ee28db5 /app/src/main/java/it/niedermann/nextcloud/deck/util
parentf0c884f2e3c9accef8564beabd8f0932117d72d9 (diff)
Fix #531 Issue with Glide SSO module
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/util')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnOriginHeader.java38
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnStreamFetcher.java18
2 files changed, 51 insertions, 5 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnOriginHeader.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnOriginHeader.java
new file mode 100644
index 000000000..0c7d1e5a2
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnOriginHeader.java
@@ -0,0 +1,38 @@
+package it.niedermann.nextcloud.deck.util.glide;
+
+import androidx.annotation.NonNull;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.model.Headers;
+import com.bumptech.glide.load.model.LazyHeaders;
+import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.model.SingleSignOnAccount;
+
+import java.util.Map;
+
+import it.niedermann.nextcloud.deck.model.Account;
+
+public class SingleSignOnOriginHeader implements Headers {
+
+ private LazyHeaders headers;
+
+ /**
+ * Use this header and set the {@link SingleSignOnAccount} name property as value
+ * Format of the value needs to be
+ */
+ public static final String X_HEADER_SSO_ACCOUNT_NAME = "X-SSO-Account-Name";
+
+ /**
+ * Use this as {@link Headers} if you want to do a {@link Glide} request for an {@link SingleSignOnAccount} which is not set by {@link SingleAccountHelper} as current {@link SingleSignOnAccount}.
+ *
+ * @param account Account from which host the request should be fired
+ */
+ public SingleSignOnOriginHeader(@NonNull Account account) {
+ this.headers = new LazyHeaders.Builder().addHeader(X_HEADER_SSO_ACCOUNT_NAME, account.getName()).build();
+ }
+
+ @Override
+ public Map<String, String> getHeaders() {
+ return this.headers.getHeaders();
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnStreamFetcher.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnStreamFetcher.java
index 4cf16d2c5..ad0c5cd33 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnStreamFetcher.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/glide/SingleSignOnStreamFetcher.java
@@ -8,6 +8,7 @@ import com.bumptech.glide.Priority;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.load.model.GlideUrl;
+import com.nextcloud.android.sso.AccountImporter;
import com.nextcloud.android.sso.aidl.NextcloudRequest;
import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.api.Response;
@@ -27,6 +28,8 @@ import java.util.Map;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.api.GsonConfig;
+import static it.niedermann.nextcloud.deck.util.glide.SingleSignOnOriginHeader.X_HEADER_SSO_ACCOUNT_NAME;
+
/**
* Fetches an {@link InputStream} using the Nextcloud SSO library.
@@ -48,12 +51,17 @@ public class SingleSignOnStreamFetcher implements DataFetcher<InputStream> {
@Override
public void loadData(@NonNull Priority priority, @NonNull final DataCallback<? super InputStream> callback) {
- NextcloudAPI client = null;
+ NextcloudAPI client;
try {
- SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context);
+ final SingleSignOnAccount ssoAccount;
+ if (url.getHeaders().containsKey(X_HEADER_SSO_ACCOUNT_NAME)) {
+ ssoAccount = AccountImporter.getSingleSignOnAccount(context, url.getHeaders().get(X_HEADER_SSO_ACCOUNT_NAME));
+ } else {
+ ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context);
+ }
client = INITIALIZED_APIs.get(ssoAccount.name);
boolean didInitialize = false;
- if (client == null){
+ if (client == null) {
client = new NextcloudAPI(context, ssoAccount, GsonConfig.getGson(), new NextcloudAPI.ApiConnectedListener() {
@Override
public void onConnected() {
@@ -69,7 +77,7 @@ public class SingleSignOnStreamFetcher implements DataFetcher<InputStream> {
didInitialize = true;
}
- NextcloudRequest.Builder requestBuilder = null;
+ NextcloudRequest.Builder requestBuilder;
try {
requestBuilder = new NextcloudRequest.Builder()
.setMethod(METHOD_GET)
@@ -86,7 +94,7 @@ public class SingleSignOnStreamFetcher implements DataFetcher<InputStream> {
} catch (MalformedURLException e) {
callback.onLoadFailed(e);
} catch (TokenMismatchException e) {
- if (!didInitialize){
+ if (!didInitialize) {
DeckLog.warn("SSO Glide loader failed with TokenMismatchException, trying to re-initialize...");
client.stop();
INITIALIZED_APIs.remove(ssoAccount.name);