From a92373c78ce5ede2ec0b85f986f633dc5e9d49f5 Mon Sep 17 00:00:00 2001 From: "Apple\\Apple" Date: Wed, 4 Jun 2025 00:11:06 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(helpers):=20refac?= =?UTF-8?q?tor=20the=20`components/utils.js`=20to=20`helpers/api.js`=20and?= =?UTF-8?q?=20related=20imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/ChannelsTable.js | 2 +- web/src/components/RegisterForm.js | 2 +- web/src/helpers/api.js | 79 ++++++++++++++++++++++++++- web/src/pages/Channel/EditChannel.js | 2 +- web/src/pages/Channel/EditTagModal.js | 2 +- 5 files changed, 82 insertions(+), 5 deletions(-) diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index c6bdf75b..33c8c398 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -46,7 +46,7 @@ import { IconCopy, IconSmallTriangleRight } from '@douyinfe/semi-icons'; -import { loadChannelModels } from './utils.js'; +import { loadChannelModels } from '../helpers'; import EditTagModal from '../pages/Channel/EditTagModal.js'; import { useTranslation } from 'react-i18next'; diff --git a/web/src/components/RegisterForm.js b/web/src/components/RegisterForm.js index 78db98ad..23ff94df 100644 --- a/web/src/components/RegisterForm.js +++ b/web/src/components/RegisterForm.js @@ -26,7 +26,7 @@ import { onGitHubOAuthClicked, onLinuxDOOAuthClicked, onOIDCClicked, -} from './utils.js'; +} from '../helpers'; import OIDCIcon from './common/logo/OIDCIcon.js'; import LinuxDoIcon from './common/logo/LinuxDoIcon.js'; import WeChatIcon from './common/logo/WeChatIcon.js'; diff --git a/web/src/helpers/api.js b/web/src/helpers/api.js index 73708b04..eb70cd27 100644 --- a/web/src/helpers/api.js +++ b/web/src/helpers/api.js @@ -134,4 +134,81 @@ export const processGroupsData = (data, userGroup) => { } return groupOptions; -}; \ No newline at end of file +}; + +// 原来components中的utils.js + +export async function getOAuthState() { + let path = '/api/oauth/state'; + let affCode = localStorage.getItem('aff'); + if (affCode && affCode.length > 0) { + path += `?aff=${affCode}`; + } + const res = await API.get(path); + const { success, message, data } = res.data; + if (success) { + return data; + } else { + showError(message); + return ''; + } +} + +export async function onOIDCClicked(auth_url, client_id, openInNewTab = false) { + const state = await getOAuthState(); + if (!state) return; + const redirect_uri = `${window.location.origin}/oauth/oidc`; + const response_type = 'code'; + const scope = 'openid profile email'; + const url = `${auth_url}?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=${response_type}&scope=${scope}&state=${state}`; + if (openInNewTab) { + window.open(url); + } else { + window.location.href = url; + } +} + +export async function onGitHubOAuthClicked(github_client_id) { + const state = await getOAuthState(); + if (!state) return; + window.open( + `https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`, + ); +} + +export async function onLinuxDOOAuthClicked(linuxdo_client_id) { + const state = await getOAuthState(); + if (!state) return; + window.open( + `https://connect.linux.do/oauth2/authorize?response_type=code&client_id=${linuxdo_client_id}&state=${state}`, + ); +} + +let channelModels = undefined; +export async function loadChannelModels() { + const res = await API.get('/api/models'); + const { success, data } = res.data; + if (!success) { + return; + } + channelModels = data; + localStorage.setItem('channel_models', JSON.stringify(data)); +} + +export function getChannelModels(type) { + if (channelModels !== undefined && type in channelModels) { + if (!channelModels[type]) { + return []; + } + return channelModels[type]; + } + let models = localStorage.getItem('channel_models'); + if (!models) { + return []; + } + channelModels = JSON.parse(models); + if (type in channelModels) { + return channelModels[type]; + } + return []; +} diff --git a/web/src/pages/Channel/EditChannel.js b/web/src/pages/Channel/EditChannel.js index 810df9dc..feed8beb 100644 --- a/web/src/pages/Channel/EditChannel.js +++ b/web/src/pages/Channel/EditChannel.js @@ -26,7 +26,7 @@ import { Card, Tag, } from '@douyinfe/semi-ui'; -import { getChannelModels } from '../../components/utils.js'; +import { getChannelModels } from '../../helpers'; import { IconSave, IconClose, diff --git a/web/src/pages/Channel/EditTagModal.js b/web/src/pages/Channel/EditTagModal.js index 5ce05bec..52dd4bbb 100644 --- a/web/src/pages/Channel/EditTagModal.js +++ b/web/src/pages/Channel/EditTagModal.js @@ -27,7 +27,7 @@ import { IconUser, IconCode, } from '@douyinfe/semi-icons'; -import { getChannelModels } from '../../components/utils.js'; +import { getChannelModels } from '../../helpers'; import { useTranslation } from 'react-i18next'; const { Text, Title } = Typography;