forked from Ivasoft/mattermost-mobile
Compare commits
3 Commits
v1.41.0
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce283324ae | ||
|
|
3e54975684 | ||
|
|
b14dafa57e |
@@ -132,8 +132,8 @@ android {
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60"
|
||||
versionCode 347
|
||||
versionName "1.41.0"
|
||||
versionCode 349
|
||||
versionName "1.41.1"
|
||||
multiDexEnabled = true
|
||||
testBuildType System.getProperty('testBuildType', 'debug')
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
|
||||
@@ -18,4 +18,6 @@
|
||||
<string name="timeout_description">How long in milliseconds the mobile app should wait for the server to respond.</string>
|
||||
<string name="vendor_title">EMM Vendor or Company Name</string>
|
||||
<string name="vendor_description">Name of the EMM vendor or company deploying the app. Used in help text when prompting for passcodes so users are aware why the app is being protected.</string>
|
||||
<string name="inAppSessionAuth_title">In-App Session Auth</string>
|
||||
<string name="inAppSessionAuth_description">Instead of default flow from the mobile browser, enforce SSO with the WebView.</string>
|
||||
</resources>
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
android:description="@string/inAppPinCode_description"
|
||||
android:restrictionType="string"
|
||||
android:defaultValue="false" />
|
||||
<restriction
|
||||
android:key="inAppSessionAuth"
|
||||
android:title="@string/inAppSessionAuth_title"
|
||||
android:description="@string/inAppSessionAuth_description"
|
||||
android:restrictionType="string"
|
||||
android:defaultValue="false" />
|
||||
<restriction
|
||||
android:key="blurApplicationScreen"
|
||||
android:title="@string/blurApplicationScreen_title"
|
||||
|
||||
@@ -28,6 +28,7 @@ class EMMProvider {
|
||||
|
||||
this.allowOtherServers = true;
|
||||
this.emmServerUrl = null;
|
||||
this.inAppSessionAuth = false;
|
||||
}
|
||||
|
||||
checkIfDeviceIsTrusted = () => {
|
||||
@@ -106,6 +107,8 @@ class EMMProvider {
|
||||
this.jailbreakProtection = managedConfig.jailbreakProtection === 'true';
|
||||
this.vendor = managedConfig.vendor || 'Mattermost';
|
||||
|
||||
this.inAppSessionAuth = managedConfig.inAppSessionAuth === 'true';
|
||||
|
||||
const credentials = await getAppCredentials();
|
||||
if (!credentials) {
|
||||
this.emmServerUrl = managedConfig.serverUrl;
|
||||
|
||||
@@ -11,6 +11,7 @@ import {ViewTypes} from 'app/constants';
|
||||
import tracker from 'app/utils/time_tracker';
|
||||
import {scheduleExpiredNotification} from '@actions/views/session';
|
||||
import {ssoLogin} from '@actions/views/user';
|
||||
import emmProvider from '@init/emm_provider';
|
||||
import {DispatchFunc} from '@mm-redux/types/actions';
|
||||
import {Client4} from '@mm-redux/client';
|
||||
import {getTheme} from '@mm-redux/selectors/entities/preferences';
|
||||
@@ -112,18 +113,19 @@ function SSO({intl, ssoType}: SSOProps) {
|
||||
theme,
|
||||
};
|
||||
|
||||
if (isSSOWithRedirectURLAvailable) {
|
||||
if (!isSSOWithRedirectURLAvailable || emmProvider.inAppSessionAuth === true) {
|
||||
return (
|
||||
<SSOWithRedirectURL {...props}/>
|
||||
<SSOWithWebView
|
||||
{...props}
|
||||
completeUrlPath={completeUrlPath}
|
||||
serverUrl={serverUrl}
|
||||
ssoType={ssoType}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<SSOWithWebView
|
||||
{...props}
|
||||
completeUrlPath={completeUrlPath}
|
||||
serverUrl={serverUrl}
|
||||
ssoType={ssoType}
|
||||
/>
|
||||
<SSOWithRedirectURL {...props}/>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// See LICENSE.txt for license information.
|
||||
import React from 'react';
|
||||
import {intlShape} from 'react-intl';
|
||||
import {Linking, Text, TouchableOpacity, View} from 'react-native';
|
||||
import {Linking, Platform, Text, TouchableOpacity, View} from 'react-native';
|
||||
import DeviceInfo from 'react-native-device-info';
|
||||
import {SafeAreaView} from 'react-native-safe-area-context';
|
||||
import urlParse from 'url-parse';
|
||||
@@ -57,12 +57,23 @@ function SSOWithRedirectURL({
|
||||
});
|
||||
const url = parsedUrl.toString();
|
||||
|
||||
const onError = () => setError(
|
||||
intl.formatMessage({
|
||||
id: 'mobile.oauth.failed_to_open_link',
|
||||
defaultMessage: 'The link failed to open. Please try again.',
|
||||
}),
|
||||
);
|
||||
const onError = (e: Error) => {
|
||||
let message;
|
||||
if (e && Platform.OS === 'android' && e?.message?.match(/no activity found to handle intent/i)) {
|
||||
message = intl.formatMessage({
|
||||
id: 'mobile.oauth.failed_to_open_link_no_browser',
|
||||
defaultMessage: 'The link failed to open. Please verify if a browser is installed in the current space.',
|
||||
});
|
||||
} else {
|
||||
message = intl.formatMessage({
|
||||
id: 'mobile.oauth.failed_to_open_link',
|
||||
defaultMessage: 'The link failed to open. Please try again.',
|
||||
});
|
||||
}
|
||||
setError(
|
||||
message,
|
||||
);
|
||||
};
|
||||
tryOpenURL(url, onError);
|
||||
};
|
||||
|
||||
@@ -151,6 +162,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
|
||||
fontSize: 16,
|
||||
fontWeight: '400',
|
||||
lineHeight: 23,
|
||||
textAlign: 'center',
|
||||
},
|
||||
infoContainer: {
|
||||
alignItems: 'center',
|
||||
|
||||
@@ -49,6 +49,10 @@ export function alertErrorIfInvalidPermissions(result) {
|
||||
}
|
||||
}
|
||||
|
||||
export function emptyErrorHandlingFunction(e) { // eslint-disable-line no-empty-function, @typescript-eslint/no-unused-vars
|
||||
|
||||
}
|
||||
|
||||
export function emptyFunction() { // eslint-disable-line no-empty-function
|
||||
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import {Files} from '@mm-redux/constants';
|
||||
import {getCurrentServerUrl} from '@init/credentials';
|
||||
|
||||
import {DeepLinkTypes} from '@constants';
|
||||
import {emptyFunction} from '@utils/general';
|
||||
import {emptyErrorHandlingFunction, emptyFunction} from '@utils/general';
|
||||
|
||||
const ytRegex = /(?:http|https):\/\/(?:www\.|m\.)?(?:(?:youtube\.com\/(?:(?:v\/)|(?:(?:watch|embed\/watch)(?:\/|.*v=))|(?:embed\/)|(?:user\/[^/]+\/u\/[0-9]\/)))|(?:youtu\.be\/))([^#&?]*)/;
|
||||
|
||||
@@ -186,7 +186,7 @@ export async function getURLAndMatch(href, serverURL, siteURL) {
|
||||
return {url, match};
|
||||
}
|
||||
|
||||
export function tryOpenURL(url, onError = emptyFunction, onSuccess = emptyFunction) {
|
||||
export function tryOpenURL(url, onError = emptyErrorHandlingFunction, onSuccess = emptyFunction) {
|
||||
Linking.openURL(url).
|
||||
then(onSuccess).
|
||||
catch(onError);
|
||||
|
||||
@@ -366,6 +366,7 @@
|
||||
"mobile.notification_settings.save_failed_title": "Connection issue",
|
||||
"mobile.oauth.failed_to_login": "Your login attempt failed. Please try again.",
|
||||
"mobile.oauth.failed_to_open_link": "The link failed to open. Please try again.",
|
||||
"mobile.oauth.failed_to_open_link_no_browser": "The link failed to open. Please verify if a browser is installed in the current space.",
|
||||
"mobile.oauth.restart_login": "Restart login",
|
||||
"mobile.oauth.something_wrong": "Something went wrong",
|
||||
"mobile.oauth.something_wrong.okButon": "OK",
|
||||
|
||||
@@ -6,21 +6,21 @@ GEM
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.1.0)
|
||||
aws-partitions (1.429.0)
|
||||
aws-sdk-core (3.112.0)
|
||||
aws-eventstream (1.1.1)
|
||||
aws-partitions (1.441.0)
|
||||
aws-sdk-core (3.113.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.239.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.42.0)
|
||||
aws-sdk-kms (1.43.0)
|
||||
aws-sdk-core (~> 3, >= 3.112.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.88.1)
|
||||
aws-sdk-s3 (1.93.0)
|
||||
aws-sdk-core (~> 3, >= 3.112.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sigv4 (1.2.2)
|
||||
aws-sigv4 (1.2.3)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.0.3)
|
||||
@@ -47,8 +47,8 @@ GEM
|
||||
faraday-net_http (1.0.1)
|
||||
faraday_middleware (1.0.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.2)
|
||||
fastlane (2.176.0)
|
||||
fastimage (2.2.3)
|
||||
fastlane (2.179.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.3, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -100,7 +100,7 @@ GEM
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.0)
|
||||
signet (~> 0.12)
|
||||
google-apis-core (0.2.1)
|
||||
google-apis-core (0.3.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (~> 0.14)
|
||||
httpclient (>= 2.8.1, < 3.0)
|
||||
@@ -110,17 +110,17 @@ GEM
|
||||
rexml
|
||||
signet (~> 0.14)
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.1.0)
|
||||
google-apis-iamcredentials_v1 (0.3.0)
|
||||
google-apis-core (~> 0.1)
|
||||
google-apis-storage_v1 (0.2.0)
|
||||
google-apis-storage_v1 (0.3.0)
|
||||
google-apis-core (~> 0.1)
|
||||
google-cloud-core (1.5.0)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.4.0)
|
||||
google-cloud-env (1.5.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
google-cloud-errors (1.0.1)
|
||||
google-cloud-storage (1.30.0)
|
||||
google-cloud-errors (1.1.0)
|
||||
google-cloud-storage (1.31.0)
|
||||
addressable (~> 2.5)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
@@ -128,7 +128,7 @@ GEM
|
||||
google-cloud-core (~> 1.2)
|
||||
googleauth (~> 0.9)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (0.15.1)
|
||||
googleauth (0.16.1)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -144,13 +144,13 @@ GEM
|
||||
jwt (2.2.2)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.0.2)
|
||||
mini_mime (1.1.0)
|
||||
mini_portile2 (2.5.0)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
nokogiri (1.11.1)
|
||||
nokogiri (1.11.2)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
racc (~> 1.4)
|
||||
os (1.1.1)
|
||||
@@ -163,12 +163,12 @@ GEM
|
||||
declarative-option (< 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.2.4)
|
||||
rexml (3.2.5)
|
||||
rouge (2.0.7)
|
||||
ruby2_keywords (0.0.4)
|
||||
rubyzip (2.3.0)
|
||||
security (0.1.3)
|
||||
signet (0.14.1)
|
||||
signet (0.15.0)
|
||||
addressable (~> 2.3)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
|
||||
@@ -911,7 +911,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 347;
|
||||
CURRENT_PROJECT_VERSION = 349;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -953,7 +953,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 347;
|
||||
CURRENT_PROJECT_VERSION = 349;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.41.0</string>
|
||||
<string>1.41.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@@ -37,7 +37,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>347</string>
|
||||
<string>349</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.41.0</string>
|
||||
<string>1.41.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>347</string>
|
||||
<string>349</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.41.0</string>
|
||||
<string>1.41.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>347</string>
|
||||
<string>349</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
|
||||
2
package-lock.json
generated
2
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.41.0",
|
||||
"version": "1.41.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.41.0",
|
||||
"version": "1.41.1",
|
||||
"description": "Mattermost Mobile with React Native",
|
||||
"repository": "git@github.com:mattermost/mattermost-mobile.git",
|
||||
"author": "Mattermost, Inc.",
|
||||
|
||||
Reference in New Issue
Block a user