diff --git a/packages/service/support/permission/auth/common.ts b/packages/service/support/permission/auth/common.ts index dd875a285..8f2c440ce 100644 --- a/packages/service/support/permission/auth/common.ts +++ b/packages/service/support/permission/auth/common.ts @@ -2,6 +2,7 @@ import { AuthUserTypeEnum } from '@fastgpt/global/support/permission/constant'; import { parseHeaderCert } from '../controller'; import { AuthModeType } from '../type'; import { authOutLinkValid } from './outLink'; +import { isIPv6 } from 'net'; export const authCert = async (props: AuthModeType) => { const result = await parseHeaderCert(props); @@ -34,7 +35,11 @@ export async function authCertOrShareId({ /* auth the request from local service */ export const authRequestFromLocal = ({ req }: AuthModeType) => { - const host = `${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}`; + const host = + process.env.HOSTNAME && isIPv6(process.env.HOSTNAME) + ? `[${process.env.HOSTNAME}]:${process.env.PORT || 3000}` + : `${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}`; + if (host !== req.headers.host) { return Promise.reject('Invalid request'); } diff --git a/projects/app/src/service/common/api/request.ts b/projects/app/src/service/common/api/request.ts index 01d42e8a6..0ebc7336c 100644 --- a/projects/app/src/service/common/api/request.ts +++ b/projects/app/src/service/common/api/request.ts @@ -1,5 +1,5 @@ import axios, { Method, InternalAxiosRequestConfig, AxiosResponse } from 'axios'; - +import { isIPv6 } from 'net'; interface ConfigType { headers?: { [key: string]: string }; hold?: boolean; @@ -78,7 +78,12 @@ export function request(url: string, data: any, config: ConfigType, method: Meth return instance .request({ - baseURL: `http://${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}`, + baseURL: `http://${ + process.env.HOSTNAME && isIPv6(process.env.HOSTNAME) + ? `[${process.env.HOSTNAME}]:${process.env.PORT || 3000}` + : `${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}` + }`, + url, method, data: ['POST', 'PUT'].includes(method) ? data : null, diff --git a/projects/app/src/service/moduleDispatch/tools/http.ts b/projects/app/src/service/moduleDispatch/tools/http.ts index e07d24c70..72027222f 100644 --- a/projects/app/src/service/moduleDispatch/tools/http.ts +++ b/projects/app/src/service/moduleDispatch/tools/http.ts @@ -3,6 +3,7 @@ import type { ModuleDispatchProps } from '@fastgpt/global/core/module/type.d'; import { ModuleInputKeyEnum, ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants'; import axios from 'axios'; import { flatDynamicParams } from '../utils'; +import { isIPv6 } from 'net'; export type HttpRequestProps = ModuleDispatchProps<{ [ModuleInputKeyEnum.abandon_httpUrl]: string; @@ -132,7 +133,12 @@ async function fetchData({ }): Promise> { const { data: response } = await axios>({ method, - baseURL: `http://${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}`, + baseURL: `http://${ + process.env.HOSTNAME && isIPv6(process.env.HOSTNAME) + ? `[${process.env.HOSTNAME}]:${process.env.PORT || 3000}` + : `${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000}` + }`, + url, headers: { 'Content-Type': 'application/json', @@ -142,7 +148,7 @@ async function fetchData({ data: method === 'POST' ? body : {} }); - /* + /* parse the json: { user: {