keys and other JS work

This commit is contained in:
GOVINDDIXIT 2020-07-29 12:23:30 +05:30
parent 34ab660a3a
commit de264de643
10 changed files with 83 additions and 17 deletions

View File

@ -1,5 +1,6 @@
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
def isFoss = taskRequests.contains("foss") def isFoss = taskRequests.contains("foss")
def isOfficial = taskRequests.contains("official")
apply plugin: "com.android.application" apply plugin: "com.android.application"
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
@ -143,7 +144,11 @@ android {
applicationId "chat.rocket.reactnative" applicationId "chat.rocket.reactnative"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
if (isOfficial) {
versionCode OFFICIAL_VERSIONCODE as Integer
} else {
versionCode VERSIONCODE as Integer versionCode VERSIONCODE as Integer
}
versionName "4.10.0" versionName "4.10.0"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
@ -195,16 +200,19 @@ android {
foss { foss {
dimension = "type" dimension = "type"
buildConfigField "boolean", "FDROID_BUILD", "true" buildConfigField "boolean", "FDROID_BUILD", "true"
buildConfigField "boolean", "OFFICIAL_BUILD", "false"
} }
play { play {
dimension = "type" dimension = "type"
buildConfigField "boolean", "FDROID_BUILD", "false" buildConfigField "boolean", "FDROID_BUILD", "false"
buildConfigField "boolean", "OFFICIAL_BUILD", "false"
} }
official { official {
dimension = "type" dimension = "type"
applicationId = "chat.rocket.android" applicationId = "chat.rocket.android"
resValue "string", "app_name", "Rocket Chat" resValue "string", "app_name", "Rocket Chat"
buildConfigField "boolean", "FDROID_BUILD", "false" buildConfigField "boolean", "FDROID_BUILD", "false"
buildConfigField "boolean", "OFFICIAL_BUILD", "true"
} }
} }

View File

@ -32,3 +32,6 @@ FLIPPER_VERSION=0.37.0
# App properties # App properties
VERSIONCODE=999999999 VERSIONCODE=999999999
BugsnagAPIKey="" BugsnagAPIKey=""
OFFICIAL_VERSIONCODE=1
OFFICIAL_BugsnagAPIKey="0e62781637138bc11e6ad3ca14c03899"

View File

@ -0,0 +1,11 @@
// This file hosts the constants with the values used on native apps (User Defaults on iOS and Shared Preferences on Android).
import { isIOS } from '../utils/deviceInfo';
export const IDENTIFIER = isIOS ? 'group.ios.chat.rocket' : 'rocket.chat';
export const SERVERS = isIOS ? 'kServers' : 'ACCOUNTS_KEY';
export const TOKEN = isIOS ? 'kAuthToken' : 'authToken';
export const USER_ID = isIOS ? 'kUserId' : 'userId';
export const SERVER_URL = isIOS ? 'kAuthServerURL' : 'serverUrl';
export const SERVER_NAME = isIOS ? 'kServerName' : 'serverName';
export const SERVER_ICON = isIOS ? 'kServerIconURL' : 'serverLogoUrl';
export const ANDROID_PACKAGE_CONTEXT = 'chat.rocket.android';

View File

@ -1,3 +1,8 @@
import RNConfigReader from 'react-native-config-reader'; import RNConfigReader from 'react-native-config-reader';
export const isFDroidBuild = RNConfigReader.FDROID_BUILD; // Checks for undefined values
let fDroidBuild = RNConfigReader.FDROID_BUILD || false;
let officialBuild = RNConfigReader.OFFICIAL_BUILD || false;
export const isOfficialBuild = officialBuild;
export const isFDroidBuild = fDroidBuild;

View File

