whistle.mock-plugins 1.0.4 → 1.0.5
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,
|