diff --git a/packages/frontend/core/public/robots.txt b/packages/frontend/core/public/robots.txt index 1b8b25033d..7b537c62f9 100644 --- a/packages/frontend/core/public/robots.txt +++ b/packages/frontend/core/public/robots.txt @@ -6,7 +6,7 @@ Disallow: /oauth/* Disallow: /workspace/* Disallow: /public-workspace/* Disallow: /auth/* -Disallow: /signin/* +Disallow: /sign-in Disallow: /_next/* Disallow: /invite/* Disallow: /*/invite/* diff --git a/packages/frontend/core/src/components/affine/auth/oauth.tsx b/packages/frontend/core/src/components/affine/auth/oauth.tsx index cedd60c22d..317b3c125c 100644 --- a/packages/frontend/core/src/components/affine/auth/oauth.tsx +++ b/packages/frontend/core/src/components/affine/auth/oauth.tsx @@ -1,16 +1,11 @@ -import { notify, Skeleton } from '@affine/component'; +import { Skeleton } from '@affine/component'; import { Button } from '@affine/component/ui/button'; -import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks'; -import { track } from '@affine/core/mixpanel'; -import { popupWindow } from '@affine/core/utils'; -import { apis } from '@affine/electron-api'; import { OAuthProviderType } from '@affine/graphql'; import { GithubIcon, GoogleDuotoneIcon } from '@blocksuite/icons/rc'; import { useLiveData, useService } from '@toeverything/infra'; import type { ReactElement } from 'react'; -import { useState } from 'react'; -import { AuthService, ServerConfigService } from '../../../modules/cloud'; +import { ServerConfigService } from '../../../modules/cloud'; const OAuthProviderMap: Record< OAuthProviderType, @@ -50,39 +45,23 @@ export function OAuth() { function OAuthProvider({ provider }: { provider: OAuthProviderType }) { const { icon } = OAuthProviderMap[provider]; - const authService = useService(AuthService); - const [isConnecting, setIsConnecting] = useState(false); - - const onClick = useAsyncCallback(async () => { - try { - setIsConnecting(true); - const url = await authService.oauthPreflight(provider); - if (environment.isElectron) { - await apis?.ui.openExternal(url); - } else { - popupWindow(url); - } - } catch (err) { - console.error(err); - notify.error({ title: 'Failed to sign in, please try again.' }); - } finally { - setIsConnecting(false); - track.$.$.auth.oauth({ provider }); - } - }, [authService, provider]); return ( - + + ); } diff --git a/packages/frontend/core/src/hooks/use-navigate-helper.ts b/packages/frontend/core/src/hooks/use-navigate-helper.ts index 0cb4663e38..d9d3b2cea1 100644 --- a/packages/frontend/core/src/hooks/use-navigate-helper.ts +++ b/packages/frontend/core/src/hooks/use-navigate-helper.ts @@ -163,7 +163,7 @@ export function useNavigateHelper() { } return navigate( - '/signIn' + + '/sign-in' + (searchParams.toString() ? '?' + searchParams.toString() : ''), { replace: logic === RouteLogic.REPLACE, diff --git a/packages/frontend/core/src/pages/auth/magic-link.tsx b/packages/frontend/core/src/pages/auth/magic-link.tsx index ede536e573..71ff26fc06 100644 --- a/packages/frontend/core/src/pages/auth/magic-link.tsx +++ b/packages/frontend/core/src/pages/auth/magic-link.tsx @@ -25,7 +25,7 @@ export const loader: LoaderFunction = ({ request }) => { const redirectUri = params.get('redirect_uri'); if (!email || !token) { - return redirect('/signIn?error=Invalid magic link'); + return redirect('/sign-in?error=Invalid magic link'); } const payload: LoaderData = { @@ -61,7 +61,7 @@ export const Component = () => { nav(data.redirectUri ?? '/'); }) .catch(e => { - nav(`/signIn?error=${encodeURIComponent(e.message)}`); + nav(`/sign-in?error=${encodeURIComponent(e.message)}`); }); }, [data, auth, nav]); diff --git a/packages/frontend/core/src/pages/auth/oauth-callback.tsx b/packages/frontend/core/src/pages/auth/oauth-callback.tsx index 12349822fd..ffdc8b7844 100644 --- a/packages/frontend/core/src/pages/auth/oauth-callback.tsx +++ b/packages/frontend/core/src/pages/auth/oauth-callback.tsx @@ -22,7 +22,7 @@ export const loader: LoaderFunction = async ({ request }) => { let stateStr = queries.get('state') ?? '{}'; if (!code || !stateStr) { - return redirect('/signIn?error=Invalid oauth callback parameters'); + return redirect('/sign-in?error=Invalid oauth callback parameters'); } try { @@ -46,7 +46,7 @@ export const loader: LoaderFunction = async ({ request }) => { `/open-app/url?url=${encodeURIComponent(`${client}://authentication?${authParams.toString()}`)}` ); } catch { - return redirect('/signIn?error=Invalid oauth callback parameters'); + return redirect('/sign-in?error=Invalid oauth callback parameters'); } }; @@ -64,7 +64,7 @@ export const Component = () => { nav(redirectUri ?? '/'); }) .catch(e => { - nav(`/signIn?error=${encodeURIComponent(e.message)}`); + nav(`/sign-in?error=${encodeURIComponent(e.message)}`); }); }, [data, auth, nav]); diff --git a/packages/frontend/core/src/pages/auth/desktop-signin.tsx b/packages/frontend/core/src/pages/auth/oauth-login.tsx similarity index 91% rename from packages/frontend/core/src/pages/auth/desktop-signin.tsx rename to packages/frontend/core/src/pages/auth/oauth-login.tsx index 3c9c1b815d..11810c6cce 100644 --- a/packages/frontend/core/src/pages/auth/desktop-signin.tsx +++ b/packages/frontend/core/src/pages/auth/oauth-login.tsx @@ -36,7 +36,7 @@ export const loader: LoaderFunction = async ({ request }) => { } return redirect( - `/signIn?error=${encodeURIComponent(`Invalid oauth provider ${provider}`)}` + `/sign-in?error=${encodeURIComponent(`Invalid oauth provider ${provider}`)}` ); }; @@ -54,7 +54,7 @@ export const Component = () => { location.href = url; }) .catch(e => { - nav(`/signIn?error=${encodeURIComponent(e.message)}`); + nav(`/sign-in?error=${encodeURIComponent(e.message)}`); }); }, [data, auth, nav]); diff --git a/packages/frontend/core/src/router.tsx b/packages/frontend/core/src/router.tsx index 37fe7a7164..5ecd9f01db 100644 --- a/packages/frontend/core/src/router.tsx +++ b/packages/frontend/core/src/router.tsx @@ -82,7 +82,7 @@ export const topLevelRoutes = [ path: '/try-cloud', loader: () => { return redirect( - `/signIn?redirect_uri=${encodeURIComponent('/?initCloud=true')}` + `/sign-in?redirect_uri=${encodeURIComponent('/?initCloud=true')}` ); }, }, @@ -99,7 +99,7 @@ export const topLevelRoutes = [ lazy: () => import(/* webpackChunkName: "auth" */ './pages/auth/auth'), }, { - path: '/signIn', + path: '/sign-In', lazy: () => import(/* webpackChunkName: "auth" */ './pages/auth/sign-in'), }, @@ -108,6 +108,11 @@ export const topLevelRoutes = [ lazy: () => import(/* webpackChunkName: "auth" */ './pages/auth/magic-link'), }, + { + path: '/oauth/login', + lazy: () => + import(/* webpackChunkName: "auth" */ './pages/auth/oauth-login'), + }, { path: '/oauth/callback', lazy: () => @@ -117,7 +122,16 @@ export const topLevelRoutes = [ // TODO(@forehalo): remove { path: '/desktop-signin', - lazy: () => import('./pages/auth/desktop-signin'), + lazy: () => + import(/* webpackChunkName: "auth" */ './pages/auth/oauth-login'), + }, + // deprecated, keep for old client compatibility + // use '/sign-in' + // TODO(@forehalo): remove + { + path: '/signIn', + lazy: () => + import(/* webpackChunkName: "auth" */ './pages/auth/sign-in'), }, { path: '/open-app/:action', diff --git a/packages/frontend/mobile/src/router.tsx b/packages/frontend/mobile/src/router.tsx index 3119fd6b3d..44b5d5fca9 100644 --- a/packages/frontend/mobile/src/router.tsx +++ b/packages/frontend/mobile/src/router.tsx @@ -66,6 +66,27 @@ export const topLevelRoutes = [ path: '/sign-in', lazy: () => import('./pages/sign-in'), }, + { + path: '/magic-link', + lazy: () => + import( + /* webpackChunkName: "auth" */ '@affine/core/pages/auth/magic-link' + ), + }, + { + path: '/oauth/login', + lazy: () => + import( + /* webpackChunkName: "auth" */ '@affine/core/pages/auth/oauth-login' + ), + }, + { + path: '/oauth/callback', + lazy: () => + import( + /* webpackChunkName: "auth" */ '@affine/core/pages/auth/oauth-callback' + ), + }, { path: '/redirect-proxy', lazy: () => import('@affine/core/pages/redirect'),