Fix: Prevent AuthManager state pollution on connection verification (#348)

* Fix: Prevent AuthManager state pollution on connection verification

Modified `ConnectViewModel.connect()` to construct a temporary OkHttpClient and Retrofit builder, isolated from the global `ApiClient` state. The connection verification is executed using this temporary service. Only upon a successful HTTP response does the system persist the configured `host`, `port`, and `token` to the global `AuthManager` and triggers an `ApiClient.rebuild()`. This resolves the issue where a failed connection attempt would overwrite active and verified profiles. Extracted `createTempService` factory to `ApiClient` for robustness and clean tests.

Fixes #260

* Fix: Prevent AuthManager state pollution on connection verification

Modified `ConnectViewModel.connect()` to construct a temporary OkHttpClient and Retrofit builder, isolated from the global `ApiClient` state. The connection verification is executed using this temporary service. Only upon a successful HTTP response does the system persist the configured `host`, `port`, and `token` to the global `AuthManager` and triggers an `ApiClient.rebuild()`. This resolves the issue where a failed connection attempt would overwrite active and verified profiles. Extracted `createTempService` factory to `ApiClient` for robustness and clean tests.

Fixes #260

---------

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-06-23 20:49:58 +03:00
1 parent c21e3e9ed0
commit 2c6e437a5b
42 files changed
+296 -667

No files matched your search

-1
View File
@@ -178,7 +178,6 @@
<string name="connect_error_refused">Connection refused – is Hermes running?</string>
<string name="connect_error_resolve">Could not resolve host</string>
<string name="connect_error_connection_failed">Connection failed: %1$s</string>
<string name="connect_error_invalid_host">Invalid or forbidden host in pairing string</string>
<string name="connect_error_missing_fields">Malformed pairing string — missing host, port, or token</string>
<string name="connect_error_malformed">Malformed pairing string — expected URL or Base64-encoded JSON</string>
<string name="connect_error_parse_failed">Failed to parse pairing string: %1$s</string>
+4 -2
View File
@@ -6,6 +6,8 @@
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<exclude domain="database" path="hermes_control.db" />
<exclude domain="sharedpref" path="hermes_secure_prefs.xml" />
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>
@@ -5,11 +5,15 @@
-->
<data-extraction-rules>
<cloud-backup>
<exclude domain="database" path="hermes_control.db" />
<exclude domain="sharedpref" path="hermes_secure_prefs.xml" />
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<exclude domain="database" path="hermes_control.db" />
<exclude domain="sharedpref" path="hermes_secure_prefs.xml" />
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>