diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-03-20 23:29:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-20 23:29:24 +0000 |
commit | c649ee1afa80f71f108187df5671ae85eeaeed99 (patch) | |
tree | adb5227f58811d0fe4af023184f9ffd71f66f463 /src/view/com/auth/create/CaptchaWebView.tsx | |
parent | 8ad813cd86c74a987cb81f5278c2eabbe8193db8 (diff) | |
parent | d2d4d3a09206b52fe78018b89f82471c3dd91c8a (diff) | |
download | voidsky-c649ee1afa80f71f108187df5671ae85eeaeed99.tar.zst |
Merge pull request #3217 from bluesky-social/samuel/alf-login
Use ALF for login & signup flow
Diffstat (limited to 'src/view/com/auth/create/CaptchaWebView.tsx')
-rw-r--r-- | src/view/com/auth/create/CaptchaWebView.tsx | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/view/com/auth/create/CaptchaWebView.tsx b/src/view/com/auth/create/CaptchaWebView.tsx deleted file mode 100644 index b0de8b4a4..000000000 --- a/src/view/com/auth/create/CaptchaWebView.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react' -import {WebView, WebViewNavigation} from 'react-native-webview' -import {ShouldStartLoadRequest} from 'react-native-webview/lib/WebViewTypes' -import {StyleSheet} from 'react-native' -import {CreateAccountState} from 'view/com/auth/create/state' - -const ALLOWED_HOSTS = [ - 'bsky.social', - 'bsky.app', - 'staging.bsky.app', - 'staging.bsky.dev', - 'js.hcaptcha.com', - 'newassets.hcaptcha.com', - 'api2.hcaptcha.com', -] - -export function CaptchaWebView({ - url, - stateParam, - uiState, - onSuccess, - onError, -}: { - url: string - stateParam: string - uiState?: CreateAccountState - onSuccess: (code: string) => void - onError: () => void -}) { - const redirectHost = React.useMemo(() => { - if (!uiState?.serviceUrl) return 'bsky.app' - - return uiState?.serviceUrl && - new URL(uiState?.serviceUrl).host === 'staging.bsky.dev' - ? 'staging.bsky.app' - : 'bsky.app' - }, [uiState?.serviceUrl]) - - const wasSuccessful = React.useRef(false) - - const onShouldStartLoadWithRequest = React.useCallback( - (event: ShouldStartLoadRequest) => { - const urlp = new URL(event.url) - return ALLOWED_HOSTS.includes(urlp.host) - }, - [], - ) - - const onNavigationStateChange = React.useCallback( - (e: WebViewNavigation) => { - if (wasSuccessful.current) return - - const urlp = new URL(e.url) - if (urlp.host !== redirectHost) return - - const code = urlp.searchParams.get('code') - if (urlp.searchParams.get('state') !== stateParam || !code) { - onError() - return - } - - wasSuccessful.current = true - onSuccess(code) - }, - [redirectHost, stateParam, onSuccess, onError], - ) - - return ( - <WebView - source={{uri: url}} - javaScriptEnabled - style={styles.webview} - onShouldStartLoadWithRequest={onShouldStartLoadWithRequest} - onNavigationStateChange={onNavigationStateChange} - scrollEnabled={false} - /> - ) -} - -const styles = StyleSheet.create({ - webview: { - flex: 1, - backgroundColor: 'transparent', - borderRadius: 10, - }, -}) |