@ -1,6 +1,8 @@
import { getBundleId, isIOS } from '../utils/deviceInfo'; import { getBundleId, isIOS } from '../utils/deviceInfo';
import { isOfficialBuild } from './environment';
const APP_STORE_ID = '1272915472'; let appStoreID = (isOfficialBuild) ? '1148741252' :'1272915472';
const APP_STORE_ID = appStoreID;
export const PLAY_MARKET_LINK = `https://play.google.com/store/apps/details?id=${ getBundleId }`; export const PLAY_MARKET_LINK = `https://play.google.com/store/apps/details?id=${ getBundleId }`;
export const FDROID_MARKET_LINK = 'https://f-droid.org/repo/chat.rocket.android_2057.apk'; // Once link is finalised, Update this export const FDROID_MARKET_LINK = 'https://f-droid.org/repo/chat.rocket.android_2057.apk'; // Once link is finalised, Update this

View File

@ -36,8 +36,8 @@ import Toast from './containers/Toast';
import InAppNotification from './containers/InAppNotification'; import InAppNotification from './containers/InAppNotification';
import { ActionSheetProvider } from './containers/ActionSheet'; import { ActionSheetProvider } from './containers/ActionSheet';
import debounce from './utils/debounce'; import debounce from './utils/debounce';
import { isFDroidBuild } from './constants/environment'; import { isFDroidBuild, isOfficialBuild } from './constants/environment';
import { IDENTIFIER, ANDROID_PACKAGE_CONTEXT } from './constants/credentials';
RNScreens.enableScreens(); RNScreens.enableScreens();
@ -102,6 +102,13 @@ export default class Root extends React.Component {
} }
init = async() => { init = async() => {
if (isOfficialBuild) {
await RNUserDefaults.setName(IDENTIFIER);
if (isAndroid) {
await RNUserDefaults.setPackageContext(ANDROID_PACKAGE_CONTEXT);
}
}
RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme); RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme);
const [notification, deepLinking] = await Promise.all([initializePushNotifications(), Linking.getInitialURL()]); const [notification, deepLinking] = await Promise.all([initializePushNotifications(), Linking.getInitialURL()]);
const parsedDeepLinkingURL = parseDeepLinking(deepLinking); const parsedDeepLinkingURL = parseDeepLinking(deepLinking);

View File

