Commit f5f1e58b by Finley Ge Committed by GitHub

fix: require invoke token secret configuration (#7170)

* fix: require invoke token secret configuration

* fix: enforce invoke token secret length

* ci: provide invoke token secret for pro tests

* fix: provide invoke secret in test env

---------

Co-authored-by: archer <545436317@qq.com>
parent 134ece8c
......@@ -73,6 +73,8 @@ jobs:
- name: Install Deps
run: pnpm install --frozen-lockfile
- name: Test
env:
INVOKE_TOKEN_SECRET: fastgpt_test_invoke_token_secret_32
run: pnpm test:admin
- name: Report Coverage
if: always() && hashFiles('pro/admin/coverage/coverage-summary.json') != ''
......
......@@ -9,6 +9,7 @@ stringData:
ROOT_KEY: "root_key"
FILE_TOKEN_KEY: "filetoken"
AES256_SECRET_KEY: "fastgptsecret"
INVOKE_TOKEN_SECRET: "fastgpt_invoke_token_secret_32_chars_min"
MONGODB_URI: "mongodb://{{ .Values.mongodb.auth.rootUser }}:{{ .Values.mongodb.auth.rootPassword }}@{{ include "fastgpt.fullname" . }}-mongodb-headless:27017/fastgpt?authSource=admin"
PG_URL: "postgresql://postgres:{{ .Values.postgresql.auth.rootPassword }}@{{ include "fastgpt.fullname" . }}-postgresql:5432/{{ .Values.postgresql.global.postgresql.auth.database }}"
kind: Secret
......
......@@ -180,6 +180,8 @@ ${{vec.db}}
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -181,6 +181,8 @@ ${{vec.db}}
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -12,7 +12,7 @@ This page describes the environment variables commonly used in a self-hosted Fas
- `projects/code-sandbox`: the code execution sandbox service. It exposes the `/sandbox` endpoint and is called by App through `CODE_SANDBOX_URL`.
- `packages/service/env.ts` exports `serviceEnv`; `projects/app/src/env.ts` exports `appEnv`.
- Shared App/Admin boolean variables use `true`, `1`, `yes`, or `y` to enable a feature. Other values are treated as disabled.
- `FILE_TOKEN_KEY` and `AES256_SECRET_KEY` are required at runtime. Use strong random secrets and do not use the example values in production.
- `FILE_TOKEN_KEY`, `AES256_SECRET_KEY`, and `INVOKE_TOKEN_SECRET` are required at runtime. Use strong random secrets and do not use the example values in production.
## Shared App/Admin Variables
......@@ -27,6 +27,7 @@ These variables are mainly validated by `packages/service/env.ts` and apply to `
| `TOKEN_KEY` | `fastgpt_token_key` | Signing secret for user sessions and business tokens. Must be at least 6 characters. |
| `FILE_TOKEN_KEY` | None, **required** | Secret for file read and file authorization flows. Must be at least 6 characters. |
| `AES256_SECRET_KEY` | None, **required** | Secret used by AES encryption and decryption. Must be at least 6 characters. |
| `INVOKE_TOKEN_SECRET` | None, **required** | JWT secret for Invoke reverse calls. Must be at least 32 characters. |
| `ROOT_KEY` | `fastgpt_root_key` | Root API key or internal highest-privilege secret. Must be at least 6 characters. |
| `PRO_URL` | Empty | Commercial service URL. When set, App can call Pro APIs, and the domain is allowed by file URL validation. |
......
......@@ -12,7 +12,7 @@ description: projects/app、projects/code-sandbox 与 pro/admin 环境变量说
- `projects/code-sandbox`:代码沙箱服务,对外暴露 `/sandbox` 执行接口,供 App 通过 `CODE_SANDBOX_URL` 调用。
- 代码中 `packages/service/env.ts` 导出名为 `serviceEnv`,`projects/app/src/env.ts` 导出名为 `appEnv`。
- App/Admin 共享布尔变量使用 `true`、`1`、`yes` 或 `y` 表示开启;其他值视为关闭。
- `FILE_TOKEN_KEY` 与 `AES256_SECRET_KEY` 为运行期必填,建议使用随机强密钥,不要使用示例值。
- `FILE_TOKEN_KEY`、`AES256_SECRET_KEY` 与 `INVOKE_TOKEN_SECRET` 为运行期必填,建议使用随机强密钥,不要使用示例值。
## App/Admin 共享变量
......@@ -27,6 +27,7 @@ description: projects/app、projects/code-sandbox 与 pro/admin 环境变量说
| `TOKEN_KEY` | `fastgpt_token_key` | 用户登录态、业务 Token 等签名密钥,长度至少 6 位。 |
| `FILE_TOKEN_KEY` | 无,**必填** | 文件读取、文件鉴权相关密钥,长度至少 6 位。 |
| `AES256_SECRET_KEY` | 无,**必填** | AES 加解密密钥,长度至少 6 位。 |
| `INVOKE_TOKEN_SECRET` | 无,**必填** | Invoke 反向调用 JWT 密钥,长度至少 32 位。 |
| `ROOT_KEY` | `fastgpt_root_key` | Root API Key/内部最高权限密钥,长度至少 6 位。 |
| `PRO_URL` | 空 | 商业版服务地址,配置后 App 可调用 Pro API,也会作为文件 URL 安全校验允许域名。 |
......
......@@ -42,6 +42,8 @@ TRUSTED_PROXY_IPS=
AES256_SECRET_KEY=
# 文件 token 密钥,两个服务需一致
FILE_TOKEN_KEY=
# Invoke 反向调用 JWT 密钥,至少 32 位,两个服务需一致
INVOKE_TOKEN_SECRET=
```
## 🚀 新增内容
......
......@@ -237,6 +237,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -215,6 +215,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -199,6 +199,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -197,6 +197,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -202,6 +202,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -181,6 +181,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -237,6 +237,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -215,6 +215,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -199,6 +199,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -197,6 +197,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -202,6 +202,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -181,6 +181,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -238,6 +238,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -216,6 +216,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -200,6 +200,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -198,6 +198,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -203,6 +203,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -182,6 +182,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -238,6 +238,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -216,6 +216,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -200,6 +200,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -198,6 +198,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -203,6 +203,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -182,6 +182,8 @@ services:
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET: fastgpt_invoke_token_secret_32_chars_min
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
......
......@@ -18,6 +18,21 @@ const SYSTEM_STRING_LENGTH_UNIT = 1_000_000;
const LogLevelSchema = z.enum(['trace', 'debug', 'info', 'warning', 'error', 'fatal']);
const StorageVendorSchema = z.enum(['minio', 'aws-s3', 'cos', 'oss']);
const StorageCosProtocolSchema = z.enum(['https:', 'http:']);
const TEST_INVOKE_TOKEN_SECRET = 'fastgpt_test_invoke_token_secret_32';
/**
* 测试套件会在多个 workspace(包含 pro/admin 子模块)里直接导入 serviceEnv。
* 生产启动仍要求显式配置 INVOKE_TOKEN_SECRET;仅 Vitest/测试环境允许注入稳定测试密钥,
* 避免每个测试项目都重复维护同一个必填运行时密钥。
*/
const getRuntimeEnv = (): NodeJS.ProcessEnv => ({
...process.env,
INVOKE_TOKEN_SECRET:
process.env.INVOKE_TOKEN_SECRET ??
(process.env.VITEST === 'true' || process.env.NODE_ENV === 'test'
? TEST_INVOKE_TOKEN_SECRET
: undefined)
});
export const serviceEnv = createEnv({
skipValidation: isPhaseProductionBuild,
......@@ -296,11 +311,13 @@ export const serviceEnv = createEnv({
DINGTALK_OAPI_BASE_URL: UrlSchema.default('https://oapi.dingtalk.com'),
YUQUE_DATASET_BASE_URL: UrlSchema.default('https://www.yuque.com'),
// Invoke 反向调用相关
INVOKE_TOKEN_SECRET: z.string().default('token')
// Invoke 反向调用相关。该密钥用于签发/校验插件反向调用 JWT,必须显式配置,避免未配置时落到公开默认值。
INVOKE_TOKEN_SECRET: z
.string()
.min(32, 'INVOKE_TOKEN_SECRET must be at least 32 characters')
},
emptyStringAsUndefined: true,
runtimeEnv: process.env,
runtimeEnv: getRuntimeEnv(),
onValidationError(issues) {
const paths = issues.map((issue) => issue.path).join(', ');
throw new Error(`Invalid environment variables. Please check: ${paths}\n`);
......
import { afterEach, describe, expect, it, vi } from 'vitest';
const validInvokeTokenSecret = 'fastgpt_test_invoke_token_secret_32';
const originalEnv = {
SYSTEM_MAX_STRING_LENGTH_M: process.env.SYSTEM_MAX_STRING_LENGTH_M,
CHAT_TITLE_MODEL: process.env.CHAT_TITLE_MODEL,
FILE_TOKEN_KEY: process.env.FILE_TOKEN_KEY,
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY,
INVOKE_TOKEN_SECRET: process.env.INVOKE_TOKEN_SECRET,
VITEST: process.env.VITEST,
NODE_ENV: process.env.NODE_ENV
};
const importServiceEnv = async () => {
......@@ -19,11 +24,15 @@ describe('serviceEnv', () => {
vi.stubEnv('CHAT_TITLE_MODEL', originalEnv.CHAT_TITLE_MODEL);
vi.stubEnv('FILE_TOKEN_KEY', originalEnv.FILE_TOKEN_KEY);
vi.stubEnv('AES256_SECRET_KEY', originalEnv.AES256_SECRET_KEY);
vi.stubEnv('INVOKE_TOKEN_SECRET', originalEnv.INVOKE_TOKEN_SECRET);
vi.stubEnv('VITEST', originalEnv.VITEST);
vi.stubEnv('NODE_ENV', originalEnv.NODE_ENV);
});
it('validates SYSTEM_MAX_STRING_LENGTH_M during service env init', async () => {
vi.stubEnv('FILE_TOKEN_KEY', 'filetokenkey');
vi.stubEnv('AES256_SECRET_KEY', 'fastgptsecret');
vi.stubEnv('INVOKE_TOKEN_SECRET', validInvokeTokenSecret);
vi.stubEnv('SYSTEM_MAX_STRING_LENGTH_M', undefined);
await expect(importServiceEnv()).resolves.toMatchObject({
......@@ -45,6 +54,7 @@ describe('serviceEnv', () => {
it('rejects invalid SYSTEM_MAX_STRING_LENGTH_M during service env init', async () => {
vi.stubEnv('FILE_TOKEN_KEY', 'filetokenkey');
vi.stubEnv('AES256_SECRET_KEY', 'fastgptsecret');
vi.stubEnv('INVOKE_TOKEN_SECRET', validInvokeTokenSecret);
vi.stubEnv('SYSTEM_MAX_STRING_LENGTH_M', '0');
await expect(importServiceEnv()).rejects.toThrow('Invalid environment variables');
......@@ -59,6 +69,7 @@ describe('serviceEnv', () => {
it('validates chat title generation env during service env init', async () => {
vi.stubEnv('FILE_TOKEN_KEY', 'filetokenkey');
vi.stubEnv('AES256_SECRET_KEY', 'fastgptsecret');
vi.stubEnv('INVOKE_TOKEN_SECRET', validInvokeTokenSecret);
vi.stubEnv('CHAT_TITLE_MODEL', 'title-model');
await expect(importServiceEnv()).resolves.toMatchObject({
......@@ -67,4 +78,37 @@ describe('serviceEnv', () => {
}
});
});
it('requires INVOKE_TOKEN_SECRET during service env init', async () => {
vi.stubEnv('FILE_TOKEN_KEY', 'filetokenkey');
vi.stubEnv('AES256_SECRET_KEY', 'fastgptsecret');
vi.stubEnv('INVOKE_TOKEN_SECRET', undefined);
vi.stubEnv('VITEST', undefined);
vi.stubEnv('NODE_ENV', 'production');
await expect(importServiceEnv()).rejects.toThrow('Invalid environment variables');
vi.stubEnv('INVOKE_TOKEN_SECRET', 'short-token');
await expect(importServiceEnv()).rejects.toThrow('Invalid environment variables');
vi.stubEnv('INVOKE_TOKEN_SECRET', validInvokeTokenSecret);
await expect(importServiceEnv()).resolves.toMatchObject({
serviceEnv: {
INVOKE_TOKEN_SECRET: validInvokeTokenSecret
}
});
});
it('uses a test-only INVOKE_TOKEN_SECRET default during vitest', async () => {
vi.stubEnv('FILE_TOKEN_KEY', 'filetokenkey');
vi.stubEnv('AES256_SECRET_KEY', 'fastgptsecret');
vi.stubEnv('INVOKE_TOKEN_SECRET', undefined);
vi.stubEnv('VITEST', 'true');
await expect(importServiceEnv()).resolves.toMatchObject({
serviceEnv: {
INVOKE_TOKEN_SECRET: validInvokeTokenSecret
}
});
});
});
......@@ -21,6 +21,8 @@ export default defineConfig({
process.env.FILE_TOKEN_KEY ??
'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff',
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key',
INVOKE_TOKEN_SECRET:
process.env.INVOKE_TOKEN_SECRET ?? 'fastgpt_test_invoke_token_secret_32',
AGENT_SANDBOX_PROVIDER: 'opensandbox'
},
coverage: {
......
......@@ -14,7 +14,9 @@ export default defineConfig({
FILE_TOKEN_KEY:
process.env.FILE_TOKEN_KEY ??
'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff',
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key'
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key',
INVOKE_TOKEN_SECRET:
process.env.INVOKE_TOKEN_SECRET ?? 'fastgpt_test_invoke_token_secret_32'
},
coverage: {
enabled: false
......
......@@ -14,6 +14,8 @@ TOKEN_KEY=fastgpt
FILE_TOKEN_KEY=
# 密钥加密 key
AES256_SECRET_KEY=fastgptsecret
# Invoke 反向调用 JWT 密钥,至少 32 位
INVOKE_TOKEN_SECRET=fastgpt_invoke_token_secret_32_chars_min
# root key(最高权限)
ROOT_KEY=fdafasd
......
......@@ -35,6 +35,8 @@ export default defineConfig({
process.env.FILE_TOKEN_KEY ??
'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff',
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key',
INVOKE_TOKEN_SECRET:
process.env.INVOKE_TOKEN_SECRET ?? 'fastgpt_test_invoke_token_secret_32',
AGENT_SANDBOX_PROVIDER: 'opensandbox'
},
coverage: {
......
......@@ -20,7 +20,9 @@ export default defineConfig({
FILE_TOKEN_KEY:
process.env.FILE_TOKEN_KEY ??
'bfd697e7e798f75deaf2d31210bc93a2e41ad4eed9e7831071d77821b7b97cff',
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key'
AES256_SECRET_KEY: process.env.AES256_SECRET_KEY ?? 'fastgpt_test_aes256_secret_key',
INVOKE_TOKEN_SECRET:
process.env.INVOKE_TOKEN_SECRET ?? 'fastgpt_test_invoke_token_secret_32'
},
coverage: {
enabled: true,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment