no password required for file transfer action in remote control menu (#9731)

Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
21pages
2024-10-24 17:20:48 +08:00
committed by GitHub
parent 7a3e1fe648
commit 445e9ac285
16 changed files with 222 additions and 52 deletions

View File

@@ -2304,16 +2304,19 @@ connectMainDesktop(String id,
required bool isRDP,
bool? forceRelay,
String? password,
String? connToken,
bool? isSharedPassword}) async {
if (isFileTransfer) {
await rustDeskWinManager.newFileTransfer(id,
password: password,
isSharedPassword: isSharedPassword,
connToken: connToken,
forceRelay: forceRelay);
} else if (isTcpTunneling || isRDP) {
await rustDeskWinManager.newPortForward(id, isRDP,
password: password,
isSharedPassword: isSharedPassword,
connToken: connToken,
forceRelay: forceRelay);
} else {
await rustDeskWinManager.newRemoteDesktop(id,
@@ -2333,6 +2336,7 @@ connect(BuildContext context, String id,
bool isRDP = false,
bool forceRelay = false,
String? password,
String? connToken,
bool? isSharedPassword}) async {
if (id == '') return;
if (!isDesktop || desktopType == DesktopType.main) {
@@ -2374,6 +2378,7 @@ connect(BuildContext context, String id,
'password': password,
'isSharedPassword': isSharedPassword,
'forceRelay': forceRelay,
'connToken': connToken,
});
}
} else {

View File

@@ -147,12 +147,23 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
child: Text(translate('Reset canvas')),
onPressed: () => ffi.cursorModel.reset()));
}
connectWithToken(
{required bool isFileTransfer, required bool isTcpTunneling}) {
final connToken = bind.sessionGetConnToken(sessionId: ffi.sessionId);
connect(context, id,
isFileTransfer: isFileTransfer,
isTcpTunneling: isTcpTunneling,
connToken: connToken);
}
// transferFile
if (isDesktop) {
v.add(
TTextMenu(
child: Text(translate('Transfer file')),
onPressed: () => connect(context, id, isFileTransfer: true)),
onPressed: () =>
connectWithToken(isFileTransfer: true, isTcpTunneling: false)),
);
}
// tcpTunneling
@@ -160,7 +171,8 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
v.add(
TTextMenu(
child: Text(translate('TCP tunneling')),
onPressed: () => connect(context, id, isTcpTunneling: true)),
onPressed: () =>
connectWithToken(isFileTransfer: false, isTcpTunneling: true)),
);
}
// note

View File

@@ -774,6 +774,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
isRDP: call.arguments['isRDP'],
password: call.arguments['password'],
forceRelay: call.arguments['forceRelay'],
connToken: call.arguments['connToken'],
);
} else if (call.method == kWindowEventMoveTabToNewWindow) {
final args = call.arguments.split(',');

View File

@@ -58,12 +58,14 @@ class FileManagerPage extends StatefulWidget {
required this.password,
required this.isSharedPassword,
this.tabController,
this.connToken,
this.forceRelay})
: super(key: key);
final String id;
final String? password;
final bool? isSharedPassword;
final bool? forceRelay;
final String? connToken;
final DesktopTabController? tabController;
@override
@@ -90,6 +92,7 @@ class _FileManagerPageState extends State<FileManagerPage>
isFileTransfer: true,
password: widget.password,
isSharedPassword: widget.isSharedPassword,
connToken: widget.connToken,
forceRelay: widget.forceRelay);
WidgetsBinding.instance.addPostFrameCallback((_) {
_ffi.dialogManager

View File

@@ -48,6 +48,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
isSharedPassword: params['isSharedPassword'],
tabController: tabController,
forceRelay: params['forceRelay'],
connToken: params['connToken'],
)));
}
@@ -56,7 +57,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
super.initState();
rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
print(
debugPrint(
"[FileTransfer] call ${call.method} with args ${call.arguments} from window $fromWindowId to ${windowId()}");
// for simplify, just replace connectionId
if (call.method == kWindowEventNewFileTransfer) {
@@ -76,6 +77,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
isSharedPassword: args['isSharedPassword'],
tabController: tabController,
forceRelay: args['forceRelay'],
connToken: args['connToken'],
)));
} else if (call.method == "onDestroy") {
tabController.clear();

View File

@@ -33,6 +33,7 @@ class PortForwardPage extends StatefulWidget {
required this.isRDP,
required this.isSharedPassword,
this.forceRelay,
this.connToken,
}) : super(key: key);
final String id;
final String? password;
@@ -40,6 +41,7 @@ class PortForwardPage extends StatefulWidget {
final bool isRDP;
final bool? forceRelay;
final bool? isSharedPassword;
final String? connToken;
@override
State<PortForwardPage> createState() => _PortForwardPageState();
@@ -62,6 +64,7 @@ class _PortForwardPageState extends State<PortForwardPage>
password: widget.password,
isSharedPassword: widget.isSharedPassword,
forceRelay: widget.forceRelay,
connToken: widget.connToken,
isRdp: widget.isRDP);
Get.put<FFI>(_ffi, tag: 'pf_${widget.id}');
debugPrint("Port forward page init success with id ${widget.id}");

