mirror of
https://github.com/wanghongenpin/proxypin.git
synced 2026-05-20 16:15:47 +08:00
Rewrite request modification to add regular matching test
This commit is contained in:
@@ -24,6 +24,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_toastr/flutter_toastr.dart';
|
||||
import 'package:network_proxy/network/bin/server.dart';
|
||||
import 'package:network_proxy/network/components/rewrite/request_rewrite_manager.dart';
|
||||
import 'package:network_proxy/network/components/rewrite/rewrite_rule.dart';
|
||||
import 'package:network_proxy/network/components/script_manager.dart';
|
||||
import 'package:network_proxy/network/host_port.dart';
|
||||
import 'package:network_proxy/network/http/http.dart';
|
||||
@@ -136,7 +137,7 @@ class _FavoriteItemState extends State<_FavoriteItem> {
|
||||
style: TextStyle(fontSize: 14, color: Colors.blue),
|
||||
),
|
||||
TextSpan(
|
||||
text: request.path(),
|
||||
text: request.path,
|
||||
style: TextStyle(fontSize: 14, color: Colors.green),
|
||||
),
|
||||
if (request.requestUri?.query.isNotEmpty == true)
|
||||
@@ -249,7 +250,7 @@ class _FavoriteItemState extends State<_FavoriteItem> {
|
||||
Navigator.push(context, pageRoute);
|
||||
},
|
||||
label: localizations.editRequest,
|
||||
icon: Icons.edit_outlined),
|
||||
icon: Icons.replay_outlined),
|
||||
),
|
||||
|
||||
//script and rewrite
|
||||
@@ -257,9 +258,8 @@ class _FavoriteItemState extends State<_FavoriteItem> {
|
||||
left: itemButton(
|
||||
onPressed: () async {
|
||||
Navigator.maybePop(context);
|
||||
|
||||
var scriptManager = await ScriptManager.instance;
|
||||
var url = '${request.remoteDomain()}${request.path()}';
|
||||
var url = request.domainPath;
|
||||
var scriptItem = (scriptManager).list.firstWhereOrNull((it) => it.url == url);
|
||||
String? script = scriptItem == null ? null : await scriptManager.getScript(scriptItem);
|
||||
|
||||
@@ -276,11 +276,17 @@ class _FavoriteItemState extends State<_FavoriteItem> {
|
||||
bool isRequest = request.response == null;
|
||||
var requestRewrites = await RequestRewriteManager.instance;
|
||||
|
||||
var pageRoute = MaterialPageRoute(builder: (_) => RewriteRule());
|
||||
var ruleType = isRequest ? RuleType.requestReplace : RuleType.responseReplace;
|
||||
var rule = requestRewrites.getRequestRewriteRule(request, ruleType);
|
||||
|
||||
var rewriteItems = await requestRewrites.getRewriteItems(rule);
|
||||
|
||||
var pageRoute = MaterialPageRoute(
|
||||
builder: (_) => RewriteRule(rule: rule, items: rewriteItems, request: request));
|
||||
if (mounted) Navigator.push(context, pageRoute);
|
||||
},
|
||||
label: localizations.requestRewrite,
|
||||
icon: Icons.replay_outlined),
|
||||
icon: Icons.edit_outlined),
|
||||
),
|
||||
SizedBox(height: 2),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||
@@ -362,9 +368,12 @@ class _FavoriteItemState extends State<_FavoriteItem> {
|
||||
|
||||
Widget itemButton(
|
||||
{required String label, required IconData icon, required Function() onPressed, double iconSize = 20}) {
|
||||
var style = Theme.of(context).textTheme.bodyMedium;
|
||||
var theme = Theme.of(context);
|
||||
var style = theme.textTheme.bodyMedium;
|
||||
return TextButton.icon(
|
||||
onPressed: onPressed, label: Text(label, style: style), icon: Icon(icon, size: iconSize, color: style?.color));
|
||||
onPressed: onPressed,
|
||||
label: Text(label, style: style),
|
||||
icon: Icon(icon, size: iconSize, color: theme.colorScheme.primary.withOpacity(0.65)));
|
||||
}
|
||||
|
||||
Widget menuItem({required Widget left, required Widget right}) {
|
||||
|
||||
@@ -126,9 +126,9 @@ class RequestListState extends State<RequestListWidget> {
|
||||
///清理
|
||||
clean() {
|
||||
setState(() {
|
||||
container.clear();
|
||||
domainListKey.currentState?.clean();
|
||||
requestSequenceKey.currentState?.clean();
|
||||
container.clear();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ class RequestRowState extends State<RequestRow> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
String url = widget.displayDomain ? request.requestUrl : request.path();
|
||||
String url = widget.displayDomain ? request.requestUrl : request.path;
|
||||
|
||||
var title = Strings.autoLineString('${request.method.name} $url');
|
||||
|
||||
@@ -250,7 +250,7 @@ class RequestRowState extends State<RequestRow> {
|
||||
Navigator.push(getContext(), pageRoute);
|
||||
},
|
||||
label: localizations.editRequest,
|
||||
icon: Icons.edit_outlined),
|
||||
icon: Icons.replay_outlined),
|
||||
),
|
||||
//script and rewrite
|
||||
menuItem(
|
||||
@@ -259,8 +259,8 @@ class RequestRowState extends State<RequestRow> {
|
||||
Navigator.maybePop(availableContext);
|
||||
|
||||
var scriptManager = await ScriptManager.instance;
|
||||
var url = '${request.remoteDomain()}${request.path()}';
|
||||
var scriptItem = (scriptManager).list.firstWhereOrNull((it) => it.url == url);
|
||||
var url = request.domainPath;
|
||||
var scriptItem = scriptManager.list.firstWhereOrNull((it) => it.url == url);
|
||||
String? script = scriptItem == null ? null : await scriptManager.getScript(scriptItem);
|
||||
|
||||
var pageRoute = MaterialPageRoute(
|
||||
@@ -278,24 +278,17 @@ class RequestRowState extends State<RequestRow> {
|
||||
var requestRewrites = await RequestRewriteManager.instance;
|
||||
|
||||
var ruleType = isRequest ? RuleType.requestReplace : RuleType.responseReplace;
|
||||
var url = '${request.remoteDomain()}${request.path()}';
|
||||
var rule = requestRewrites.rules.firstWhere((it) => it.matchUrl(url, ruleType),
|
||||
orElse: () => RequestRewriteRule(type: ruleType, url: url));
|
||||
var rule = requestRewrites.getRequestRewriteRule(request, ruleType);
|
||||
|
||||
var rewriteItems = await requestRewrites.getRewriteItems(rule);
|
||||
RewriteType rewriteType =
|
||||
isRequest ? RewriteType.replaceRequestBody : RewriteType.replaceResponseBody;
|
||||
// if (!rewriteItems?.any((element) => element.type == rewriteType)) {
|
||||
// rewriteItems.add(RewriteItem(rewriteType, true,
|
||||
// values: {'body': isRequest ? request.bodyAsString : response?.bodyAsString}));
|
||||
// }
|
||||
|
||||
var pageRoute = MaterialPageRoute(builder: (_) => RewriteRule(rule: rule, items: rewriteItems));
|
||||
var pageRoute = MaterialPageRoute(
|
||||
builder: (_) => RewriteRule(rule: rule, items: rewriteItems, request: request));
|
||||
var context = availableContext;
|
||||
if (context.mounted) Navigator.push(context, pageRoute);
|
||||
},
|
||||
label: localizations.requestRewrite,
|
||||
icon: Icons.replay_outlined),
|
||||
icon: Icons.edit_outlined),
|
||||
),
|
||||
menuItem(
|
||||
left: itemButton(
|
||||
@@ -353,9 +346,12 @@ class RequestRowState extends State<RequestRow> {
|
||||
|
||||
Widget itemButton(
|
||||
{required String label, required IconData icon, required Function() onPressed, double iconSize = 20}) {
|
||||
var style = Theme.of(context).textTheme.bodyMedium;
|
||||
var theme = Theme.of(context);
|
||||
var style = theme.textTheme.bodyMedium;
|
||||
return TextButton.icon(
|
||||
onPressed: onPressed, label: Text(label, style: style), icon: Icon(icon, size: iconSize, color: style?.color));
|
||||
onPressed: onPressed,
|
||||
label: Text(label, style: style),
|
||||
icon: Icon(icon, size: iconSize, color: theme.colorScheme.primary.withOpacity(0.65)));
|
||||
}
|
||||
|
||||
Widget menuItem({required Widget left, required Widget right}) {
|
||||
|
||||
@@ -26,8 +26,8 @@ class RequestSequence extends StatefulWidget {
|
||||
}
|
||||
|
||||
class RequestSequenceState extends State<RequestSequence> with AutomaticKeepAliveClientMixin {
|
||||
///请求和对应的row的映射
|
||||
Map<HttpRequest, GlobalKey<RequestRowState>> indexes = HashMap();
|
||||
///请求id和对应的row的映射
|
||||
Map<String, GlobalKey<RequestRowState>> indexes = HashMap();
|
||||
|
||||
///显示的请求列表 最新的在前面
|
||||
Queue<HttpRequest> view = Queue();
|
||||
@@ -71,7 +71,7 @@ class RequestSequenceState extends State<RequestSequence> with AutomaticKeepAliv
|
||||
|
||||
///添加响应
|
||||
addResponse(HttpResponse response) {
|
||||
var state = indexes.remove(response.request);
|
||||
var state = indexes.remove(response.request?.requestId);
|
||||
state?.currentState?.change(response);
|
||||
|
||||
if (searchModel == null || searchModel!.isEmpty || response.request == null) {
|
||||
@@ -145,10 +145,9 @@ class RequestSequenceState extends State<RequestSequence> with AutomaticKeepAliv
|
||||
Divider(thickness: 0.2, height: 0, color: Theme.of(context).dividerColor),
|
||||
itemCount: view.length,
|
||||
itemBuilder: (context, index) {
|
||||
GlobalKey<RequestRowState> key = indexes[view.elementAt(index)] ??= GlobalKey();
|
||||
return RequestRow(
|
||||
index: view.length - index,
|
||||
key: key,
|
||||
key: indexes[view.elementAt(index).requestId] ??= GlobalKey(),
|
||||
request: view.elementAt(index),
|
||||
proxyServer: widget.proxyServer,
|
||||
displayDomain: widget.displayDomain,
|
||||
|
||||
Reference in New Issue
Block a user