Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5ee959d
Create shareExtension.ts
gerzonc Feb 17, 2022
6ad4e14
update interfaces, initialState for shareExtension and add closeShare…
gerzonc Feb 17, 2022
4b98569
dehydrate closeShareExtension and shareExtension
gerzonc Feb 17, 2022
4960d82
Fix lint errors
gerzonc Feb 17, 2022
0103921
remove unused imports
gerzonc Feb 17, 2022
77f6251
add this context
gerzonc Feb 24, 2022
2255749
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
gerzonc Feb 24, 2022
dbe928b
remove this context
gerzonc Feb 24, 2022
47059f8
ts-ignore
gerzonc Feb 24, 2022
412d03d
remove ts-ignore, create ICredentials interface and login method to sdk
gerzonc Feb 25, 2022
a1a65d8
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
gerzonc Feb 25, 2022
66869ff
remove unused property
gerzonc Feb 25, 2022
3a42fbf
Merge branch 'chore.dehydrate-share-extension-from-rocketchatjs' of h…
gerzonc Feb 25, 2022
cf3c3e1
undo changes
gerzonc Feb 25, 2022
c2b7691
missing change
gerzonc Feb 25, 2022
f86f175
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
gerzonc Mar 4, 2022
8e0895e
remove: `this` context from `shareExtensionInit`
gerzonc Mar 4, 2022
34ca14c
merge develop
diegolmello Mar 10, 2022
f3f52ba
ts fix
diegolmello Mar 10, 2022
2a88737
Mostly working
diegolmello Mar 14, 2022
1f023c3
Prevent rerender
diegolmello Mar 14, 2022
8664080
Refactor sdk
diegolmello Mar 14, 2022
9babc75
Cleanup
diegolmello Mar 14, 2022
224e2cc
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
diegolmello Mar 14, 2022
be4c1a1
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
dnlsilva Mar 15, 2022
eefcd5f
Merge branch 'develop' into chore.dehydrate-share-extension-from-rock…
diegolmello Mar 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/lib/database/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export const getDatabase = (database = ''): Database => {
};

interface IDatabases {
shareDB?: TAppDatabase;
shareDB?: TAppDatabase | null;
serversDB: TServerDatabase;
activeDB?: TAppDatabase;
}
Expand Down
83 changes: 5 additions & 78 deletions app/lib/rocketchat/rocketchat.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,17 @@ import { InteractionManager } from 'react-native';
import RNFetchBlob from 'rn-fetch-blob';
import { setActiveUsers } from '../../actions/activeUsers';
import { connectRequest, connectSuccess, disconnect } from '../../actions/connect';
import { encryptionInit } from '../../actions/encryption';
import { loginRequest, setLoginServices, setUser } from '../../actions/login';
import { updatePermission } from '../../actions/permissions';
import { selectServerFailure } from '../../actions/server';
import { updateSettings } from '../../actions/settings';
import { shareSelectServer, shareSetSettings, shareSetUser } from '../../actions/share';
import defaultSettings from '../../constants/settings';
import I18n from '../../i18n';
import { getDeviceToken } from '../../notifications/push';
import { getBundleId, isIOS } from '../../utils/deviceInfo';
import EventEmitter from '../../utils/events';
import fetch from '../../utils/fetch';
import log from '../../utils/log';
import SSLPinning from '../../utils/sslPinning';
import { twoFactor } from '../../utils/twoFactor';
import { useSsl } from '../../utils/url';
import database from '../database';
Expand Down Expand Up @@ -65,7 +62,8 @@ import getUserInfo from './services/getUserInfo';
// Services
import sdk from './services/sdk';
import toggleFavorite from './services/toggleFavorite';
import * as restAPis from './services/restApi';
import * as restApis from './services/restApi';
import { shareExtensionInit, closeShareExtension } from './services/shareExtension';

const TOKEN_KEY = 'reactnativemeteor_usertoken';
const CURRENT_SERVER = 'currentServer';
Expand All @@ -82,7 +80,7 @@ const RocketChat = {
TOKEN_KEY,
CURRENT_SERVER,
CERTIFICATE_KEY,
...restAPis,
...restApis,
callJitsi,
callJitsiWithoutServer,
async subscribeRooms() {
Expand Down Expand Up @@ -393,79 +391,8 @@ const RocketChat = {
resolve();
});
},

async shareExtensionInit(server) {
database.setShareDB(server);

try {
const certificate = await UserPreferences.getStringAsync(`${RocketChat.CERTIFICATE_KEY}-${server}`);
await SSLPinning.setCertificate(certificate, server);
} catch {
// Do nothing
}

this.shareSDK = sdk.disconnect();
this.shareSDK = sdk.initialize(server);

// set Server
const currentServer = { server };
const serversDB = database.servers;
const serversCollection = serversDB.get('servers');
try {
const serverRecord = await serversCollection.find(server);
currentServer.version = serverRecord.version;
} catch {
// Record not found
}
reduxStore.dispatch(shareSelectServer(currentServer));

RocketChat.setCustomEmojis();

try {
// set Settings
const settings = ['Accounts_AvatarBlockUnauthenticatedAccess'];
const db = database.active;
const settingsCollection = db.get('settings');
const settingsRecords = await settingsCollection.query(Q.where('id', Q.oneOf(settings))).fetch();
const parsed = Object.values(settingsRecords).map(item => ({
_id: item.id,
valueAsString: item.valueAsString,
valueAsBoolean: item.valueAsBoolean,
valueAsNumber: item.valueAsNumber,
valueAsArray: item.valueAsArray,
_updatedAt: item._updatedAt
}));
reduxStore.dispatch(shareSetSettings(this.parseSettings(parsed)));

// set User info
const userId = await UserPreferences.getStringAsync(`${RocketChat.TOKEN_KEY}-${server}`);
const userCollections = serversDB.get('users');
let user = null;
if (userId) {
const userRecord = await userCollections.find(userId);
user = {
id: userRecord.id,
token: userRecord.token,
username: userRecord.username,
roles: userRecord.roles
};
}
reduxStore.dispatch(shareSetUser(user));
await RocketChat.login({ resume: user.token });
reduxStore.dispatch(encryptionInit());
} catch (e) {
log(e);
}
},
closeShareExtension() {
this.shareSDK = sdk.disconnect();
database.share = null;

reduxStore.dispatch(shareSelectServer({}));
reduxStore.dispatch(shareSetUser({}));
reduxStore.dispatch(shareSetSettings({}));
},

shareExtensionInit,
closeShareExtension,
async e2eFetchMyKeys() {
// RC 0.70.0
const sdk = this.shareSDK || this.sdk;
Expand Down
92 changes: 92 additions & 0 deletions app/lib/rocketchat/services/shareExtension.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import { Q } from '@nozbe/watermelondb';

import { shareSetSettings, shareSelectServer, shareSetUser } from '../../../actions/share';
import SSLPinning from '../../../utils/sslPinning';
import log from '../../../utils/log';
import { IShareServer, IShareUser } from '../../../reducers/share';
import UserPreferences from '../../userPreferences';
import database from '../../database';
import RocketChat from '..';
import { encryptionInit } from '../../../actions/encryption';
import { store } from '../../auxStore';
import sdk from './sdk';

export async function shareExtensionInit(server: string) {
Comment thread
gerzonc marked this conversation as resolved.
database.setShareDB(server);

try {
const certificate = await UserPreferences.getStringAsync(`${RocketChat.CERTIFICATE_KEY}-${server}`);
if (SSLPinning && certificate) {
await SSLPinning.setCertificate(certificate, server);
}
} catch {
// Do nothing
}

sdk.disconnect();
sdk.initialize(server);

// set Server
const currentServer: IShareServer = {
server,
version: ''
};
const serversDB = database.servers;
const serversCollection = serversDB.get('servers');
try {
const serverRecord = await serversCollection.find(server);
currentServer.version = serverRecord.version;
} catch {
// Record not found
}
store.dispatch(shareSelectServer(currentServer));

RocketChat.setCustomEmojis();

try {
// set Settings
const settings = ['Accounts_AvatarBlockUnauthenticatedAccess'];
const db = database.active;
const settingsCollection = db.get('settings');
const settingsRecords = await settingsCollection.query(Q.where('id', Q.oneOf(settings))).fetch();
const parsed = Object.values(settingsRecords).map(item => ({
_id: item.id,
valueAsString: item.valueAsString,
valueAsBoolean: item.valueAsBoolean,
valueAsNumber: item.valueAsNumber,
valueAsArray: item.valueAsArray,
_updatedAt: item._updatedAt
}));
store.dispatch(shareSetSettings(RocketChat.parseSettings(parsed)));

// set User info
const userId = await UserPreferences.getStringAsync(`${RocketChat.TOKEN_KEY}-${server}`);
const userCollections = serversDB.get('users');
let user = null;
if (userId) {
const userRecord = await userCollections.find(userId);
user = {
id: userRecord.id,
token: userRecord.token,
username: userRecord.username,
roles: userRecord.roles
};
}
store.dispatch(shareSetUser(user as IShareUser));
if (user) {
await RocketChat.login({ resume: user.token });
}
store.dispatch(encryptionInit());
} catch (e) {
log(e);
}
}

export function closeShareExtension() {
sdk.disconnect();
database.share = null;

store.dispatch(shareSelectServer({}));
store.dispatch(shareSetUser({}));
store.dispatch(shareSetSettings({}));
}
16 changes: 8 additions & 8 deletions app/reducers/share.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ import { TActionsShare } from '../actions/share';
import { SHARE } from '../actions/actionsTypes';

export interface IShareServer {
server: string;
version: string;
server?: string;
version?: string;
}

export type TShareSettings = Record<string, string | number | boolean>;

export interface IShareUser {
id: string;
token: string;
username: string;
roles: string[];
id?: string;
token?: string;
username?: string;
roles?: string[];
}

export interface IShare {
Expand All @@ -22,8 +22,8 @@ export interface IShare {
}

export const initialState: IShare = {
user: {} as IShareUser,
server: {} as IShareServer,
user: {},
server: {},
settings: {}
};

Expand Down