From ca5d206c857fd4abbf5dc78ac71e14ff491fb59a Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Thu, 7 Nov 2024 10:25:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=81=AB=E7=9F=B3=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/components/IFramePage/index.tsx | 15 +++++++++++-- react-ui/src/utils/index.ts | 22 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/react-ui/src/components/IFramePage/index.tsx b/react-ui/src/components/IFramePage/index.tsx index fab32ab2..92fd34d5 100644 --- a/react-ui/src/components/IFramePage/index.tsx +++ b/react-ui/src/components/IFramePage/index.tsx @@ -1,6 +1,7 @@ import FullScreenFrame from '@/components/FullScreenFrame'; import KFSpin from '@/components/KFSpin'; import { getLabelStudioUrl } from '@/services/developmentEnvironment'; +import { generateSign } from '@/utils'; import { to } from '@/utils/promise'; import SessionStorage from '@/utils/sessionStorage'; import classNames from 'classnames'; @@ -19,8 +20,18 @@ const getRequestAPI = (type: IframePageType): (() => Promise) => { switch (type) { case IframePageType.DatasetAnnotation: return getLabelStudioUrl; - case IframePageType.AppDevelopment: - return () => Promise.resolve({ code: 200, data: 'http://172.20.32.185:30080/' }); + case IframePageType.AppDevelopment: { + // return () => Promise.resolve({ code: 200, data: 'http://172.20.32.185:30080/' }); + const loginName = 'test3'; + const sign = generateSign(loginName); + + return () => + Promise.resolve({ + code: 200, + data: `http://10.43.107.27:24078/uap/nudt/sso/login?name=${loginName}&sign=${sign}`, + }); + } + case IframePageType.DevEnv: return () => Promise.resolve({ diff --git a/react-ui/src/utils/index.ts b/react-ui/src/utils/index.ts index 67ca10d2..42d6b148 100644 --- a/react-ui/src/utils/index.ts +++ b/react-ui/src/utils/index.ts @@ -6,6 +6,7 @@ import { PageEnum } from '@/enums/pagesEnums'; import G6 from '@antv/g6'; +import CryptoJS from 'crypto-js'; // 生成 8 位随机数 export function s8() { @@ -241,3 +242,24 @@ export const tableSorter = (a: any, b: any) => { } return 0; }; + +// 生成火石平台 sign +export const generateSign = (loginName: string) => { + // 16-character custom password + const key = '8c4ddb8cb50ade0e'; + + const content = `${loginName}-${Math.floor(Date.now() / 1000)}`; + + // Generate the AES key (16 bytes for AES-128 or 32 bytes for AES-256) + const byteKey = CryptoJS.enc.Utf8.parse(key); + + // Encrypt the content + const encrypted = CryptoJS.AES.encrypt(content, byteKey, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + }); + + const encryptedHex = encrypted.ciphertext.toString(CryptoJS.enc.Hex); + + return encryptedHex; +};