View File

@@ -48,6 +48,7 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> {
tabController: tabController,
isRDP: isRDP,
forceRelay: params['forceRelay'],
connToken: params['connToken'],
)));
}
@@ -82,6 +83,7 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> {
isRDP: isRDP,
tabController: tabController,
forceRelay: args['forceRelay'],
connToken: args['connToken'],
)));
} else if (call.method == "onDestroy") {
tabController.clear();

View File

@@ -395,7 +395,7 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
RemoteCountState.find().value = tabController.length;
Future<dynamic> _remoteMethodHandler(call, fromWindowId) async {
print(
debugPrint(
"[Remote Page] call ${call.method} with args ${call.arguments} from window $fromWindowId");
dynamic returnValue;

View File

@@ -375,7 +375,7 @@ class FfiModel with ChangeNotifier {
} else if (name == 'plugin_option') {
handleOption(evt);
} else if (name == "sync_peer_hash_password_to_personal_ab") {
if (desktopType == DesktopType.main || isWeb) {
if (desktopType == DesktopType.main || isWeb || isMobile) {
final id = evt['id'];
final hash = evt['hash'];
if (id != null && hash != null) {
@@ -2462,6 +2462,7 @@ class FFI {
String? switchUuid,
String? password,
bool? isSharedPassword,
String? connToken,
bool? forceRelay,
int? tabWindowId,
int? display,
@@ -2498,6 +2499,7 @@ class FFI {
forceRelay: forceRelay ?? false,
password: password ?? '',
isSharedPassword: isSharedPassword ?? false,
connToken: connToken,
);
} else if (display != null) {
if (displays == null) {

View File

@@ -201,6 +201,7 @@ class RustDeskMultiWindowManager {
String? switchUuid,
bool? isRDP,
bool? isSharedPassword,
String? connToken,
}) async {
var params = {
"type": type.index,
@@ -217,6 +218,9 @@ class RustDeskMultiWindowManager {
if (isSharedPassword != null) {
params['isSharedPassword'] = isSharedPassword;
}
if (connToken != null) {
params['connToken'] = connToken;
}
final msg = jsonEncode(params);
// separate window for file transfer is not supported
@@ -254,8 +258,13 @@ class RustDeskMultiWindowManager {
);
}
Future<MultiWindowCallResult> newFileTransfer(String remoteId,
{String? password, bool? isSharedPassword, bool? forceRelay}) async {
Future<MultiWindowCallResult> newFileTransfer(
String remoteId, {
String? password,
bool? isSharedPassword,
bool? forceRelay,
String? connToken,
}) async {
return await newSession(
WindowType.FileTransfer,
kWindowEventNewFileTransfer,
@@ -264,11 +273,18 @@ class RustDeskMultiWindowManager {
password: password,
forceRelay: forceRelay,
isSharedPassword: isSharedPassword,
connToken: connToken,
);
}
Future<MultiWindowCallResult> newPortForward(String remoteId, bool isRDP,
{String? password, bool? isSharedPassword, bool? forceRelay}) async {
Future<MultiWindowCallResult> newPortForward(
String remoteId,
bool isRDP, {
String? password,
bool? isSharedPassword,
bool? forceRelay,
String? connToken,
}) async {
return await newSession(
WindowType.PortForward,
kWindowEventNewPortForward,
@@ -278,6 +294,7 @@ class RustDeskMultiWindowManager {
forceRelay: forceRelay,
isRDP: isRDP,
isSharedPassword: isSharedPassword,
connToken: connToken,
);
}