mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-11-07 08:43:12 +00:00
fix: preserve login method across session windows
This commit is contained in:
1 parent
956031d109
commit
a2d21df237
5 files changed
+33
-3
No files matched your search
@@ -579,7 +579,9 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
|
|||||||
bool isTerminal = false}) {
|
bool isTerminal = false}) {
|
||||||
final connToken = bind.sessionGetConnToken(sessionId: ffi.sessionId);
|
final connToken = bind.sessionGetConnToken(sessionId: ffi.sessionId);
|
||||||
connect(context, id,
|
connect(context, id,
|
||||||
loginMethod: ffi.loginMethod,
|
loginMethod: bind.sessionGetCommonSync(
|
||||||
|
sessionId: ffi.sessionId, key: 'login_method', param: '') ??
|
||||||
|
'',
|
||||||
isFileTransfer: isFileTransfer,
|
isFileTransfer: isFileTransfer,
|
||||||
isViewCamera: isViewCamera,
|
isViewCamera: isViewCamera,
|
||||||
isTerminal: isTerminal,
|
isTerminal: isTerminal,
|
||||||
|
|||||||
@@ -4032,7 +4032,6 @@ class FFI {
|
|||||||
var id = '';
|
var id = '';
|
||||||
var version = '';
|
var version = '';
|
||||||
var connType = ConnType.defaultConn;
|
var connType = ConnType.defaultConn;
|
||||||
var loginMethod = '';
|
|
||||||
var closed = false;
|
var closed = false;
|
||||||
|
|
||||||
/// dialogManager use late to ensure init after main page binding [globalKey]
|
/// dialogManager use late to ensure init after main page binding [globalKey]
|
||||||
@@ -4127,7 +4126,6 @@ class FFI {
|
|||||||
List<int>? displays,
|
List<int>? displays,
|
||||||
String loginMethod = '',
|
String loginMethod = '',
|
||||||
}) {
|
}) {
|
||||||
this.loginMethod = loginMethod;
|
|
||||||
closed = false;
|
closed = false;
|
||||||
if (isMobile) mobileReset();
|
if (isMobile) mobileReset();
|
||||||
assert(
|
assert(
|
||||||
|
|||||||
@@ -1966,6 +1966,9 @@ class RustdeskImpl {
|
|||||||
required String key,
|
required String key,
|
||||||
required String param,
|
required String param,
|
||||||
dynamic hint}) {
|
dynamic hint}) {
|
||||||
|
if (key == 'login_method') {
|
||||||
|
return js.context.callMethod('getByName', ['login_method']);
|
||||||
|
}
|
||||||
throw UnimplementedError("sessionGetCommonSync");
|
throw UnimplementedError("sessionGetCommonSync");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,13 @@ impl LoginConfigHandler {
|
|||||||
pub(crate) fn skips_saved_password(&self) -> bool {
|
pub(crate) fn skips_saved_password(&self) -> bool {
|
||||||
self.login_method != LoginMethod::Automatic
|
self.login_method != LoginMethod::Automatic
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_login_method(&self) -> &'static str {
|
||||||
|
match self.login_method {
|
||||||
|
LoginMethod::Automatic => "",
|
||||||
|
LoginMethod::Consent => "consent",
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(test, feature = "flutter"))]
|
#[cfg(all(test, feature = "flutter"))]
|
||||||
@@ -70,9 +77,27 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
method.to_owned(),
|
method.to_owned(),
|
||||||
);
|
);
|
||||||
|
let monitor_session_id = uuid::Uuid::new_v4();
|
||||||
|
let monitor_result = crate::flutter_ffi::session_add_existed_sync(
|
||||||
|
format!("login-method-init-{}", session_id),
|
||||||
|
monitor_session_id,
|
||||||
|
vec![0],
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
let methods = [session_id, monitor_session_id].map(|id| {
|
||||||
|
crate::flutter_ffi::session_get_common_sync(
|
||||||
|
id,
|
||||||
|
"login_method".to_owned(),
|
||||||
|
String::new(),
|
||||||
|
)
|
||||||
|
.0
|
||||||
|
});
|
||||||
|
crate::flutter::sessions::remove_session_by_session_id(&monitor_session_id);
|
||||||
let session = crate::flutter::sessions::remove_session_by_session_id(&session_id);
|
let session = crate::flutter::sessions::remove_session_by_session_id(&session_id);
|
||||||
hbb_common::config::LocalConfig::set_remote_id(&remote_id);
|
hbb_common::config::LocalConfig::set_remote_id(&remote_id);
|
||||||
assert!(result.0.is_empty(), "{}", result.0);
|
assert!(result.0.is_empty(), "{}", result.0);
|
||||||
|
assert!(monitor_result.0.is_empty(), "{}", monitor_result.0);
|
||||||
|
assert_eq!(methods, [Some(method.to_owned()), Some(method.to_owned())]);
|
||||||
let session = session.unwrap();
|
let session = session.unwrap();
|
||||||
let request = session
|
let request = session
|
||||||
.lc
|
.lc
|
||||||
|
|||||||
@@ -3055,6 +3055,8 @@ pub fn session_get_common(
|
|||||||
if let Some(s) = sessions::get_session_by_session_id(&session_id) {
|
if let Some(s) = sessions::get_session_by_session_id(&session_id) {
|
||||||
let v = if key == "is_screenshot_supported" {
|
let v = if key == "is_screenshot_supported" {
|
||||||
s.is_screenshot_supported().to_string()
|
s.is_screenshot_supported().to_string()
|
||||||
|
} else if key == "login_method" {
|
||||||
|
s.lc.read().unwrap().get_login_method().to_owned()
|
||||||
} else {
|
} else {
|
||||||
"".to_owned()
|
"".to_owned()
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in new issue
Block a user