From bfeb2b312ab28581a41bd90f5d827d587dff9dae Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 5 Aug 2026 15:57:49 +0800 Subject: [PATCH] feat: update github oauth --- src/github-auth.ts | 24 ++++++++++++++++++++---- src/gitlab-auth.ts | 7 +------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/github-auth.ts b/src/github-auth.ts index df4e52e03..23b558122 100644 --- a/src/github-auth.ts +++ b/src/github-auth.ts @@ -3,17 +3,33 @@ * @author netcon */ -const CLIENT_ID = 'eae6621348403ea49103'; const GITHUB_ORIGIN = 'https://github.com'; -const GITHUB_AUTH_URL = `${GITHUB_ORIGIN}/login/oauth/authorize?scope=repo,user:email&client_id=${CLIENT_ID}`; +const AUTH_PAGE_ORIGIN = 'https://auth.github1s.com'; +const AUTH_REDIRECT_URI = `${AUTH_PAGE_ORIGIN}/api/github-auth-callback`; +const CLIENT_ID = 'eae6621348403ea49103'; const OPEN_WINDOW_FEATURES = 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=800,height=520,top=150,left=150'; -const AUTH_PAGE_ORIGIN = 'https://auth.github1s.com'; + +export const createRandomString = (length: number) => { + const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + return Array.from({ length }, () => charset.charAt(Math.floor(Math.random() * charset.length))).join(''); +}; + +const createAuthorizeUrl = (state: string) => { + const parameters = Object.entries({ + state, + scope: 'repo,user:email', + client_id: CLIENT_ID, + redirect_uri: AUTH_REDIRECT_URI, + }).map(([key, value]) => `${key}=${encodeURIComponent(value)}`); + return `${GITHUB_ORIGIN}/login/oauth/authorize?${parameters.join('&')}`; +}; export const timeout = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); export const ConnectToGitHub = () => { - const opener = window.open(GITHUB_AUTH_URL, '_blank', OPEN_WINDOW_FEATURES); + const STATE = createRandomString(32); + const opener = window.open(createAuthorizeUrl(STATE), '_blank', OPEN_WINDOW_FEATURES); return new Promise((resolve) => { const handleAuthMessage = (event: MessageEvent) => { diff --git a/src/gitlab-auth.ts b/src/gitlab-auth.ts index a36188995..6fe80a240 100644 --- a/src/gitlab-auth.ts +++ b/src/gitlab-auth.ts @@ -3,7 +3,7 @@ * @author netcon */ -import { timeout } from './github-auth'; +import { timeout, createRandomString } from './github-auth'; const GITLAB_ORIGIN = 'https://gitlab.com'; const AUTH_PAGE_ORIGIN = 'https://auth.gitlab1s.com'; @@ -12,11 +12,6 @@ const CLIENT_ID = '5ef142320efe9d2e8caeb0185771bb126d3035dc0a325c6ad5bab567f320d const OPEN_WINDOW_FEATURES = 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=800,height=520,top=150,left=150'; -const createRandomString = (length: number) => { - const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - return Array.from({ length }, () => charset.charAt(Math.floor(Math.random() * charset.length))).join(''); -}; - const createAuthorizeUrl = (state: string) => { const parameters = Object.entries({ state,