From 65e218ccea48970499135ab11c92818e42699716 Mon Sep 17 00:00:00 2001 From: Toki Date: Sun, 22 Sep 2024 17:32:25 +0900 Subject: [PATCH] update --- assets/bin/silentbatch.exe | Bin 0 -> 137728 bytes bin/main.dart | 16 ++- lib/encrypt/encrypt.dart | 33 +++++ lib/log/log_writer_io.dart | 1 + lib/platform/process.dart | 196 +++++++++++++++++++++--------- lib/utils/path.dart | 13 +- lib/utils/slack/slack_sender.dart | 23 ++-- pubspec.yaml | 13 +- 8 files changed, 215 insertions(+), 80 deletions(-) create mode 100644 assets/bin/silentbatch.exe create mode 100644 lib/encrypt/encrypt.dart diff --git a/assets/bin/silentbatch.exe b/assets/bin/silentbatch.exe new file mode 100644 index 0000000000000000000000000000000000000000..93428ef717a8debcf41b678a06f77a6d2b392636 GIT binary patch literal 137728 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≶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 literal 0 HcmV?d00001 diff --git a/bin/main.dart b/bin/main.dart index 97f8f35..ec7b011 100644 --- a/bin/main.dart +++ b/bin/main.dart @@ -1,4 +1,6 @@ import 'dart:io'; +import 'package:dart_framework/encrypt/encrypt.dart'; +import 'package:dart_framework/platform/process.dart'; import 'package:dart_framework/subtitle/parser_smi.dart'; import 'package:dart_framework/subtitle/parser_srt.dart'; import 'package:path/path.dart' as path; @@ -9,7 +11,19 @@ import 'package:dart_framework/charset.dart'; void main() async { Application(() async { - isolate.test(); + // isolate.test(); + // var md5 = generateMd5('test'); + // print('$md5 / ${md5.length}'); + // var encrypted = encrypt('test', 'this is test'); + // print(encrypted); + + // var raw = decrypt('test', encrypted); + // print(raw); + + var processes = await findProcess('MacOS/MetaSlap '); + for(var process in processes) { + Process.killPid(process.pid); + } }, (error, stack) { print(error); print(stack); diff --git a/lib/encrypt/encrypt.dart b/lib/encrypt/encrypt.dart new file mode 100644 index 0000000..3659fef --- /dev/null +++ b/lib/encrypt/encrypt.dart @@ -0,0 +1,33 @@ +// ignore_for_file: depend_on_referenced_packages + +import 'dart:convert'; +import 'package:encrypt/encrypt.dart'; +import 'package:convert/convert.dart'; +import 'package:crypto/crypto.dart' as crypto; + +//encrypt +String encrypt(String key, String text) { + var md5Key = md5(key); + var key32 = Key.fromUtf8(md5Key); + var iv16 = IV.fromUtf8(md5Key.substring(0, 16)); + final e = Encrypter(AES(key32, mode: AESMode.cbc)); + final encryptedData = e.encrypt(text, iv: iv16); + return encryptedData.base64; +} + +//dycrypt +String decrypt(String key, String text) { + var md5Key = md5(key); + var key32 = Key.fromUtf8(md5Key); + var iv16 = IV.fromUtf8(md5Key.substring(0, 16)); + final e = Encrypter(AES(key32, mode: AESMode.cbc)); + final decryptedData = e.decrypt(Encrypted.fromBase64(text), iv: iv16); + return decryptedData; +} + +String md5(String data) { + var content = Utf8Encoder().convert(data); + var md5 = crypto.md5; + var digest = md5.convert(content); + return hex.encode(digest.bytes); + } \ No newline at end of file diff --git a/lib/log/log_writer_io.dart b/lib/log/log_writer_io.dart index 9bd8e78..faa9ff7 100644 --- a/lib/log/log_writer_io.dart +++ b/lib/log/log_writer_io.dart @@ -35,6 +35,7 @@ class LogWriterIO extends IsolateBase implements LogWriter { void onWrite(Object? message) { // print('write in file: $message'); + if(!_file.existsSync()) _file.createSync(recursive: true); _file.writeAsStringSync(message as String, mode: FileMode.append); } diff --git a/lib/platform/process.dart b/lib/platform/process.dart index 5d7074f..74899fc 100644 --- a/lib/platform/process.dart +++ b/lib/platform/process.dart @@ -1,10 +1,12 @@ +// ignore_for_file: avoid_init_to_null + import 'dart:async'; import 'dart:io'; import 'dart:convert'; import 'dart:math'; -import 'dart:typed_data'; import 'package:dart_framework/charset/euc_kr.dart'; +import 'package:dart_framework/utils/system_util.dart'; class ProcessData { late Process process; @@ -16,6 +18,7 @@ class ProcessData { late StringBuffer stderr; bool _enableStdout; bool _enableStderr; + late Converter, String> _decoder = utf8.decoder; // ignore: no_leading_underscores_for_local_identifiers ProcessData(this._enableStdout, this._enableStderr); @@ -48,17 +51,21 @@ class ProcessData { return list; } + set decoder(Converter, String> value) { + _decoder = value; + } + set processValue(Process value) { process = value; stdout = StringBuffer(); stderr = StringBuffer(); - process.stdout.transform(utf8.decoder).listen((event) { + process.stdout.transform(_decoder).listen((event) { stdout.writeln(event); if (_enableStdout) { print(event); } }); - process.stderr.transform(utf8.decoder).listen((event) { + process.stderr.transform(_decoder).listen((event) { stderr.writeln(event); if (_enableStderr) { print('======================= $event'); @@ -96,6 +103,11 @@ class ProcessData { void dispose() async { deleteFile(); } + + Future waitForExit() async { + await process.exitCode; + return simpleFuture; + } } class ProcessExecutor { @@ -121,10 +133,16 @@ class ProcessExecutor { } static Future start(StringBuffer shell, - {String? workspace, bool? printStdout, bool? printStderr}) async { + {Converter, String>? decoder, + String? workspace, + bool? printStdout, + bool? printStderr}) async { var c = Completer(); try { var processData = ProcessData(printStdout ?? true, printStderr ?? true); + if (decoder != null) { + processData.decoder = decoder; + } if (Platform.isMacOS || Platform.isLinux) { workspace = workspace ?? Directory.systemTemp.path; var file = File('$workspace/$tempFileName'); @@ -136,7 +154,8 @@ class ProcessExecutor { file.createSync(); file.writeAsStringSync(shell.toString()); try { - processData.processValue = await Process.start('zsh', [file.path], + var shellExe = Platform.isMacOS ? 'zsh' : 'bash'; + processData.processValue = await Process.start(shellExe, [file.path], workingDirectory: workspace, runInShell: false); } on Exception catch (e) { print(e); @@ -162,6 +181,7 @@ class ProcessExecutor { print('This platform not support process executor.'); } c.complete(processData); + await processData.waitForExit(); } on Exception catch (e) { print('General Exception in ProcessExecutor.start: $e'); } @@ -171,15 +191,17 @@ class ProcessExecutor { static Future run(StringBuffer shell, {String? workspace, bool printStdout = true}) async { var c = Completer(); + workspace = workspace ?? Directory.systemTemp.path; + var file = File('$workspace/$tempFileName'); + print('---------------------------------------------------'); + print('Shell Path: ${file.path} \nExecute Shell: ${shell.toString()}'); ProcessResult? processResult; if (Platform.isMacOS || Platform.isLinux) { - workspace = workspace ?? Directory.systemTemp.path; - var file = File('$workspace/$tempFileName'); - print('Execute Shell: ${file.path} \n ${shell.toString()}'); file.createSync(); file.writeAsStringSync(shell.toString()); try { - await Process.run('zsh', [file.path], workingDirectory: workspace) + var shellExe = Platform.isMacOS ? 'zsh' : 'bash'; + await Process.run(shellExe, [file.path], workingDirectory: workspace) .then((ProcessResult result) { processResult = result; }); @@ -195,9 +217,6 @@ class ProcessExecutor { } c.complete(processResult); } else if (Platform.isWindows) { - workspace = workspace ?? Directory.systemTemp.path; - var file = File('$workspace/$tempFileName'); - print('Execute Bat: ${file.path} \n ${shell.toString()}'); file.createSync(); file.writeAsStringSync(shell.toString()); await Process.run('cmd', ['/C', file.path], workingDirectory: workspace) @@ -205,13 +224,13 @@ class ProcessExecutor { processResult = result; }); if (printStdout) { - print( - // ignore: prefer_interpolation_to_compose_strings - '[ProcessExecutor] Exit Code: ${processResult!.exitCode}\n' + - '==============================================================\n' + - 'Result: ${eucKr.decode(processResult!.stdout)}\n' + - '==============================================================\n' + - 'Error: ${eucKr.decode(processResult!.stderr)}'); + // print( + // // ignore: prefer_interpolation_to_compose_strings + // '[ProcessExecutor] Exit Code: ${processResult!.exitCode}\n' + + // '==============================================================\n' + + // 'Result: ${eucKr.decode()}\n' + + // '==============================================================\n' + + // 'Error: ${eucKr.decode(processResult!.stderr)}'); } file.deleteSync(); c.complete(processResult); @@ -294,33 +313,87 @@ Future removeTempBat() async { return c.future; } -Future> findNetStat(String searchWord) async { +Future runGetStdout(StringBuffer shell) async { + var c = Completer(); + var shellStr = shell.toString(); + var batch = + File('${Directory.systemTemp.path}/temp_${getRnadomPostfix()}.bat'); + batch.writeAsStringSync(shellStr); + var result = await ProcessExecutor.run(shell); + if (result.exitCode == 0 || result.exitCode == 1) { + c.complete(result.stdout); + return c.future; + } else { + throw Exception(result.stderr); + } +} + +Future findUsePortPid(int port, [bool runSlient = false]) async { await removeTempBat(); - var c = Completer>(); - var shell = StringBuffer('netstat -ano | findstr $searchWord'); - var stdout = await ProcessSilentExecutor.run(shell); - var netList = []; - var returnPattern = RegExp('\n|\r'); - var list = stdout.split(returnPattern); - for (var item in list) { - item = item.replaceAll(returnPattern, ''); - if (item.isNotEmpty) { - var categories = item.split(' '); - if (categories.isNotEmpty) { - netList.add(NetStatData(categories)); + var c = Completer(); + var shell = StringBuffer('netstat -aon | find "$port"'); + var stdout = ""; + try { + stdout = runSlient + ? await ProcessSilentExecutor.runSlientBat(shell) + : await runGetStdout(shell); + } on Exception catch (e) {} + if (stdout == "") { + c.complete(null); + } else { + var netList = []; + var returnPattern = RegExp('\n|\r'); + var list = stdout.split(returnPattern); + for (var item in list) { + item = item.replaceAll(returnPattern, ''); + if (item.isNotEmpty) { + var categories = item.split(' '); + if (categories.isNotEmpty) { + netList.add(NetStatData(categories)); + } } } + NetStatData? data = null; + if (netList.length > 1) { + for (var net in netList) { + if (net!.pid != -1) { + data = net; + break; + } + } + } + c.complete(data); } - c.complete(netList); return c.future; } -Future> findProcess(String searchWord) async { +Future> findProcess(String searchWord, + [bool runSlient = false]) async { await removeTempBat(); var c = Completer>(); - var shell = StringBuffer('tasklist /fo "csv" | findstr $searchWord'); - var stdout = await ProcessSilentExecutor.run(shell); - var pList = parseProcessStd(stdout); + var pList = []; + if(Platform.isWindows) { + var shell = StringBuffer('tasklist /fo "csv" | findstr $searchWord'); + var stdout = runSlient + ? await ProcessSilentExecutor.runSlientBat(shell) + : await runGetStdout(shell); + pList = parseProcessStd(stdout); + } else { + var shell = StringBuffer('ps -A | grep \'$searchWord\' | grep -v grep | awk \'{\$2=\$3=""; print \$0}\''); + var result = await ProcessExecutor.run(shell, printStdout: false); + if(result.exitCode == 0) { + var procList = result.stdout.toString().split('\n'); + for(var proc in procList) { + if(proc.isNotEmpty) { + var info = ProcessInfo(); + var index = proc.indexOf(' '); + info.pid = int.parse(proc.substring(0, index)); + info.name = proc.substring(index).trimLeft(); + pList.add(info); + } + } + } + } c.complete(pList); return c.future; } @@ -334,24 +407,27 @@ List parseProcessStd(String stdout) { if (item.isNotEmpty) { var categories = item.split(','); if (categories.length > 4) { - pList.add(ProcessInfo(categories)); + pList.add(ProcessInfo.category(categories)); } } } return pList; } -Future> findProcessByPid(int pid) async { +Future findProcessByPid(int pid, [bool runSlient = false]) async { // await removeTempBat(); - var c = Completer>(); - var batch = getTempBat(fixedName: pid.toString()); - if (!batch.existsSync()) { - batch.writeAsStringSync( - 'tasklist /fi "pid eq ${pid.toString()}" /nh /fo "csv"'); - } - String stdout = await ProcessSilentExecutor.runBat(batch.path); + var c = Completer(); + var shell = + StringBuffer('tasklist /fi "pid eq ${pid.toString()}" /nh /fo "csv"'); + var stdout = runSlient + ? await ProcessSilentExecutor.runSlientBat(shell) + : await runGetStdout(shell); var pList = parseProcessStd(stdout); - c.complete(pList); + if (pList.isNotEmpty) { + c.complete(pList.first); + } else { + c.complete(null); + } return c.future; } @@ -374,25 +450,28 @@ class ProcessSilentExecutor { } } - static Future run(StringBuffer shell) async { + static Future runSlientBat(StringBuffer shell) async { initialize(); var c = Completer(); - var batch = - File('${Directory.current.path}/silent_bat_${getRnadomPostfix()}.bat'); - batch.writeAsStringSync(shell.toString()); - var result = await runBat(batch.path); + var shellStr = shell.toString(); + print('Execute Shell: $shellStr'); + var batch = File( + '${Directory.systemTemp.path}/silent_bat_${getRnadomPostfix()}.bat'); + batch.writeAsStringSync(shellStr); + var result = await runSlient(batch.path); await batch.delete(); c.complete(result); return c.future; } - static Future runBat(String batchPath) async { + static Future runSlient(String batchPath) async { initialize(); var c = Completer(); var current = Directory.current; String result; var log = File('${current.path}/silent_log_${getRnadomPostfix()}.txt'); - await Process.run('${current.path}/silentbatch.exe', [batchPath, log.path]) + await Process.run( + '${current.path}/assets/bin/silentbatch.exe', [batchPath, log.path]) .then((resultData) { Process.killPid(resultData.pid); // print('"$batchPath" => exitCode: ${resultData.exitCode}'); @@ -415,7 +494,7 @@ String getRnadomPostfix() { File getTempBat({String? fixedName}) { fixedName ??= getRnadomPostfix(); - File batch = File('${Directory.current.path}/temp_bat_$fixedName.bat'); + File batch = File('${Directory.systemTemp.path}/temp_bat_$fixedName.bat'); return batch; } @@ -442,8 +521,8 @@ class ProcessInfoListener { _timer = Timer.periodic(Duration(seconds: _checkInterval), (time) async { var enable = false; if (_process != null) { - var list = await findProcessByPid(_process!.pid); - if (list.isNotEmpty) { + var proc = await findProcessByPid(_process!.pid); + if (proc != null) { print('process live'); enable = true; _isRunning = true; @@ -503,7 +582,8 @@ class ProcessInfo { late int session; late String memory; - ProcessInfo(List categories) { + ProcessInfo(); + ProcessInfo.category(List categories) { var count = 0; var length = categories.length; for (var i = 0; i < length; ++i) { diff --git a/lib/utils/path.dart b/lib/utils/path.dart index 565b9d2..356b87c 100644 --- a/lib/utils/path.dart +++ b/lib/utils/path.dart @@ -45,7 +45,7 @@ class Path { static Future copy(String startPath, String destPath, bool isDir, {required List? ignorePattern, required List? ignoredList, - bool isMove = false}) async { + bool isMove = false, bool isOverwrite = true}) async { var c = Completer(); var result = true; if (ignorePattern != null) { @@ -71,11 +71,11 @@ class Path { for (var file in files) { if (file is File) { await copy(file.path, destDir.path, false, - ignorePattern: ignorePattern, ignoredList: ignoredList); + ignorePattern: ignorePattern, ignoredList: ignoredList, isMove: isMove, isOverwrite: isOverwrite); } if (file is Directory) { await copy(file.path, destDir.path, true, - ignorePattern: ignorePattern, ignoredList: ignoredList); + ignorePattern: ignorePattern, ignoredList: ignoredList, isMove: isMove, isOverwrite: isOverwrite); } } } else { @@ -83,9 +83,14 @@ class Path { if (!destDir.existsSync()) destDir.createSync(recursive: true); print('File copy: $startPath --> $destChildPath'); var file = File(startPath); + var fileDest = File(destChildPath); + if(fileDest.existsSync()) + { + await fileDest.delete(); + } await file.copy(destChildPath); if (isMove) { - file.delete(recursive: true); + await file.delete(recursive: true); } } } on Exception { diff --git a/lib/utils/slack/slack_sender.dart b/lib/utils/slack/slack_sender.dart index e036bd3..28c1e46 100644 --- a/lib/utils/slack/slack_sender.dart +++ b/lib/utils/slack/slack_sender.dart @@ -13,17 +13,13 @@ enum SlackBuildType { android, ios, windows, mac, web } class SlackSender { //Bot TOKEN - String token = "xoxb-291006091297-QT2K1PCpwyX4b5wKk3AQew2G"; + String token; //API - https://api.slack.com/methods/chat.postMessage final urlMessagePost = "https://slack.com/api/chat.postMessage"; //API - https://api.slack.com/methods/files.upload final urlFileUplaod = "https://slack.com/api/files.upload"; - SlackSender(String? token) { - if(token != null) { - this.token = token; - } - } + SlackSender(this.token); String getValidatedUser(String? targetUser) { targetUser ??= "@here"; @@ -31,7 +27,13 @@ class SlackSender { return targetUser; } - Future send(DataSlack message, + Future sendData(DataSlack message, + {Function(String)? completeListener, + Function(Object)? errorListener}) async { + return await send(message.json, completeListener: completeListener, errorListener: errorListener); + } + + Future send(String jsonString, {Function(String)? completeListener, Function(Object)? errorListener}) async { String url = urlMessagePost; @@ -41,9 +43,8 @@ class SlackSender { 'Content-Type': 'application/json', 'Authorization': 'Bearer $token' }; - var body = message.json; - print(body); - var response = await http.post(Uri.parse(url), headers: header, body: message.json); + print(jsonString); + var response = await http.post(Uri.parse(url), headers: header, body: jsonString); print(response.statusCode); @@ -128,7 +129,7 @@ class SlackSender { ]; attachments?.add(attachment); - return await send(message); + return await sendData(message); } String buildTypeToString(SlackBuildType type) { diff --git a/pubspec.yaml b/pubspec.yaml index aaf28bd..f141ee0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,24 +4,25 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: '>=2.18.6 <3.0.0' + sdk: '>=3.2.3 <4.0.0' # Add regular dependencies here. dependencies: path: ^1.8.2 args: ^2.3.2 - json_annotation: ^4.8.0 + json_annotation: ^4.8.1 archive: ^3.3.5 ftpconnect: ^2.0.5 yaml: ^3.1.1 - http: ^0.13.5 + http: ^1.2.1 color: ^3.0.0 protobuf: ^3.1.0 + encrypt: ^5.0.3 # subtitle_wrapper_package: ^2.1.1 # equatable: ^2.0.5 dev_dependencies: - lints: ^2.0.0 + lints: ^3.0.0 test: ^1.21.0 - build_runner: ^2.1.4 - json_serializable: ^6.0.1 + build_runner: ^2.4.8 + json_serializable: ^6.7.1