@ -18,6 +18,7 @@ import database from '../lib/database';
import protectedFunction from '../lib/methods/helpers/protectedFunction'; import protectedFunction from '../lib/methods/helpers/protectedFunction';
import { localAuthenticate } from '../utils/localAuthentication'; import { localAuthenticate } from '../utils/localAuthentication';
import { appStart, ROOT_OUTSIDE, appReady } from '../actions/app'; import { appStart, ROOT_OUTSIDE, appReady } from '../actions/app';
import { isOfficialBuild } from '../constants/environment';
export const initLocalSettings = function* initLocalSettings() { export const initLocalSettings = function* initLocalSettings() {
const sortPreferences = yield RocketChat.getSortPreferences(); const sortPreferences = yield RocketChat.getSortPreferences();
@ -29,10 +30,14 @@ export const initLocalSettings = function* initLocalSettings() {
const restore = function* restore() { const restore = function* restore() {
try { try {
if (isOfficialBuild) {
const hasMigration = yield AsyncStorage.getItem('hasMigration');
} else {
let hasMigration; let hasMigration;
if (isIOS) { if (isIOS) {
hasMigration = yield AsyncStorage.getItem('hasMigration'); hasMigration = yield AsyncStorage.getItem('hasMigration');
} }
}
let { token, server } = yield all({ let { token, server } = yield all({
token: RNUserDefaults.get(RocketChat.TOKEN_KEY), token: RNUserDefaults.get(RocketChat.TOKEN_KEY),

View File

@ -16,9 +16,12 @@ import database from '../lib/database';
import log, { logServerVersion } from '../utils/log'; import log, { logServerVersion } from '../utils/log';
import { extractHostname } from '../utils/server'; import { extractHostname } from '../utils/server';
import I18n from '../i18n'; import I18n from '../i18n';
import { SERVERS, TOKEN, SERVER_URL } from '../constants/userDefaults'; import {
SERVERS, TOKEN, SERVER_URL, USER_ID
} from '../constants/credentials';
import { BASIC_AUTH_KEY, setBasicAuth } from '../utils/fetch'; import { BASIC_AUTH_KEY, setBasicAuth } from '../utils/fetch';
import { appStart, ROOT_INSIDE, ROOT_OUTSIDE } from '../actions/app'; import { appStart, ROOT_INSIDE, ROOT_OUTSIDE } from '../actions/app';
import { isOfficialBuild } from '../constants/environment';
const getServerInfo = function* getServerInfo({ server, raiseError = true }) { const getServerInfo = function* getServerInfo({ server, raiseError = true }) {
try { try {
@ -84,12 +87,21 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch
roles: userRecord.roles roles: userRecord.roles
}; };
} catch (e) { } catch (e) {
// We only run it if not has user on DB if (isOfficialBuild) {
// if not have user on db we check on native credentials
const servers = yield RNUserDefaults.objectForKey(SERVERS); const servers = yield RNUserDefaults.objectForKey(SERVERS);
const userCredentials = servers && servers.find(srv => srv[SERVER_URL] === server); const userCredentials = servers && servers.find(srv => srv[SERVER_URL] === server);
user = userCredentials && { user = userCredentials && {
token: userCredentials[TOKEN] token: userCredentials[TOKEN].length > userCredentials[USER_ID].length ? userCredentials[TOKEN] : userCredentials[USER_ID]
}; };
} else {
// We only run it if not has user on DB
const servers = yield RNUserDefaults.objectForKey('kServers');
const userCredentials = servers && servers.find(srv => srv['kAuthServerURL'] === server);
user = userCredentials && {
token: userCredentials['kAuthToken']
};
}
} }
} }

View File

@ -23,6 +23,7 @@ import RocketChat, { THEME_PREFERENCES_KEY } from './lib/rocketchat';
import { ThemeContext } from './theme'; import { ThemeContext } from './theme';
import { localAuthenticate } from './utils/localAuthentication'; import { localAuthenticate } from './utils/localAuthentication';
import ScreenLockedView from './views/ScreenLockedView'; import ScreenLockedView from './views/ScreenLockedView';
import { IDENTIFIER, ANDROID_PACKAGE_CONTEXT } from './constants/credentials';
// Outside Stack // Outside Stack
import WithoutServersView from './views/WithoutServersView'; import WithoutServersView from './views/WithoutServersView';
@ -35,6 +36,7 @@ import { setCurrentScreen } from './utils/log';
import AuthLoadingView from './views/AuthLoadingView'; import AuthLoadingView from './views/AuthLoadingView';
import { DimensionsContext } from './dimensions'; import { DimensionsContext } from './dimensions';
import debounce from './utils/debounce'; import debounce from './utils/debounce';
import { isOfficialBuild } from './constants/environment';
const Inside = createStackNavigator(); const Inside = createStackNavigator();
const InsideStack = () => { const InsideStack = () => {
@ -138,6 +140,13 @@ class Root extends React.Component {
} }
init = async() => { init = async() => {
if (isOfficialBuild) {
await RNUserDefaults.setName(IDENTIFIER);
if (isAndroid) {
await RNUserDefaults.setPackageContext(ANDROID_PACKAGE_CONTEXT);
}
}
RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme); RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme);
const currentServer = await RNUserDefaults.get('currentServer'); const currentServer = await RNUserDefaults.get('currentServer');
const token = await RNUserDefaults.get(RocketChat.TOKEN_KEY); const token = await RNUserDefaults.get(RocketChat.TOKEN_KEY);

View File

@ -1,3 +1,7 @@
import { isOfficialBuild } from "./app/constants/environment";
let BugSnagApiKey = (isOfficialBuild) ? '0e62781637138bc11e6ad3ca14c03899' : '';
export default { export default {
BUGSNAG_API_KEY: '' BUGSNAG_API_KEY: BugSnagApiKey
}; };