feat(identity): rename user-visible identity to voculinux with one-time legacy import
The fork takes its own name everywhere a user can see it: binaries (voculinux, voculinux-gui), desktop entry, autostart, tray, D-Bus namespace (com.voculinux.Voculinux, no alias for the old name), config/data/cache dirs, single-instance lock, IBus engine identity, tray icons, resource prefixes, VOCULINUX_* environment names, and the update-checker user agent. The internal Python module stays vocalinux and the distribution metadata keeps the upstream URLs as provenance. On first run a previous Vocalinux install's config.json, custom dictionary, and portal restore token are copied once into the new locations (new config always wins, no merge, no write-back); models re-resolve through the pinned-checksum download path. An offline naming-sweep test proves no old-name strings remain on user-visible surfaces outside the allowlist. Refs #18
This commit is contained in:
@@ -114,7 +114,7 @@ class TestTrustedUrls:
|
||||
def test_rejects_untrusted_urls(self):
|
||||
assert not is_trusted_release_url("https://evil.example/payload")
|
||||
assert not is_trusted_release_url("http://github.com/VocaHQ/vocalinux")
|
||||
assert not is_trusted_release_url("https://github.com/evil/vocalinux")
|
||||
assert not is_trusted_release_url("https://github.com/evil/voculinux")
|
||||
assert not is_trusted_release_url("")
|
||||
|
||||
|
||||
@@ -315,7 +315,7 @@ class TestFetchLatestRelease:
|
||||
def test_evil_update_url_does_not_become_html_url(self, caplog):
|
||||
tag_url = "https://github.com/VocaHQ/vocalinux/releases/tag/v0.17.0"
|
||||
evil_paths = [
|
||||
"/evil/vocalinux/releases/tag/v9",
|
||||
"/evil/voculinux/releases/tag/v9",
|
||||
"https://evil.example/x",
|
||||
"/VocaHQ/vocalinux/releases/../evil",
|
||||
]
|
||||
@@ -343,7 +343,7 @@ class TestFetchLatestRelease:
|
||||
}
|
||||
untrusted_urls = (
|
||||
"https://evil.example/VocaHQ/vocalinux/releases/tag/v0.17.0",
|
||||
"https://github.com/evil/vocalinux/releases/tag/v0.17.0",
|
||||
"https://github.com/evil/voculinux/releases/tag/v0.17.0",
|
||||
"http://github.com/VocaHQ/vocalinux/releases/tag/v0.17.0",
|
||||
)
|
||||
caplog.set_level(logging.WARNING, logger="vocalinux.utils.update_checker")
|
||||
@@ -392,11 +392,11 @@ class TestFetchLatestRelease:
|
||||
first, second = mock_requests.get.call_args_list
|
||||
assert first[0][0] == "https://api.github.com/repos/VocaHQ/vocalinux/releases/latest"
|
||||
assert first.kwargs["headers"]["Accept"] == "application/vnd.github+json"
|
||||
assert first.kwargs["headers"]["User-Agent"] == "Vocalinux-UpdateChecker"
|
||||
assert first.kwargs["headers"]["User-Agent"] == "Voculinux-UpdateChecker"
|
||||
assert "Authorization" not in first.kwargs["headers"]
|
||||
assert second[0][0] == "https://github.com/VocaHQ/vocalinux/releases/latest"
|
||||
assert second.kwargs["headers"]["Accept"] == "application/json"
|
||||
assert second.kwargs["headers"]["User-Agent"] == "Vocalinux-UpdateChecker"
|
||||
assert second.kwargs["headers"]["User-Agent"] == "Voculinux-UpdateChecker"
|
||||
assert "Authorization" not in second.kwargs["headers"]
|
||||
assert fallback.url == tag_url
|
||||
assert _checker_warnings(caplog) == []
|
||||
|
||||
Reference in New Issue
Block a user