mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 12:28:42 +00:00
fix(core): assert app schema url on open-app (#10687)
This commit is contained in:
@@ -1,7 +1,11 @@
|
|||||||
import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper';
|
import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper';
|
||||||
import { GraphQLService } from '@affine/core/modules/cloud';
|
import { GraphQLService } from '@affine/core/modules/cloud';
|
||||||
import { OpenInAppPage } from '@affine/core/modules/open-in-app/views/open-in-app-page';
|
import { OpenInAppPage } from '@affine/core/modules/open-in-app/views/open-in-app-page';
|
||||||
import { appSchemes, channelToScheme } from '@affine/core/utils/channel';
|
import {
|
||||||
|
appSchemaUrl,
|
||||||
|
appSchemes,
|
||||||
|
channelToScheme,
|
||||||
|
} from '@affine/core/utils/channel';
|
||||||
import type { GetCurrentUserQuery } from '@affine/graphql';
|
import type { GetCurrentUserQuery } from '@affine/graphql';
|
||||||
import { getCurrentUserQuery } from '@affine/graphql';
|
import { getCurrentUserQuery } from '@affine/graphql';
|
||||||
import { useService } from '@toeverything/infra';
|
import { useService } from '@toeverything/infra';
|
||||||
@@ -23,12 +27,13 @@ const OpenUrl = () => {
|
|||||||
[navigateHelper]
|
[navigateHelper]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!urlToOpen) {
|
const parsed = appSchemaUrl.safeParse(urlToOpen);
|
||||||
|
if (!parsed.success) {
|
||||||
|
console.error(parsed.error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const urlObj = new URL(urlToOpen || '');
|
const urlObj = new URL(parsed.data);
|
||||||
|
|
||||||
params.forEach((v, k) => {
|
params.forEach((v, k) => {
|
||||||
if (k === 'url') {
|
if (k === 'url') {
|
||||||
return;
|
return;
|
||||||
@@ -55,7 +60,7 @@ const OpenOAuthJwt = () => {
|
|||||||
const scheme = maybeScheme.success
|
const scheme = maybeScheme.success
|
||||||
? maybeScheme.data
|
? maybeScheme.data
|
||||||
: channelToScheme[BUILD_CONFIG.appBuildType];
|
: channelToScheme[BUILD_CONFIG.appBuildType];
|
||||||
const next = params.get('next');
|
const next = params.get('next') || '';
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
graphqlService
|
graphqlService
|
||||||
@@ -74,7 +79,7 @@ const OpenOAuthJwt = () => {
|
|||||||
|
|
||||||
const urlToOpen = `${scheme}://signin-redirect?token=${
|
const urlToOpen = `${scheme}://signin-redirect?token=${
|
||||||
currentUser.token.sessionToken
|
currentUser.token.sessionToken
|
||||||
}&next=${next || ''}`;
|
}&next=${next}`;
|
||||||
|
|
||||||
return <OpenInAppPage urlToOpen={urlToOpen} />;
|
return <OpenInAppPage urlToOpen={urlToOpen} />;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -42,3 +42,15 @@ export const appNames = {
|
|||||||
beta: 'AFFiNE Beta',
|
beta: 'AFFiNE Beta',
|
||||||
internal: 'AFFiNE Internal',
|
internal: 'AFFiNE Internal',
|
||||||
} satisfies Record<Channel, string>;
|
} satisfies Record<Channel, string>;
|
||||||
|
|
||||||
|
export const appSchemaUrl = z.custom<string>(
|
||||||
|
(url: string) => {
|
||||||
|
try {
|
||||||
|
return appSchemes.safeParse(new URL(url).protocol.replace(':', ''))
|
||||||
|
.success;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ message: 'Invalid URL or protocol' }
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user