#109 fix: path sep on win

This commit is contained in:
lollipopkit
2023-08-07 17:41:35 +08:00
parent c4925ee2c7
commit 20c859b0a1
6 changed files with 52 additions and 26 deletions

View File

@@ -6,7 +6,6 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:r_upgrade/r_upgrade.dart'; import 'package:r_upgrade/r_upgrade.dart';
import 'package:toolbox/core/extension/navigator.dart'; import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/data/res/path.dart'; import 'package:toolbox/data/res/path.dart';
import '../data/provider/app.dart'; import '../data/provider/app.dart';

View File

@@ -73,16 +73,7 @@ String getTime(int? unixMill) {
.replaceFirst('.000', ''); .replaceFirst('.000', '');
} }
/// Join two path with `/`
String pathJoin(String path1, String path2) { String pathJoin(String path1, String path2) {
return path1 + (path1.endsWith('/') ? '' : '/') + path2; return path1 + (path1.endsWith('/') ? '' : '/') + path2;
} }
String? getHomeDir() {
final envVars = Platform.environment;
if (isMacOS || isLinux) {
return envVars['HOME'];
} else if (isWindows) {
return envVars['UserProfile'];
}
return null;
}

View File

@@ -10,7 +10,7 @@ enum PlatformType {
windows, windows,
web, web,
fuchsia, fuchsia,
unknown, unknown;
} }
final _p = () { final _p = () {
@@ -38,7 +38,15 @@ final _p = () {
return PlatformType.unknown; return PlatformType.unknown;
}(); }();
final _pathSep = () {
if (Platform.isWindows) {
return '\\';
}
return '/';
}();
PlatformType get platform => _p; PlatformType get platform => _p;
String get pathSeparator => _pathSep;
bool get isAndroid => _p == PlatformType.android; bool get isAndroid => _p == PlatformType.android;
bool get isIOS => _p == PlatformType.ios; bool get isIOS => _p == PlatformType.ios;
@@ -51,3 +59,23 @@ bool get isDesktop =>
_p == PlatformType.linux || _p == PlatformType.linux ||
_p == PlatformType.macos || _p == PlatformType.macos ||
_p == PlatformType.windows; _p == PlatformType.windows;
/// Available only on desktop,
/// return null on mobile
String? getHomeDir() {
final envVars = Platform.environment;
if (isMacOS || isLinux) {
return envVars['HOME'];
} else if (isWindows) {
return envVars['UserProfile'];
}
return null;
}
/// Join two paths with platform specific separator
String pathJoin(String path1, String path2) {
if (isWindows) {
return path1 + (path1.endsWith('\\') ? '' : '\\') + path2;
}
return path1 + (path1.endsWith('/') ? '' : '/') + path2;
}

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/utils/misc.dart'; import '../../../core/utils/platform.dart';
class PathWithPrefix { class PathWithPrefix {
final String _prefixPath; final String _prefixPath;

View File

@@ -9,7 +9,6 @@ import 'package:toolbox/data/store/private_key.dart';
import 'package:toolbox/locator.dart'; import 'package:toolbox/locator.dart';
import '../../../core/route.dart'; import '../../../core/route.dart';
import '../../../core/utils/misc.dart';
import '../../../core/utils/platform.dart'; import '../../../core/utils/platform.dart';
import '../../../data/model/server/private_key_info.dart'; import '../../../data/model/server/private_key_info.dart';
import '../../../data/provider/private_key.dart'; import '../../../data/provider/private_key.dart';

View File

@@ -1,4 +1,4 @@
import 'dart:io' show File, Platform, Process; import 'dart:io' show Directory, File, Platform, Process;
import 'package:after_layout/after_layout.dart'; import 'package:after_layout/after_layout.dart';
import 'package:circle_chart/circle_chart.dart'; import 'package:circle_chart/circle_chart.dart';
@@ -8,7 +8,6 @@ import 'package:get_it/get_it.dart';
import 'package:nil/nil.dart'; import 'package:nil/nil.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/order.dart'; import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/data/model/app/net_view.dart'; import 'package:toolbox/data/model/app/net_view.dart';
import 'package:toolbox/data/model/server/snippet.dart'; import 'package:toolbox/data/model/server/snippet.dart';
import 'package:toolbox/data/provider/snippet.dart'; import 'package:toolbox/data/provider/snippet.dart';
@@ -17,6 +16,7 @@ import 'package:toolbox/view/widget/tag/picker.dart';
import 'package:toolbox/view/widget/tag/switcher.dart'; import 'package:toolbox/view/widget/tag/switcher.dart';
import '../../../core/route.dart'; import '../../../core/route.dart';
import '../../../core/utils/misc.dart' hide pathJoin;
import '../../../core/utils/platform.dart'; import '../../../core/utils/platform.dart';
import '../../../core/utils/server.dart'; import '../../../core/utils/server.dart';
import '../../../core/utils/ui.dart'; import '../../../core/utils/ui.dart';
@@ -453,17 +453,24 @@ class _ServerPageState extends State<ServerPage>
AppRoute(SSHPage(spi: spi), 'ssh page').go(context); AppRoute(SSHPage(spi: spi), 'ssh page').go(context);
return; return;
} }
List<String> extarArgs = []; final extraArgs = <String>[];
if (spi.port != 22) {
final path = "/tmp/.serverbox_pk_${spi.pubKeyId}"; extraArgs.addAll(['-p', '${spi.port}']);
final file = File(path);
if (spi.pubKeyId != null) {
await file.delete();
await file.writeAsString(getPrivateKey(spi.pubKeyId!));
extarArgs += ["-i", path];
} }
List<String> sshCommand = ["ssh", "${spi.user}@${spi.ip}"] + extarArgs; final path = () {
final tempKeyFileName = 'srvbox_pk_${spi.pubKeyId}';
return pathJoin(Directory.systemTemp.path, tempKeyFileName);
}();
final file = File(path);
final shouldGenKey = spi.pubKeyId != null;
if (shouldGenKey) {
await file.delete();
await file.writeAsString(getPrivateKey(spi.pubKeyId!));
extraArgs.addAll(["-i", path]);
}
List<String> sshCommand = ["ssh", "${spi.user}@${spi.ip}"] + extraArgs;
final system = Platform.operatingSystem; final system = Platform.operatingSystem;
switch (system) { switch (system) {
case "windows": case "windows":
@@ -482,7 +489,9 @@ class _ServerPageState extends State<ServerPage>
showSnackBar(context, Text('Mismatch system: $system')); showSnackBar(context, Text('Mismatch system: $system'));
} }
// For security reason, delete the private key file after use // For security reason, delete the private key file after use
await file.delete(); if (shouldGenKey) {
await Future.delayed(const Duration(seconds: 2), file.delete);
}
} }
@override @override