diff --git a/lib/actions/link-actions.js b/lib/actions/link-actions.js --- a/lib/actions/link-actions.js +++ b/lib/actions/link-actions.js @@ -1,4 +1,5 @@ // @flow +import * as React from 'react'; import { extractKeyserverIDFromID } from '../keyserver-conn/keyserver-call-utils.js'; import type { CallKeyserverEndpoint } from '../keyserver-conn/keyserver-conn-types.js'; @@ -13,6 +14,7 @@ } from '../types/link-types.js'; import type { CallSingleKeyserverEndpoint } from '../utils/call-single-keyserver-endpoint.js'; import { useKeyserverCall } from '../utils/keyserver-call.js'; +import { ashoatKeyserverID } from '../utils/validation-utils.js'; const verifyInviteLinkActionTypes = Object.freeze({ started: 'VERIFY_INVITE_LINK_STARTED', @@ -22,14 +24,20 @@ const verifyInviteLink = ( callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint, - ): (( - request: InviteLinkVerificationRequest, - ) => Promise) => - async request => { - const response = await callSingleKeyserverEndpoint( + ): ((input: { + +request: InviteLinkVerificationRequest, + +keyserverID: string, + }) => Promise) => + async input => { + const { request, keyserverID } = input; + const requests = { + [keyserverID]: request, + }; + const responses = await callSingleKeyserverEndpoint( 'verify_invite_link', - request, + requests, ); + const response = responses[keyserverID]; if (response.status === 'valid' || response.status === 'already_joined') { return { status: response.status, @@ -41,6 +49,34 @@ }; }; +function useVerifyInviteLink(keyserverOverride?: { + +keyserverID: string, + +keyserverURL: string, +}): ( + request: InviteLinkVerificationRequest, +) => Promise { + const keyserverID = keyserverOverride?.keyserverID ?? ashoatKeyserverID; + let paramOverride = null; + if (keyserverOverride) { + paramOverride = { + keyserverInfos: { + [keyserverOverride.keyserverID]: { + urlPrefix: keyserverOverride.keyserverURL, + }, + }, + }; + } + const callVerifyInviteLink = useKeyserverCall( + verifyInviteLink, + paramOverride, + ); + return React.useCallback( + (request: InviteLinkVerificationRequest) => + callVerifyInviteLink({ request, keyserverID }), + [callVerifyInviteLink, keyserverID], + ); +} + const fetchPrimaryInviteLinkActionTypes = Object.freeze({ started: 'FETCH_PRIMARY_INVITE_LINKS_STARTED', success: 'FETCH_PRIMARY_INVITE_LINKS_SUCCESS', @@ -140,7 +176,7 @@ export { verifyInviteLinkActionTypes, - verifyInviteLink, + useVerifyInviteLink, fetchPrimaryInviteLinkActionTypes, useFetchPrimaryInviteLinks, createOrUpdatePublicLinkActionTypes, diff --git a/native/navigation/deep-links-context-provider.react.js b/native/navigation/deep-links-context-provider.react.js --- a/native/navigation/deep-links-context-provider.react.js +++ b/native/navigation/deep-links-context-provider.react.js @@ -6,7 +6,7 @@ import { Linking, Platform } from 'react-native'; import { - verifyInviteLink, + useVerifyInviteLink, verifyInviteLinkActionTypes, } from 'lib/actions/link-actions.js'; import { @@ -16,7 +16,6 @@ } from 'lib/facts/links.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import type { SetState } from 'lib/types/hook-types.js'; -import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; import { @@ -82,7 +81,7 @@ const loggedIn = useSelector(isLoggedIn); const dispatchActionPromise = useDispatchActionPromise(); - const validateLink = useLegacyAshoatKeyserverCall(verifyInviteLink); + const validateLink = useVerifyInviteLink(); const navigation = useNavigation(); React.useEffect(() => { void (async () => { diff --git a/web/invite-links/invite-link-handler.react.js b/web/invite-links/invite-link-handler.react.js --- a/web/invite-links/invite-link-handler.react.js +++ b/web/invite-links/invite-link-handler.react.js @@ -3,12 +3,11 @@ import * as React from 'react'; import { - verifyInviteLink, + useVerifyInviteLink, verifyInviteLinkActionTypes, } from 'lib/actions/link-actions.js'; import { useModalContext } from 'lib/components/modal-provider.react.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; -import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; @@ -22,7 +21,7 @@ const dispatchActionPromise = useDispatchActionPromise(); const dispatch = useDispatch(); - const validateLink = useLegacyAshoatKeyserverCall(verifyInviteLink); + const validateLink = useVerifyInviteLink(); const { pushModal } = useModalContext(); React.useEffect(() => { if (!inviteSecret || !loggedIn) {