Add warp config generator
This commit is contained in:
@@ -54,6 +54,8 @@ class SingboxConfigOption with _$SingboxConfigOption {
|
||||
required bool enableWarp,
|
||||
required WarpDetourMode warpDetourMode,
|
||||
required String warpLicenseKey,
|
||||
required String warpAccountId,
|
||||
required String warpAccessToken,
|
||||
required String warpCleanIp,
|
||||
required int warpPort,
|
||||
@OptionalRangeJsonConverter() required OptionalRange warpNoise,
|
||||
|
||||
17
lib/singbox/model/warp_account.dart
Normal file
17
lib/singbox/model/warp_account.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'warp_account.freezed.dart';
|
||||
part 'warp_account.g.dart';
|
||||
|
||||
@freezed
|
||||
class WarpAccount with _$WarpAccount {
|
||||
const factory WarpAccount({
|
||||
required String licenseKey,
|
||||
required String accountId,
|
||||
required String accessToken,
|
||||
}) = _WarpAccount;
|
||||
|
||||
factory WarpAccount.fromJson(Map<String, dynamic> json) =>
|
||||
_$WarpAccountFromJson(json);
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import 'package:hiddify/singbox/model/singbox_config_option.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_outbound.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_stats.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_status.dart';
|
||||
import 'package:hiddify/singbox/model/warp_account.dart';
|
||||
import 'package:hiddify/singbox/service/singbox_service.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:loggy/loggy.dart';
|
||||
@@ -454,4 +455,44 @@ class FFISingboxService with InfraLogger implements SingboxService {
|
||||
}
|
||||
return _logBuffer;
|
||||
}
|
||||
|
||||
@override
|
||||
TaskEither<String, WarpAccount> generateWarpConfig({
|
||||
required String licenseKey,
|
||||
required String previousAccountId,
|
||||
required String previousAccessToken,
|
||||
}) {
|
||||
loggy.debug("generating warp config");
|
||||
return TaskEither(
|
||||
() => CombineWorker().execute(
|
||||
() {
|
||||
final response = _box
|
||||
.generateWarpConfig(
|
||||
licenseKey.toNativeUtf8().cast(),
|
||||
previousAccountId.toNativeUtf8().cast(),
|
||||
previousAccessToken.toNativeUtf8().cast(),
|
||||
)
|
||||
.cast<Utf8>()
|
||||
.toDartString();
|
||||
if (response.startsWith("error:")) {
|
||||
return left(response.replaceFirst('error:', ""));
|
||||
}
|
||||
if (jsonDecode(response)
|
||||
case {
|
||||
"account-id": final String newAccountId,
|
||||
"access-token": final String newAccessToken,
|
||||
}) {
|
||||
return right(
|
||||
WarpAccount(
|
||||
licenseKey: licenseKey,
|
||||
accountId: newAccountId,
|
||||
accessToken: newAccessToken,
|
||||
),
|
||||
);
|
||||
}
|
||||
return left("invalid response");
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:hiddify/singbox/model/singbox_config_option.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_outbound.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_stats.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_status.dart';
|
||||
import 'package:hiddify/singbox/model/warp_account.dart';
|
||||
import 'package:hiddify/singbox/service/singbox_service.dart';
|
||||
import 'package:hiddify/utils/custom_loggers.dart';
|
||||
import 'package:rxdart/rxdart.dart';
|
||||
@@ -263,4 +264,39 @@ class PlatformSingboxService with InfraLogger implements SingboxService {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
TaskEither<String, WarpAccount> generateWarpConfig({
|
||||
required String licenseKey,
|
||||
required String previousAccountId,
|
||||
required String previousAccessToken,
|
||||
}) {
|
||||
return TaskEither(
|
||||
() async {
|
||||
loggy.debug("generating warp config");
|
||||
final warpConfig = await methodChannel.invokeMethod(
|
||||
"generate_warp_config",
|
||||
{
|
||||
"license-key": licenseKey,
|
||||
"previous-account-id": previousAccountId,
|
||||
"previous-access-token": previousAccessToken,
|
||||
},
|
||||
);
|
||||
if (jsonDecode(warpConfig as String)
|
||||
case {
|
||||
"account-id": final String newAccountId,
|
||||
"access-token": final String newAccessToken,
|
||||
}) {
|
||||
return right(
|
||||
WarpAccount(
|
||||
licenseKey: licenseKey,
|
||||
accountId: newAccountId,
|
||||
accessToken: newAccessToken,
|
||||
),
|
||||
);
|
||||
}
|
||||
return left("invalid response");
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:hiddify/singbox/model/singbox_config_option.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_outbound.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_stats.dart';
|
||||
import 'package:hiddify/singbox/model/singbox_status.dart';
|
||||
import 'package:hiddify/singbox/model/warp_account.dart';
|
||||
import 'package:hiddify/singbox/service/ffi_singbox_service.dart';
|
||||
import 'package:hiddify/singbox/service/platform_singbox_service.dart';
|
||||
|
||||
@@ -85,4 +86,10 @@ abstract interface class SingboxService {
|
||||
Stream<List<String>> watchLogs(String path);
|
||||
|
||||
TaskEither<String, Unit> clearLogs();
|
||||
|
||||
TaskEither<String, WarpAccount> generateWarpConfig({
|
||||
required String licenseKey,
|
||||
required String previousAccountId,
|
||||
required String previousAccessToken,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user