diff --git a/packages/sshnoports/bin/sshnp.dart b/packages/sshnoports/bin/sshnp.dart index 8afa8f2c8..d82523744 100644 --- a/packages/sshnoports/bin/sshnp.dart +++ b/packages/sshnoports/bin/sshnp.dart @@ -7,12 +7,16 @@ import 'package:at_utils/at_logger.dart'; // local packages import 'package:sshnoports/sshnp/sshnp.dart'; import 'package:sshnoports/sshnp/cleanup.dart'; +import 'package:sshnoports/sshnp/sshnp_params.dart'; void main(List args) async { AtSignLogger.root_level = 'SHOUT'; SSHNP? sshnp; + + var params = SSHNPParams.fromPartial(SSHNPPartialParams.fromArgs(args)); + try { - sshnp = await SSHNP.fromCommandLineArgs(args); + sshnp = await SSHNP.fromParams(params); ProcessSignal.sigint.watch().listen((signal) async { await cleanUp(sshnp!.sessionId, sshnp.logger); @@ -25,8 +29,11 @@ void main(List args) async { } on ArgumentError catch (_) { exit(1); } catch (error, stackTrace) { - stderr.writeln('Error: ${error.toString()}'); - stderr.writeln('Stack Trace: ${stackTrace.toString()}'); + stderr.writeln(error.toString()); + + if (params.verbose) { + stderr.writeln('\nStack Trace: ${stackTrace.toString()}'); + } if (sshnp != null) { await cleanUp(sshnp.sessionId, sshnp.logger); diff --git a/packages/sshnoports/lib/sshnp/sshnp.dart b/packages/sshnoports/lib/sshnp/sshnp.dart index 82dd7b96a..ca7879452 100644 --- a/packages/sshnoports/lib/sshnp/sshnp.dart +++ b/packages/sshnoports/lib/sshnp/sshnp.dart @@ -4,6 +4,7 @@ import 'package:at_client/at_client.dart'; import 'package:at_utils/at_logger.dart'; import 'package:meta/meta.dart'; import 'package:sshnoports/sshnp/sshnp_impl.dart'; +import 'package:sshnoports/sshnp/sshnp_params.dart'; abstract class SSHNP { abstract final AtSignLogger logger; @@ -113,8 +114,6 @@ abstract class SSHNP { @visibleForTesting bool initialized = false; - - factory SSHNP({ // final fields required AtClient atClient, @@ -155,6 +154,10 @@ abstract class SSHNP { return SSHNPImpl.fromCommandLineArgs(args); } + static Future fromParams(SSHNPParams p) { + return SSHNPImpl.fromParams(p); + } + /// Must be run after construction, to complete initialization /// - Starts notification subscription to listen for responses from sshnpd /// - calls [generateSshKeys] which generates the ssh keypair to use diff --git a/packages/sshnoports/lib/sshnp/sshnp_impl.dart b/packages/sshnoports/lib/sshnp/sshnp_impl.dart index 1a2a3f3a7..e99ecd76c 100644 --- a/packages/sshnoports/lib/sshnp/sshnp_impl.dart +++ b/packages/sshnoports/lib/sshnp/sshnp_impl.dart @@ -188,12 +188,13 @@ class SSHNPImpl implements SSHNP { } } - static Future fromCommandLineArgs(List args) async { - try { - var p = SSHNPParams.fromPartial( - SSHNPPartialParams.fromArgs(args), - ); + static Future fromCommandLineArgs(List args) { + var params = SSHNPParams.fromPartial(SSHNPPartialParams.fromArgs(args)); + return fromParams(params); + } + static Future fromParams(SSHNPParams p) async { + try { if (p.clientAtSign == null) { throw ArgumentError('Option from is mandatory.'); } diff --git a/packages/sshnoports/pubspec.yaml b/packages/sshnoports/pubspec.yaml index e5d42d234..39cbcc3c7 100644 --- a/packages/sshnoports/pubspec.yaml +++ b/packages/sshnoports/pubspec.yaml @@ -8,15 +8,14 @@ version: 3.4.0 homepage: https://docs.atsign.com/ environment: - sdk: '>=3.0.0 <4.0.0' + sdk: ">=3.0.0 <4.0.0" - -dependencies: +dependencies: args: 2.4.2 - at_client: 3.0.61 - at_lookup: 3.0.37 + at_client: 3.0.63 + at_lookup: 3.0.38 at_onboarding_cli: 1.3.0 - at_utils: 3.0.13 + at_utils: 3.0.15 crypton: 2.1.0 dartssh2: 2.8.2 ssh_key: ">=0.7.1 <0.9.0"