mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 15:24:35 +01:00
opt.: disable it on iOS
This commit is contained in:
@@ -33,6 +33,10 @@ abstract final class ProxyCommandExecutor {
|
|||||||
required int port,
|
required int port,
|
||||||
required String user,
|
required String user,
|
||||||
}) async {
|
}) async {
|
||||||
|
if (Platform.isIOS) {
|
||||||
|
throw ProxyCommandException(message: 'ProxyCommand is not supported on iOS');
|
||||||
|
}
|
||||||
|
|
||||||
final finalCommand = config.getFinalCommand(hostname: hostname, port: port, user: user);
|
final finalCommand = config.getFinalCommand(hostname: hostname, port: port, user: user);
|
||||||
|
|
||||||
Loggers.app.info('Executing proxy command: $finalCommand');
|
Loggers.app.info('Executing proxy command: $finalCommand');
|
||||||
@@ -99,6 +103,10 @@ abstract final class ProxyCommandExecutor {
|
|||||||
|
|
||||||
/// Validate proxy command configuration
|
/// Validate proxy command configuration
|
||||||
static Future<String?> validateConfig(ProxyCommandConfig config) async {
|
static Future<String?> validateConfig(ProxyCommandConfig config) async {
|
||||||
|
if (Platform.isIOS) {
|
||||||
|
return 'ProxyCommand is not supported on iOS';
|
||||||
|
}
|
||||||
|
|
||||||
final testCommand = config.getFinalCommand(hostname: 'test.example.com', port: 22, user: 'testuser');
|
final testCommand = config.getFinalCommand(hostname: 'test.example.com', port: 22, user: 'testuser');
|
||||||
|
|
||||||
// Check if required placeholders are present
|
// Check if required placeholders are present
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:dartssh2/dartssh2.dart';
|
import 'package:dartssh2/dartssh2.dart';
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
@@ -122,24 +123,27 @@ Future<SSHClient> genClient(
|
|||||||
// For ProxyCommand and direct connections, get SSHSocket
|
// For ProxyCommand and direct connections, get SSHSocket
|
||||||
SSHSocket? socket;
|
SSHSocket? socket;
|
||||||
try {
|
try {
|
||||||
|
final proxyCommand = spi.proxyCommand;
|
||||||
// ProxyCommand support - Check for ProxyCommand configuration first
|
// ProxyCommand support - Check for ProxyCommand configuration first
|
||||||
if (spi.proxyCommand != null) {
|
if (proxyCommand != null && !Platform.isIOS) {
|
||||||
try {
|
try {
|
||||||
Loggers.app.info('Connecting via ProxyCommand: ${spi.proxyCommand!.command}');
|
Loggers.app.info('Connecting via ProxyCommand: ${proxyCommand.command}');
|
||||||
socket = await ProxyCommandExecutor.executeProxyCommand(
|
socket = await ProxyCommandExecutor.executeProxyCommand(
|
||||||
spi.proxyCommand!,
|
proxyCommand,
|
||||||
hostname: spi.ip,
|
hostname: spi.ip,
|
||||||
port: spi.port,
|
port: spi.port,
|
||||||
user: spi.user,
|
user: spi.user,
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Loggers.app.warning('ProxyCommand failed', e);
|
Loggers.app.warning('ProxyCommand failed', e);
|
||||||
if (!spi.proxyCommand!.retryOnFailure) {
|
if (!proxyCommand.retryOnFailure) {
|
||||||
rethrow;
|
rethrow;
|
||||||
}
|
}
|
||||||
// If retry is enabled, fall through to direct connection
|
// If retry is enabled, fall through to direct connection
|
||||||
Loggers.app.info('ProxyCommand failed, falling back to direct connection');
|
Loggers.app.info('ProxyCommand failed, falling back to direct connection');
|
||||||
}
|
}
|
||||||
|
} else if (proxyCommand != null && Platform.isIOS) {
|
||||||
|
Loggers.app.info('ProxyCommand configuration is ignored on iOS');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Direct connection (or fallback)
|
// Direct connection (or fallback)
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ extension _Actions on _ServerEditPageState {
|
|||||||
|
|
||||||
// ProxyCommand configuration
|
// ProxyCommand configuration
|
||||||
ProxyCommandConfig? proxyCommand;
|
ProxyCommandConfig? proxyCommand;
|
||||||
if (_proxyCommandEnabled.value) {
|
if (!Platform.isIOS && _proxyCommandEnabled.value) {
|
||||||
final command = _proxyCommandController.text.trim();
|
final command = _proxyCommandController.text.trim();
|
||||||
if (command.isEmpty) {
|
if (command.isEmpty) {
|
||||||
context.showSnackBar('ProxyCommand is enabled but command is empty');
|
context.showSnackBar('ProxyCommand is enabled but command is empty');
|
||||||
@@ -292,6 +292,9 @@ extension _Actions on _ServerEditPageState {
|
|||||||
requiresExecutable: requiresExecutable,
|
requiresExecutable: requiresExecutable,
|
||||||
executableName: requiresExecutable ? executable : null,
|
executableName: requiresExecutable ? executable : null,
|
||||||
);
|
);
|
||||||
|
} else if (Platform.isIOS && _proxyCommandEnabled.value) {
|
||||||
|
context.showSnackBar('ProxyCommand is not supported on iOS');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final spi = Spi(
|
final spi = Spi(
|
||||||
@@ -483,7 +486,7 @@ extension _Utils on _ServerEditPageState {
|
|||||||
|
|
||||||
// Load ProxyCommand configuration
|
// Load ProxyCommand configuration
|
||||||
final proxyCommand = spi.proxyCommand;
|
final proxyCommand = spi.proxyCommand;
|
||||||
if (proxyCommand != null) {
|
if (proxyCommand != null && !Platform.isIOS) {
|
||||||
_proxyCommandEnabled.value = true;
|
_proxyCommandEnabled.value = true;
|
||||||
_proxyCommandController.text = proxyCommand.command;
|
_proxyCommandController.text = proxyCommand.command;
|
||||||
_proxyCommandTimeout.value = proxyCommand.timeout.inSeconds;
|
_proxyCommandTimeout.value = proxyCommand.timeout.inSeconds;
|
||||||
@@ -502,5 +505,12 @@ extension _Utils on _ServerEditPageState {
|
|||||||
_proxyCommandTimeout.value = 30;
|
_proxyCommandTimeout.value = 30;
|
||||||
_proxyCommandPreset.value = null;
|
_proxyCommandPreset.value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Platform.isIOS) {
|
||||||
|
_proxyCommandEnabled.value = false;
|
||||||
|
_proxyCommandController.text = '';
|
||||||
|
_proxyCommandTimeout.value = 30;
|
||||||
|
_proxyCommandPreset.value = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -450,6 +450,14 @@ extension _Widgets on _ServerEditPageState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildProxyCommand() {
|
Widget _buildProxyCommand() {
|
||||||
|
if (Platform.isIOS) {
|
||||||
|
return ListTile(
|
||||||
|
title: const Text('ProxyCommand'),
|
||||||
|
subtitle: const Text('ProxyCommand is not available on iOS'),
|
||||||
|
trailing: const Icon(Icons.block, color: Colors.grey),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
Reference in New Issue
Block a user