feat: keyboard-interactive auth (#349)

This commit is contained in:
lollipopkit
2024-05-07 15:22:31 +08:00
parent 026e414388
commit d0523c1e54
15 changed files with 137 additions and 69 deletions

View File

@@ -6,6 +6,7 @@ import 'package:dartssh2/dartssh2.dart';
import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/ssh_client.dart';
import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/core/utils/auth.dart';
import 'package:toolbox/core/utils/platform/path.dart';
import 'package:toolbox/data/model/app/shell_func.dart';
import 'package:toolbox/data/model/server/system.dart';
@@ -278,15 +279,14 @@ class ServerProvider extends ChangeNotifier {
s.client = await genClient(
spi,
timeout: Duration(seconds: Stores.setting.timeout.fetch()),
onKeyboardInteractive: (_) => KeybordInteractive.defaultHandle(spi),
);
final time2 = DateTime.now();
final spentTime = time2.difference(time1).inMilliseconds;
if (spi.jumpId == null) {
Loggers.app.info('Connected to ${spi.name} in $spentTime ms.');
} else {
Loggers.app.info(
'Connected to ${spi.name} via jump server in $spentTime ms.',
);
Loggers.app.info('Jump to ${spi.name} in $spentTime ms.');
}
} catch (e) {
TryLimiter.inc(sid);
@@ -316,6 +316,11 @@ class ServerProvider extends ChangeNotifier {
s.status.err = e.toString();
_setServerState(s, ServerState.failed);
return;
} on SSHAuthFailError catch (e) {
TryLimiter.inc(sid);
s.status.err = e.toString();
_setServerState(s, ServerState.failed);
return;
} catch (e) {
Loggers.app.warning('Write script to ${spi.name} by shell', e);
@@ -351,6 +356,8 @@ class ServerProvider extends ChangeNotifier {
}
}
if (s.state == ServerState.connecting) return;
/// Keep [finished] state, or the UI will be refreshed to [loading] state
/// instead of the '$Temp | $Uptime'.
/// eg: '32C | 7 days'