Changeset View
Changeset View
Standalone View
Standalone View
lib/shared/crypto-utils.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | |||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { | import { | ||||
getOlmSessionInitializationData, | getOlmSessionInitializationData, | ||||
getOlmSessionInitializationDataActionTypes, | getOlmSessionInitializationDataActionTypes, | ||||
} from '../actions/user-actions.js'; | } from '../actions/user-actions.js'; | ||||
import { cookieSelector } from '../selectors/keyserver-selectors.js'; | import { cookieSelector } from '../selectors/keyserver-selectors.js'; | ||||
import { OlmSessionCreatorContext } from '../shared/olm-session-creator-context.js'; | |||||
import type { OLMOneTimeKeys, OLMPrekey } from '../types/crypto-types.js'; | import type { OLMOneTimeKeys, OLMPrekey } from '../types/crypto-types.js'; | ||||
import { useLegacyAshoatKeyserverCall } from '../utils/action-utils.js'; | import { useLegacyAshoatKeyserverCall } from '../utils/action-utils.js'; | ||||
import type { | import type { | ||||
CallSingleKeyserverEndpointOptions, | CallSingleKeyserverEndpointOptions, | ||||
CallSingleKeyserverEndpoint, | CallSingleKeyserverEndpoint, | ||||
} from '../utils/call-single-keyserver-endpoint.js'; | } from '../utils/call-single-keyserver-endpoint.js'; | ||||
import { getConfig } from '../utils/config.js'; | |||||
import { values } from '../utils/objects.js'; | import { values } from '../utils/objects.js'; | ||||
import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; | import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; | ||||
import { useSelector } from '../utils/redux-utils.js'; | import { useSelector } from '../utils/redux-utils.js'; | ||||
export type InitialNotifMessageOptions = { | export type InitialNotifMessageOptions = { | ||||
+callSingleKeyserverEndpoint?: ?CallSingleKeyserverEndpoint, | +callSingleKeyserverEndpoint?: ?CallSingleKeyserverEndpoint, | ||||
+callSingleKeyserverEndpointOptions?: ?CallSingleKeyserverEndpointOptions, | +callSingleKeyserverEndpointOptions?: ?CallSingleKeyserverEndpointOptions, | ||||
}; | }; | ||||
const initialEncryptedMessageContent = { | const initialEncryptedMessageContent = { | ||||
type: 'init', | type: 'init', | ||||
}; | }; | ||||
function useInitialNotificationsEncryptedMessage( | function useInitialNotificationsEncryptedMessage( | ||||
keyserverID: string, | keyserverID: string, | ||||
): (options?: ?InitialNotifMessageOptions) => Promise<string> { | ): (options?: ?InitialNotifMessageOptions) => Promise<string> { | ||||
const callGetOlmSessionInitializationData = useLegacyAshoatKeyserverCall( | const callGetOlmSessionInitializationData = useLegacyAshoatKeyserverCall( | ||||
getOlmSessionInitializationData, | getOlmSessionInitializationData, | ||||
); | ); | ||||
const dispatchActionPromise = useDispatchActionPromise(); | const dispatchActionPromise = useDispatchActionPromise(); | ||||
const cookie = useSelector(cookieSelector(keyserverID)); | const cookie = useSelector(cookieSelector(keyserverID)); | ||||
const olmSessionCreator = React.useContext(OlmSessionCreatorContext); | const { olmAPI } = getConfig(); | ||||
invariant(olmSessionCreator, 'Olm session creator should be set'); | |||||
const { notificationsSessionCreator } = olmSessionCreator; | |||||
return React.useCallback( | return React.useCallback( | ||||
async options => { | async options => { | ||||
const callSingleKeyserverEndpoint = options?.callSingleKeyserverEndpoint; | const callSingleKeyserverEndpoint = options?.callSingleKeyserverEndpoint; | ||||
const callSingleKeyserverEndpointOptions = | const callSingleKeyserverEndpointOptions = | ||||
options?.callSingleKeyserverEndpointOptions; | options?.callSingleKeyserverEndpointOptions; | ||||
const initDataAction = callSingleKeyserverEndpoint | const initDataAction = callSingleKeyserverEndpoint | ||||
? getOlmSessionInitializationData(callSingleKeyserverEndpoint) | ? getOlmSessionInitializationData(callSingleKeyserverEndpoint) | ||||
: callGetOlmSessionInitializationData; | : callGetOlmSessionInitializationData; | ||||
const olmSessionDataPromise = initDataAction( | const olmSessionDataPromise = initDataAction( | ||||
callSingleKeyserverEndpointOptions, | callSingleKeyserverEndpointOptions, | ||||
); | ); | ||||
void dispatchActionPromise( | void dispatchActionPromise( | ||||
getOlmSessionInitializationDataActionTypes, | getOlmSessionInitializationDataActionTypes, | ||||
olmSessionDataPromise, | olmSessionDataPromise, | ||||
); | ); | ||||
const { signedIdentityKeysBlob, notifInitializationInfo } = | const [{ signedIdentityKeysBlob, notifInitializationInfo }] = | ||||
await olmSessionDataPromise; | await Promise.all([ | ||||
olmSessionDataPromise, | |||||
olmAPI.initializeCryptoAccount(), | |||||
]); | |||||
const { notificationIdentityPublicKeys } = JSON.parse( | const { notificationIdentityPublicKeys } = JSON.parse( | ||||
signedIdentityKeysBlob.payload, | signedIdentityKeysBlob.payload, | ||||
); | ); | ||||
return await notificationsSessionCreator( | return await olmAPI.notificationsSessionCreator( | ||||
cookie, | cookie, | ||||
notificationIdentityPublicKeys, | notificationIdentityPublicKeys, | ||||
notifInitializationInfo, | notifInitializationInfo, | ||||
keyserverID, | keyserverID, | ||||
); | ); | ||||
}, | }, | ||||
[ | [ | ||||
callGetOlmSessionInitializationData, | callGetOlmSessionInitializationData, | ||||
dispatchActionPromise, | dispatchActionPromise, | ||||
notificationsSessionCreator, | olmAPI, | ||||
cookie, | cookie, | ||||
keyserverID, | keyserverID, | ||||
], | ], | ||||
); | ); | ||||
} | } | ||||
function getOneTimeKeyValues( | function getOneTimeKeyValues( | ||||
oneTimeKeys: OLMOneTimeKeys, | oneTimeKeys: OLMOneTimeKeys, | ||||
Show All 26 Lines |