i0110 commited on
Commit
e158e46
·
verified ·
1 Parent(s): a38c71a

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +37 -3
server.js CHANGED
@@ -31,6 +31,10 @@ if (hfUserConfig) {
31
  const ADMIN_USERNAME = process.env.USER_NAME || 'admin';
32
  const ADMIN_PASSWORD = process.env.USER_PASSWORD || 'password';
33
 
 
 
 
 
34
  // 存储会话 token 的简单内存数据库(生产环境中应使用数据库或 Redis)
35
  const sessions = new Map();
36
  const SESSION_TIMEOUT = 24 * 60 * 60 * 1000; // 24小时超时
@@ -131,12 +135,27 @@ app.get('/api/proxy/spaces', async (req, res) => {
131
  try {
132
  if (!spaceCache.isExpired()) {
133
  console.log('从缓存获取 Spaces 数据');
134
- // 从缓存返回的数据也需要过滤掉 token 字段
135
  const cachedSpaces = spaceCache.getAll().map(space => {
136
  const { token, ...safeSpace } = space; // 移除 token 字段
137
  return safeSpace;
138
  });
139
- return res.json(cachedSpaces);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  }
141
 
142
  const allSpaces = [];
@@ -186,7 +205,22 @@ app.get('/api/proxy/spaces', async (req, res) => {
186
  allSpaces.sort((a, b) => a.name.localeCompare(b.name));
187
  spaceCache.updateAll(allSpaces);
188
  console.log(`总共获取到 ${allSpaces.length} 个 Spaces`);
189
- res.json(allSpaces);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  } catch (error) {
191
  console.error(`代理获取 spaces 列表失败:`, error.message);
192
  res.status(500).json({ error: '获取 spaces 列表失败', details: error.message });
 
31
  const ADMIN_USERNAME = process.env.USER_NAME || 'admin';
32
  const ADMIN_PASSWORD = process.env.USER_PASSWORD || 'password';
33
 
34
+ // 从环境变量获取是否在未登录时展示 private 实例的配置,默认值为 false
35
+ const SHOW_PRIVATE = process.env.SHOW_PRIVATE === 'true';
36
+ console.log(`SHOW_PRIVATE 配置: ${SHOW_PRIVATE ? '未登录时展示 private 实例' : '未登录时隐藏 private 实例'}`);
37
+
38
  // 存储会话 token 的简单内存数据库(生产环境中应使用数据库或 Redis)
39
  const sessions = new Map();
40
  const SESSION_TIMEOUT = 24 * 60 * 60 * 1000; // 24小时超时
 
135
  try {
136
  if (!spaceCache.isExpired()) {
137
  console.log('从缓存获取 Spaces 数据');
138
+ // 从缓存返回的数据也需要根据登录状态和 SHOW_PRIVATE 过滤 private 字段
139
  const cachedSpaces = spaceCache.getAll().map(space => {
140
  const { token, ...safeSpace } = space; // 移除 token 字段
141
  return safeSpace;
142
  });
143
+
144
+ // 检查是否登录
145
+ const authHeader = req.headers['authorization'];
146
+ const isAuthenticated = authHeader && authHeader.startsWith('Bearer ') && sessions.get(authHeader.split(' ')[1]);
147
+
148
+ // 登录状态下返回所有实例,未登录时根据 SHOW_PRIVATE 决定是否返回 private 实例
149
+ if (isAuthenticated) {
150
+ console.log('用户已登录,返回所有实例');
151
+ return res.json(cachedSpaces);
152
+ } else if (SHOW_PRIVATE) {
153
+ console.log('用户未登录,但 SHOW_PRIVATE 为 true,返回所有实例');
154
+ return res.json(cachedSpaces);
155
+ } else {
156
+ console.log('用户未登录,SHOW_PRIVATE 为 false,过滤 private 实例');
157
+ return res.json(cachedSpaces.filter(space => !space.private));
158
+ }
159
  }
160
 
161
  const allSpaces = [];
 
205
  allSpaces.sort((a, b) => a.name.localeCompare(b.name));
206
  spaceCache.updateAll(allSpaces);
207
  console.log(`总共获取到 ${allSpaces.length} 个 Spaces`);
208
+
209
+ // 检查是否登录
210
+ const authHeader = req.headers['authorization'];
211
+ const isAuthenticated = authHeader && authHeader.startsWith('Bearer ') && sessions.get(authHeader.split(' ')[1]);
212
+
213
+ // 登录状态下返回所有实例,未登录时根据 SHOW_PRIVATE 决定是否返回 private 实例
214
+ if (isAuthenticated) {
215
+ console.log('用户已登录,返回所有实例');
216
+ res.json(allSpaces);
217
+ } else if (SHOW_PRIVATE) {
218
+ console.log('用户未登录,但 SHOW_PRIVATE 为 true,返回所有实例');
219
+ res.json(allSpaces);
220
+ } else {
221
+ console.log('用户未登录,SHOW_PRIVATE 为 false,过滤 private 实例');
222
+ res.json(allSpaces.filter(space => !space.private));
223
+ }
224
  } catch (error) {
225
  console.error(`代理获取 spaces 列表失败:`, error.message);
226
  res.status(500).json({ error: '获取 spaces 列表失败', details: error.message });