Page MenuHomePhabricator

D9592.diff
No OneTemporary

D9592.diff

diff --git a/lib/types/crypto-types.js b/lib/types/crypto-types.js
--- a/lib/types/crypto-types.js
+++ b/lib/types/crypto-types.js
@@ -26,10 +26,10 @@
};
export type CryptoStore = {
- +primaryAccount: ?PickledOLMAccount,
- +primaryIdentityKeys: ?OLMIdentityKeys,
- +notificationAccount: ?PickledOLMAccount,
- +notificationIdentityKeys: ?OLMIdentityKeys,
+ +primaryAccount: PickledOLMAccount,
+ +primaryIdentityKeys: OLMIdentityKeys,
+ +notificationAccount: PickledOLMAccount,
+ +notificationIdentityKeys: OLMIdentityKeys,
};
export type IdentityKeysBlob = {
diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js
--- a/lib/types/redux-types.js
+++ b/lib/types/redux-types.js
@@ -155,7 +155,7 @@
export type NativeAppState = BaseAppState<>;
export type WebAppState = BaseAppState<> & {
- +cryptoStore: CryptoStore,
+ +cryptoStore: ?CryptoStore,
+pushApiPublicKey: ?string,
...
};
diff --git a/web/account/log-in-form.react.js b/web/account/log-in-form.react.js
--- a/web/account/log-in-form.react.js
+++ b/web/account/log-in-form.react.js
@@ -17,12 +17,7 @@
import OrBreak from '../components/or-break.react.js';
import { initOlm } from '../olm/olm-utils.js';
import { updateNavInfoActionType } from '../redux/action-types.js';
-import {
- setPrimaryIdentityKeys,
- setNotificationIdentityKeys,
- setPickledPrimaryAccount,
- setPickledNotificationAccount,
-} from '../redux/crypto-store-reducer.js';
+import { setCryptoStore } from '../redux/crypto-store-reducer.js';
import { useSelector } from '../redux/redux-utils.js';
function LoginForm(): React.Node {
@@ -30,21 +25,11 @@
const { data: signer } = useWalletClient();
const dispatch = useDispatch();
- const primaryIdentityPublicKeys = useSelector(
- state => state.cryptoStore.primaryIdentityKeys,
- );
- const notificationIdentityPublicKeys = useSelector(
- state => state.cryptoStore.notificationIdentityKeys,
- );
+ const cryptoStore = useSelector(state => state.cryptoStore);
React.useEffect(() => {
(async () => {
- if (
- primaryIdentityPublicKeys !== null &&
- primaryIdentityPublicKeys !== undefined &&
- notificationIdentityPublicKeys !== null &&
- notificationIdentityPublicKeys !== undefined
- ) {
+ if (cryptoStore !== null && cryptoStore !== undefined) {
return;
}
await initOlm();
@@ -54,24 +39,11 @@
const { ed25519: identityED25519, curve25519: identityCurve25519 } =
JSON.parse(identityAccount.identity_keys());
- dispatch({
- type: setPrimaryIdentityKeys,
- payload: { ed25519: identityED25519, curve25519: identityCurve25519 },
- });
-
const identityAccountPicklingKey = uuid.v4();
const pickledIdentityAccount = identityAccount.pickle(
identityAccountPicklingKey,
);
- dispatch({
- type: setPickledPrimaryAccount,
- payload: {
- picklingKey: identityAccountPicklingKey,
- pickledAccount: pickledIdentityAccount,
- },
- });
-
const notificationAccount = new olm.Account();
notificationAccount.create();
const {
@@ -79,28 +51,34 @@
curve25519: notificationCurve25519,
} = JSON.parse(notificationAccount.identity_keys());
- dispatch({
- type: setNotificationIdentityKeys,
- payload: {
- ed25519: notificationED25519,
- curve25519: notificationCurve25519,
- },
- });
-
const notificationAccountPicklingKey = uuid.v4();
const pickledNotificationAccount = notificationAccount.pickle(
notificationAccountPicklingKey,
);
dispatch({
- type: setPickledNotificationAccount,
+ type: setCryptoStore,
payload: {
- picklingKey: notificationAccountPicklingKey,
- pickledAccount: pickledNotificationAccount,
+ primaryAccount: {
+ picklingKey: identityAccountPicklingKey,
+ pickledAccount: pickledIdentityAccount,
+ },
+ primaryIdentityKeys: {
+ ed25519: identityED25519,
+ curve25519: identityCurve25519,
+ },
+ notificationAccount: {
+ picklingKey: notificationAccountPicklingKey,
+ pickledAccount: pickledNotificationAccount,
+ },
+ notificationIdentityKeys: {
+ ed25519: notificationED25519,
+ curve25519: notificationCurve25519,
+ },
},
});
})();
- }, [dispatch, notificationIdentityPublicKeys, primaryIdentityPublicKeys]);
+ }, [dispatch, cryptoStore]);
const onQRCodeLoginButtonClick = React.useCallback(() => {
dispatch({
diff --git a/web/account/qr-code-login.react.js b/web/account/qr-code-login.react.js
--- a/web/account/qr-code-login.react.js
+++ b/web/account/qr-code-login.react.js
@@ -13,7 +13,7 @@
function QrCodeLogin(): React.Node {
const [qrCodeValue, setQrCodeValue] = React.useState<?string>();
const ed25519Key = useSelector(
- state => state.cryptoStore.primaryIdentityKeys?.ed25519,
+ state => state.cryptoStore?.primaryIdentityKeys.ed25519,
);
const generateQRCode = React.useCallback(async () => {
diff --git a/web/account/siwe-login-form.react.js b/web/account/siwe-login-form.react.js
--- a/web/account/siwe-login-form.react.js
+++ b/web/account/siwe-login-form.react.js
@@ -85,7 +85,7 @@
}, [dispatchActionPromise, getSIWENonceCall, siweNonceShouldBeFetched]);
const primaryIdentityPublicKeys: ?OLMIdentityKeys = useSelector(
- state => state.cryptoStore.primaryIdentityKeys,
+ state => state.cryptoStore?.primaryIdentityKeys,
);
const signedIdentityKeysBlob: ?SignedIdentityKeysBlob =
diff --git a/web/redux/crypto-store-reducer.js b/web/redux/crypto-store-reducer.js
--- a/web/redux/crypto-store-reducer.js
+++ b/web/redux/crypto-store-reducer.js
@@ -9,52 +9,20 @@
import type { Action } from './redux-setup.js';
-const setPrimaryIdentityKeys = 'SET_PRIMARY_IDENTITY_KEYS';
-const setNotificationIdentityKeys = 'SET_NOTIFICATION_IDENTITY_KEYS';
-const setPickledPrimaryAccount = 'SET_PICKLED_PRIMARY_ACCOUNT';
-const setPickledNotificationAccount = 'SET_PICKLED_NOTIFICATION_ACCOUNT';
+const setCryptoStore = 'SET_CRYPTO_STORE';
-function reduceCryptoStore(state: CryptoStore, action: Action): CryptoStore {
- if (action.type === setPrimaryIdentityKeys) {
- return {
- ...state,
- primaryIdentityKeys: action.payload,
- };
- } else if (action.type === setNotificationIdentityKeys) {
- return {
- ...state,
- notificationIdentityKeys: action.payload,
- };
- } else if (action.type === setPickledPrimaryAccount) {
- return {
- ...state,
- primaryAccount: action.payload,
- };
- } else if (action.type === setPickledNotificationAccount) {
- return {
- ...state,
- notificationAccount: action.payload,
- };
+function reduceCryptoStore(state: ?CryptoStore, action: Action): ?CryptoStore {
+ if (action.type === setCryptoStore) {
+ return action.payload;
} else if (
action.type === logOutActionTypes.success ||
action.type === deleteAccountActionTypes.success ||
(action.type === setNewSessionActionType &&
action.payload.sessionChange.cookieInvalidated)
) {
- return {
- primaryAccount: null,
- primaryIdentityKeys: null,
- notificationAccount: null,
- notificationIdentityKeys: null,
- };
+ return null;
}
return state;
}
-export {
- setPrimaryIdentityKeys,
- setNotificationIdentityKeys,
- setPickledPrimaryAccount,
- setPickledNotificationAccount,
- reduceCryptoStore,
-};
+export { setCryptoStore, reduceCryptoStore };
diff --git a/web/redux/default-state.js b/web/redux/default-state.js
--- a/web/redux/default-state.js
+++ b/web/redux/default-state.js
@@ -39,12 +39,7 @@
},
windowActive: true,
pushApiPublicKey: null,
- cryptoStore: {
- primaryAccount: null,
- primaryIdentityKeys: null,
- notificationAccount: null,
- notificationIdentityKeys: null,
- },
+ cryptoStore: null,
windowDimensions: { width: window.width, height: window.height },
loadingStatuses: {},
calendarFilters: defaultCalendarFilters,
diff --git a/web/redux/redux-setup.js b/web/redux/redux-setup.js
--- a/web/redux/redux-setup.js
+++ b/web/redux/redux-setup.js
@@ -13,11 +13,7 @@
import { isLoggedIn } from 'lib/selectors/user-selectors.js';
import { invalidSessionDowngrade } from 'lib/shared/session-utils.js';
import type { Shape } from 'lib/types/core.js';
-import type {
- CryptoStore,
- OLMIdentityKeys,
- PickledOLMAccount,
-} from 'lib/types/crypto-types.js';
+import type { CryptoStore } from 'lib/types/crypto-types.js';
import type { DraftStore } from 'lib/types/draft-types.js';
import type { EnabledApps } from 'lib/types/enabled-apps.js';
import type { EntryStore, CalendarQuery } from 'lib/types/entry-types.js';
@@ -46,13 +42,7 @@
setInitialReduxState,
} from './action-types.js';
import { reduceCommunityPickerStore } from './community-picker-reducer.js';
-import {
- reduceCryptoStore,
- setPrimaryIdentityKeys,
- setNotificationIdentityKeys,
- setPickledNotificationAccount,
- setPickledPrimaryAccount,
-} from './crypto-store-reducer.js';
+import { reduceCryptoStore, setCryptoStore } from './crypto-store-reducer.js';
import reduceNavInfo from './nav-reducer.js';
import { onStateDifference } from './redux-debug-utils.js';
import { getVisibility } from './visibility.js';
@@ -91,7 +81,7 @@
+dataLoaded: boolean,
+windowActive: boolean,
+userPolicies: UserPolicies,
- +cryptoStore: CryptoStore,
+ +cryptoStore: ?CryptoStore,
+pushApiPublicKey: ?string,
+_persist: ?PersistState,
+commServicesAccessToken: ?string,
@@ -114,10 +104,7 @@
type: 'UPDATE_WINDOW_ACTIVE',
payload: boolean,
}
- | { +type: 'SET_PRIMARY_IDENTITY_KEYS', payload: ?OLMIdentityKeys }
- | { +type: 'SET_NOTIFICATION_IDENTITY_KEYS', payload: ?OLMIdentityKeys }
- | { +type: 'SET_PICKLED_PRIMARY_ACCOUNT', payload: ?PickledOLMAccount }
- | { +type: 'SET_PICKLED_NOTIFICATION_ACCOUNT', payload: ?PickledOLMAccount }
+ | { +type: 'SET_CRYPTO_STORE', payload: CryptoStore }
| { +type: 'SET_INITIAL_REDUX_STATE', payload: InitialReduxState };
export function reducer(oldState: AppState | void, action: Action): AppState {
@@ -196,10 +183,7 @@
if (
action.type !== updateNavInfoActionType &&
- action.type !== setPrimaryIdentityKeys &&
- action.type !== setNotificationIdentityKeys &&
- action.type !== setPickledPrimaryAccount &&
- action.type !== setPickledNotificationAccount
+ action.type !== setCryptoStore
) {
const baseReducerResult = baseReducer(state, action, onStateDifference);
state = baseReducerResult.state;
diff --git a/web/selectors/socket-selectors.js b/web/selectors/socket-selectors.js
--- a/web/selectors/socket-selectors.js
+++ b/web/selectors/socket-selectors.js
@@ -15,10 +15,9 @@
} from 'lib/selectors/socket-selectors.js';
import { createOpenSocketFunction } from 'lib/shared/socket-utils.js';
import type {
- OLMIdentityKeys,
- PickledOLMAccount,
SignedIdentityKeysBlob,
IdentityKeysBlob,
+ CryptoStore,
} from 'lib/types/crypto-types.js';
import type {
ClientServerRequest,
@@ -68,20 +67,16 @@
const getSignedIdentityKeysBlobSelector: (
state: AppState,
) => ?() => Promise<SignedIdentityKeysBlob> = createSelector(
- (state: AppState) => state.cryptoStore.primaryAccount,
- (state: AppState) => state.cryptoStore.primaryIdentityKeys,
- (state: AppState) => state.cryptoStore.notificationIdentityKeys,
- (
- primaryAccount: ?PickledOLMAccount,
- primaryIdentityKeys: ?OLMIdentityKeys,
- notificationIdentityKeys: ?OLMIdentityKeys,
- ) => {
- if (!primaryAccount || !primaryIdentityKeys || !notificationIdentityKeys) {
+ (state: AppState) => state.cryptoStore,
+ (cryptoStore: ?CryptoStore) => {
+ if (!cryptoStore) {
return null;
}
return async () => {
await initOlm();
+ const { primaryAccount, primaryIdentityKeys, notificationIdentityKeys } =
+ cryptoStore;
const primaryOLMAccount = new olm.Account();
primaryOLMAccount.unpickle(
primaryAccount.picklingKey,
diff --git a/web/selectors/tunnelbroker-selectors.js b/web/selectors/tunnelbroker-selectors.js
--- a/web/selectors/tunnelbroker-selectors.js
+++ b/web/selectors/tunnelbroker-selectors.js
@@ -8,7 +8,7 @@
export const createTunnelbrokerInitMessage: AppState => ?ConnectionInitializationMessage =
createSelector(
- state => state.cryptoStore.primaryIdentityKeys?.ed25519,
+ state => state.cryptoStore?.primaryIdentityKeys.ed25519,
state => state.commServicesAccessToken,
state => state.currentUserInfo?.id,
(

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 27, 7:36 AM (21 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2589429
Default Alt Text
D9592.diff (12 KB)

Event Timeline