fix: authentication username not being saved (#622)

This commit is contained in:
hstyi
2025-06-09 09:47:00 +08:00
committed by GitHub
parent 1ae64fe0db
commit fa59869f2c

View File

@@ -265,9 +265,14 @@ object SshClients {
} catch (e: Exception) { } catch (e: Exception) {
if (e !is SshException || e.disconnectCode != SshConstants.SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE) throw e if (e !is SshException || e.disconnectCode != SshConstants.SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE) throw e
val owner = client.properties["owner"] as Window? ?: throw e val owner = client.properties["owner"] as Window? ?: throw e
val authentication = ask(host, entry, owner) ?: throw e val askUserInfo = ask(host, entry, owner) ?: throw e
if (authentication.type == AuthenticationType.No) throw e if (askUserInfo.authentication.type == AuthenticationType.No) throw e
return doOpenSession(host.copy(authentication = authentication), client) return doOpenSession(
host.copy(
authentication = askUserInfo.authentication,
username = askUserInfo.username
), client
)
} }
session.setAttribute(HOST_KEY, host) session.setAttribute(HOST_KEY, host)
@@ -414,12 +419,18 @@ object SshClients {
return sshClient return sshClient
} }
private fun ask(host: Host, entry: HostConfigEntry, owner: Window): Authentication? {
val ref = AtomicReference<Authentication>(null) private data class AskUserInfo(val username: String, val authentication: Authentication)
private fun ask(host: Host, entry: HostConfigEntry, owner: Window): AskUserInfo? {
val ref = AtomicReference<AskUserInfo>(null)
SwingUtilities.invokeAndWait { SwingUtilities.invokeAndWait {
val dialog = RequestAuthenticationDialog(owner, host) val dialog = RequestAuthenticationDialog(owner, host)
dialog.setLocationRelativeTo(owner) dialog.setLocationRelativeTo(owner)
val authentication = dialog.getAuthentication().apply { ref.set(this) } val authentication = dialog.getAuthentication()
ref.set(AskUserInfo(dialog.getUsername(), authentication))
// save // save
if (dialog.isRemembered()) { if (dialog.isRemembered()) {
// fix https://github.com/TermoraDev/termora/issues/609 // fix https://github.com/TermoraDev/termora/issues/609