diff --git a/app/components/file_attachment_list/file_attachment_image.js b/app/components/file_attachment_list/file_attachment_image.js index 0b2b6c488..1859c23a2 100644 --- a/app/components/file_attachment_list/file_attachment_image.js +++ b/app/components/file_attachment_list/file_attachment_image.js @@ -57,11 +57,10 @@ export default class FileAttachmentImage extends PureComponent { const {file} = props; if (file && file.id) { - const headers = {Authorization: `Bearer ${Client4.getToken()}`}; - const preloadImages = [{uri: Client4.getFileThumbnailUrl(file.id), headers}]; + const preloadImages = [{uri: Client4.getFileThumbnailUrl(file.id)}]; if (isGif(file)) { - preloadImages.push({uri: Client4.getFileUrl(file.id), headers}); + preloadImages.push({uri: Client4.getFileUrl(file.id)}); } FastImage.preload(preloadImages); diff --git a/app/components/progressive_image/__snapshots__/progressive_image.test.js.snap b/app/components/progressive_image/__snapshots__/progressive_image.test.js.snap index 5935bb753..6b1c91027 100644 --- a/app/components/progressive_image/__snapshots__/progressive_image.test.js.snap +++ b/app/components/progressive_image/__snapshots__/progressive_image.test.js.snap @@ -12,9 +12,6 @@ exports[`ProgressiveImage should match snapshot 1`] = ` resizeMode="contain" source={ Object { - "headers": Object { - "Authorization": "Bearer ", - }, "uri": "https://images.com/image.png", } } diff --git a/app/components/progressive_image/progressive_image.js b/app/components/progressive_image/progressive_image.js index 0a5403785..595fb876e 100644 --- a/app/components/progressive_image/progressive_image.js +++ b/app/components/progressive_image/progressive_image.js @@ -75,10 +75,9 @@ export default class ProgressiveImage extends PureComponent { load = () => { const {imageUri, thumbnailUri} = this.props; - const headers = {Authorization: `Bearer ${Client4.getToken()}`}; if (thumbnailUri && imageUri) { - FastImage.preload([{uri: imageUri, headers}]); + FastImage.preload([{uri: imageUri}]); this.setThumbnail(thumbnailUri); } else if (imageUri) { this.setImage(imageUri); @@ -184,11 +183,10 @@ export default class ProgressiveImage extends PureComponent { } let source; - const headers = {Authorization: `Bearer ${Client4.getToken()}`}; if (hasPreview && !isImageReady) { - source = {uri: thumb, headers}; + source = {uri: thumb}; } else if (isImageReady) { - source = {uri, headers}; + source = {uri}; } return ( diff --git a/app/mattermost.js b/app/mattermost.js index 9e2fc2e28..dc84e70a3 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -22,6 +22,7 @@ import store from 'app/store'; import {waitForHydration} from 'app/store/utils'; import EphemeralStore from 'app/store/ephemeral_store'; import telemetry from 'app/telemetry'; +import {validatePreviousVersion} from 'app/utils/general'; import pushNotificationsUtils from 'app/utils/push_notifications'; const init = async () => { @@ -52,8 +53,10 @@ const launchApp = (credentials) => { if (credentials) { waitForHydration(store, async () => { - store.dispatch(loadMe()); - resetToChannel({skipMetrics: true}); + if (validatePreviousVersion(store, EphemeralStore.prevAppVersion)) { + store.dispatch(loadMe()); + resetToChannel({skipMetrics: true}); + } }); } else { resetToSelectServer(emmProvider.allowOtherServers); diff --git a/app/store/middleware.js b/app/store/middleware.js index 05a8cbbb7..7aba6b7f0 100644 --- a/app/store/middleware.js +++ b/app/store/middleware.js @@ -2,9 +2,11 @@ // See LICENSE.txt for license information. import DeviceInfo from 'react-native-device-info'; +import semver from 'semver/preload'; import {ViewTypes} from 'app/constants'; import initialState from 'app/initial_state'; +import EphemeralStore from 'app/store/ephemeral_store'; import { captureException, @@ -21,6 +23,15 @@ export function messageRetention(store) { return next(action); } + if (!EphemeralStore.prevAppVersion) { + const version = DeviceInfo.getVersion(); + const major = semver.major(version); + const minor = semver.minor(version); + const patch = semver.patch(version); + const prevAppVersion = `${major}.${parseInt(minor, 10) - 1}.${patch}`; + EphemeralStore.prevAppVersion = app?.version || prevAppVersion; + } + // When a new version of the app has been detected if (!app || !app.version || app.version !== DeviceInfo.getVersion() || app.build !== DeviceInfo.getBuildNumber()) { return next(resetStateForNewVersion(action)); diff --git a/app/utils/general.js b/app/utils/general.js index 66779665a..4dfba8212 100644 --- a/app/utils/general.js +++ b/app/utils/general.js @@ -6,6 +6,10 @@ import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; import {Posts} from 'mattermost-redux/constants'; +import {logout} from 'app/actions/views/user'; + +const INVALID_VERSIONS = ['1.29.0']; + export function fromAutoResponder(post) { return Boolean(post.type && (post.type === Posts.SYSTEM_AUTO_RESPONDER)); } @@ -81,4 +85,13 @@ export function throttle(fn, limit, ...args) { export function isPendingPost(postId, userId) { return postId.startsWith(userId); +} + +export function validatePreviousVersion(store, version) { + if (INVALID_VERSIONS.includes(version)) { + store.dispatch(logout()); + return false; + } + + return true; } \ No newline at end of file diff --git a/patches/react-native-fast-image+8.1.5.patch b/patches/react-native-fast-image+8.1.5.patch new file mode 100644 index 000000000..ba6b38a40 --- /dev/null +++ b/patches/react-native-fast-image+8.1.5.patch @@ -0,0 +1,56 @@ +diff --git a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java +new file mode 100644 +index 0000000..f2306f6 +--- /dev/null ++++ b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageCookieJar.java +@@ -0,0 +1,38 @@ ++package com.dylanvann.fastimage; ++ ++import android.webkit.CookieManager; ++ ++import java.util.Collections; ++import java.util.List; ++ ++import okhttp3.Cookie; ++import okhttp3.CookieJar; ++import okhttp3.HttpUrl; ++ ++public class FastImageCookieJar implements CookieJar { ++ private CookieManager cookieManager; ++ ++ private CookieManager getCookieManager() { ++ if (cookieManager == null) { ++ cookieManager = CookieManager.getInstance(); ++ } ++ ++ return cookieManager; ++ } ++ ++ @Override ++ public void saveFromResponse(HttpUrl url, List cookies) { ++ // Do nothing ++ } ++ ++ @Override ++ public List loadForRequest(HttpUrl url) { ++ String cookie = getCookieManager().getCookie(url.toString()); ++ ++ if (cookie == null || cookie.isEmpty()) { ++ return Collections.emptyList(); ++ } ++ ++ return Collections.singletonList(Cookie.parse(url, cookie)); ++ } ++} +diff --git a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java +index 2214f04..bfb9895 100644 +--- a/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java ++++ b/node_modules/react-native-fast-image/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java +@@ -45,6 +45,7 @@ public class FastImageOkHttpProgressGlideModule extends LibraryGlideModule { + OkHttpClient client = OkHttpClientProvider + .getOkHttpClient() + .newBuilder() ++ .cookieJar(new FastImageCookieJar()) + .addInterceptor(createInterceptor(progressListener)) + .build(); + OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client);