Makelore 2.0 initial clean snapshot
This commit is contained in:
52
electron/main/app-deep-link.ts
Normal file
52
electron/main/app-deep-link.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
export const NIANCODE_APP_PROTOCOL = 'niancode';
|
||||
|
||||
export type NianCodeDeepLink = {
|
||||
type: 'desktop-auth-callback';
|
||||
requestId: string;
|
||||
url: string;
|
||||
};
|
||||
|
||||
const SENSITIVE_QUERY_KEYS = new Set([
|
||||
'access_token',
|
||||
'refresh_token',
|
||||
'device_secret',
|
||||
'token',
|
||||
]);
|
||||
|
||||
export function parseNianCodeDeepLinkUrl(rawUrl: string): NianCodeDeepLink | null {
|
||||
let url: URL;
|
||||
try {
|
||||
url = new URL(rawUrl);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (url.protocol !== `${NIANCODE_APP_PROTOCOL}:`) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (url.hostname !== 'auth' || url.pathname !== '/callback') {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (const key of SENSITIVE_QUERY_KEYS) {
|
||||
if (url.searchParams.has(key)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const requestId = url.searchParams.get('request_id')?.trim();
|
||||
if (!requestId || requestId.length > 128) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
type: 'desktop-auth-callback',
|
||||
requestId,
|
||||
url: rawUrl,
|
||||
};
|
||||
}
|
||||
|
||||
export function findNianCodeDeepLinkUrl(args: readonly string[]): string | null {
|
||||
return args.find((arg) => parseNianCodeDeepLinkUrl(arg) !== null) ?? null;
|
||||
}
|
||||
Reference in New Issue
Block a user