whistle.mock-plugins 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -176,6 +176,7 @@ module.exports = function(req, res) {
176
176
  proxyType: interfaceData.proxyType,
177
177
  responseContent: interfaceData.responseContent,
178
178
  targetUrl: interfaceData.targetUrl,
179
+ customHeaders: interfaceData.customHeaders || {},
179
180
  filePath: interfaceData.filePath,
180
181
  httpStatus: interfaceData.httpStatus || 200,
181
182
  responseDelay: interfaceData.responseDelay || 0,
@@ -200,6 +201,7 @@ module.exports = function(req, res) {
200
201
  proxyType: interfaceData.proxyType || 'response',
201
202
  responseContent: interfaceData.responseContent || '',
202
203
  targetUrl: interfaceData.targetUrl || '',
204
+ customHeaders: interfaceData.customHeaders || {},
203
205
  filePath: interfaceData.filePath || '',
204
206
  httpStatus: interfaceData.httpStatus || 200,
205
207
  responseDelay: interfaceData.responseDelay || 0,
@@ -316,6 +318,7 @@ module.exports = function(req, res) {
316
318
  proxyType: interfaceData.proxyType || interfacesData.interfaces[index].proxyType,
317
319
  responseContent: interfaceData.responseContent !== undefined ? interfaceData.responseContent : interfacesData.interfaces[index].responseContent,
318
320
  targetUrl: interfaceData.targetUrl !== undefined ? interfaceData.targetUrl : interfacesData.interfaces[index].targetUrl,
321
+ customHeaders: interfaceData.customHeaders !== undefined ? interfaceData.customHeaders : interfacesData.interfaces[index].customHeaders || {},
319
322
  filePath: interfaceData.filePath !== undefined ? interfaceData.filePath : interfacesData.interfaces[index].filePath,
320
323
  httpStatus: interfaceData.httpStatus || interfacesData.interfaces[index].httpStatus,
321
324
  responseDelay: interfaceData.responseDelay !== undefined ? interfaceData.responseDelay : interfacesData.interfaces[index].responseDelay,
@@ -1,6 +1,22 @@
1
1
  const fs = require('fs-extra');
2
2
  const path = require('path');
3
3
  const Mock = require('mockjs');
4
+ const url = require('url');
5
+
6
+ // 生成随机数工具函数(与rules-server.js中保持一致)
7
+ const generateRandomValue = (pattern) => {
8
+ // 如果不是以@开头的模式,直接返回原值
9
+ if (!pattern || !pattern.startsWith('@')) {
10
+ return pattern;
11
+ }
12
+
13
+ const formatPattern = pattern.substring(1); // 去掉@前缀
14
+ // 为每个x生成一个随机字符(字母或数字)
15
+ return formatPattern.replace(/x/g, () => {
16
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
17
+ return chars.charAt(Math.floor(Math.random() * chars.length));
18
+ });
19
+ };
4
20
 
5
21
  module.exports = async function(req, res) {
6
22
  const dataDir = this.dataDir;
@@ -208,11 +224,26 @@ module.exports = async function(req, res) {
208
224
  });
209
225
  }
210
226
 
227
+ // 处理自定义请求头,包括随机值
228
+ const redirectHeaders = targetInterface.customHeaders || {};
229
+ const processedHeaders = {};
230
+
231
+ // 处理随机值,转换为实际值
232
+ Object.entries(redirectHeaders).forEach(([key, value]) => {
233
+ processedHeaders[key] = generateRandomValue(value);
234
+ });
235
+
236
+ const formattedRedirectHeaders = Object.entries(processedHeaders)
237
+ .map(([key, value]) => `${key}: ${value}`)
238
+ .join('\n');
239
+
211
240
  responseData = {
212
241
  statusCode: 302,
213
242
  contentType: 'application/json; charset=utf-8',
214
243
  proxyType: 'redirect',
215
244
  targetUrl: redirectTarget,
245
+ customHeaders: processedHeaders,
246
+ formattedHeaders: formattedRedirectHeaders,
216
247
  mockInfo: {
217
248
  matchedPattern: targetInterface.urlPattern,
218
249
  requestMethod: targetInterface.httpMethod,
@@ -254,11 +285,26 @@ module.exports = async function(req, res) {
254
285
  });
255
286
  }
256
287
 
288
+ // 处理自定义请求头
289
+ const urlRedirectHeaders = targetInterface.customHeaders || {};
290
+ const processedUrlRedirectHeaders = {};
291
+
292
+ // 处理随机值,转换为实际值
293
+ Object.entries(urlRedirectHeaders).forEach(([key, value]) => {
294
+ processedUrlRedirectHeaders[key] = generateRandomValue(value);
295
+ });
296
+
297
+ const formattedUrlRedirectHeaders = Object.entries(processedUrlRedirectHeaders)
298
+ .map(([key, value]) => `${key}: ${value}`)
299
+ .join('\n');
300
+
257
301
  responseData = {
258
302
  statusCode: 302,
259
303
  contentType: 'application/json; charset=utf-8',
260
304
  proxyType: 'url_redirect',
261
305
  targetUrl: baseUrl,
306
+ customHeaders: processedUrlRedirectHeaders,
307
+ formattedHeaders: formattedUrlRedirectHeaders,
262
308
  mockInfo: {
263
309
  matchedPattern: targetInterface.urlPattern,
264
310
  requestMethod: targetInterface.httpMethod,