Release 4.2.3+1: на вкладке «Защита» только карточка EvilFox — убраны NordVPN/ExpressVPN/Surfshark и их openURL-хосты. Windows 4.2.3.1.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Navis
2026-08-02 09:15:48 +03:00
co-authored by Cursor
parent 19711c3a33
commit 0ba662c650
15 changed files with 82 additions and 164 deletions
+2 -2
View File
@@ -13,8 +13,8 @@ android {
minSdk = 26
targetSdk = 35
// versionCode = major*1_000_000 + minor*10_000 + patch*100 + build
versionCode = 4_022_001
versionName = "4.2.2+1"
versionCode = 4_023_001
versionName = "4.2.3+1"
vectorDrawables.useSupportLibrary = true
ndk {
abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86_64")
+1 -1
View File
@@ -569,7 +569,7 @@ func (a *app) autoCheckUpdate() {
}
func openURL(raw string) error {
// Shared allowlist: shop + «Рекомендуемые сервисы» hosts only.
// Shared allowlist: shop + «Полезные ссылки» hosts only.
normalized, err := apphost.LinkAllowed(raw)
if err != nil {
return err
+21 -21
View File
@@ -1,26 +1,18 @@
{
"version": "4.2.2",
"notes": "4.2.2: светлая тема по умолчанию, ссылка поддержки Telegram → @evilfox100Bot",
"version": "4.2.3",
"notes": "4.2.3: на вкладке «Защита» только карточка EvilFox — убраны NordVPN/ExpressVPN/Surfshark и их ссылки",
"platform": "windows-amd64",
"os": "windows",
"arch": "amd64",
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"mandatory": false,
"platforms": {
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"os": "windows",
"arch": "amd64"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
},
"darwin-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis",
@@ -30,6 +22,14 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.app.zip"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
},
"darwin-universal": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis",
"sha256": "d53dba8256fd6f7b62d1ce9bbad741af087ae44fec942bf2782b9c8f4e36cef2",
@@ -38,11 +38,11 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.app.zip"
},
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"os": "windows",
"arch": "amd64"
}
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+21 -21
View File
@@ -1,26 +1,18 @@
{
"version": "4.2.2",
"notes": "4.2.2: светлая тема по умолчанию, ссылка поддержки Telegram → @evilfox100Bot",
"version": "4.2.3",
"notes": "4.2.3: на вкладке «Защита» только карточка EvilFox — убраны NordVPN/ExpressVPN/Surfshark и их ссылки",
"platform": "windows-amd64",
"os": "windows",
"arch": "amd64",
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"mandatory": false,
"platforms": {
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"os": "windows",
"arch": "amd64"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
},
"darwin-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis",
@@ -30,6 +22,14 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.app.zip"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
},
"darwin-universal": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis",
"sha256": "d53dba8256fd6f7b62d1ce9bbad741af087ae44fec942bf2782b9c8f4e36cef2",
@@ -38,11 +38,11 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.app.zip"
},
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"os": "windows",
"arch": "amd64"
}
}
}
+1 -5
View File
@@ -470,14 +470,10 @@ func (a *App) AutoCheckUpdate() {
}
// allowedLinkHosts are the only hosts the UI may open in the default browser
// (shop / «Полезные ссылки» / provider cards in index.html).
// Competitor links are plain URLs without referral codes (Store policy).
// (shop / «Полезные ссылки» in index.html).
var allowedLinkHosts = map[string]bool{
"evilfox.win": true,
"t.me": true,
"nordvpn.com": true,
"expressvpn.com": true,
"surfshark.com": true,
}
// LinkAllowed validates that raw is an http(s) URL pointing at one of the
+5 -83
View File
@@ -1159,13 +1159,8 @@
.traffic-fill.warn { background: linear-gradient(90deg, #d97706, #f59e0b); }
.traffic-sub { font-size: .74rem; color: var(--muted); }
/* ==== Провайдеры (вкладка «Защита») ==== */
.prov-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 12px;
}
/* ==== EvilFox (вкладка «Защита») ==== */
.prov-featured { margin-bottom: 12px; }
.prov-card {
position: relative;
border: 1px solid var(--line);
@@ -1191,7 +1186,7 @@
html[data-theme="dark"] .prov-card.ours {
background: linear-gradient(150deg, rgba(34,211,238,.16), var(--surface-2) 70%);
}
/* Бейдж «Рекомендуемый сервис» — первая строка карточки EvilFox. */
/* Бейдж «Рекомендуемый» — первая строка карточки EvilFox. */
.prov-badge {
align-self: flex-start;
font-size: .64rem;
@@ -1204,50 +1199,9 @@
padding: 3px 9px;
box-shadow: 0 4px 10px rgba(251, 191, 36, .35);
}
/* Приглушённая подпись «Сторонний сервис» на карточках конкурентов */
.prov-tag {
font-size: .62rem;
font-weight: 700;
letter-spacing: .05em;
text-transform: uppercase;
color: var(--muted);
opacity: .8;
}
.prov-gift { font-size: .72rem; font-weight: 700; color: var(--accent-deep); }
html[data-theme="dark"] .prov-gift { color: var(--accent); }
.prov-card .action { padding: 10px 12px; font-size: .84rem; }
.prov-go {
appearance: none;
border: 1px solid var(--line);
background: transparent;
color: var(--muted);
font: inherit;
font-size: .8rem;
font-weight: 700;
border-radius: 12px;
padding: 9px 12px;
cursor: pointer;
transition: color .15s, border-color .15s;
}
.prov-go:hover { color: var(--ink); border-color: var(--muted); }
.prov-ping {
appearance: none;
border: 0;
background: transparent;
color: var(--muted);
font: inherit;
font-size: .74rem;
font-weight: 700;
padding: 2px 0;
cursor: pointer;
text-align: center;
}
.prov-ping:hover { color: var(--accent-deep); }
.prov-ping:disabled { cursor: default; color: var(--muted); }
.prov-ping .val { font-variant-numeric: tabular-nums; }
.prov-ping.good .val { color: var(--ms-good); }
.prov-ping.mid .val { color: var(--ms-mid); }
@media (max-width: 560px) { .prov-grid { grid-template-columns: 1fr; } }
/* ==== Добавление конфигурации ==== */
.key-box {
@@ -1438,8 +1392,7 @@
</section>
<div class="section" id="provSection">
<div class="section-title"><span>Провайдеры</span></div>
<div class="prov-grid" id="provGrid">
<div class="prov-featured" id="provGrid">
<div class="prov-card ours">
<span class="prov-badge">⭐ Рекомендуемый</span>
<div class="prov-name">🦊 EvilFox VPN</div>
@@ -1447,24 +1400,6 @@
<span class="prov-gift" id="provGift">🎁 3 дня бесплатного доступа</span>
<button class="action primary" id="provConnectBtn" type="button">🔥 Подключиться</button>
</div>
<div class="prov-card">
<span class="prov-tag">Сторонний</span>
<div class="prov-name">NordVPN</div>
<div class="prov-sub">Оплата и настройка на сайте провайдера</div>
<button class="prov-go" type="button" data-url="https://nordvpn.com/" data-name="NordVPN">Перейти на сайт</button>
</div>
<div class="prov-card">
<span class="prov-tag">Сторонний</span>
<div class="prov-name">ExpressVPN</div>
<div class="prov-sub">Оплата и настройка на сайте провайдера</div>
<button class="prov-go" type="button" data-url="https://expressvpn.com/" data-name="ExpressVPN">Перейти на сайт</button>
</div>
<div class="prov-card">
<span class="prov-tag">Сторонний</span>
<div class="prov-name">Surfshark</div>
<div class="prov-sub">Оплата и настройка на сайте провайдера</div>
<button class="prov-go" type="button" data-url="https://surfshark.com/" data-name="Surfshark">Перейти на сайт</button>
</div>
</div>
</div>
</section>
@@ -3116,20 +3051,7 @@
const buyKeyLink = $("buyKeyLink");
if (buyKeyLink) buyKeyLink.addEventListener("click", openShop);
// ==== Вкладка «Защита»: карточки провайдеров ====
// Ссылки конкурентов — чистые, без реферальных кодов (правила Store).
document.querySelectorAll(".prov-go").forEach((b) => {
b.addEventListener("click", async () => {
try {
setMeta("Открываю сайт " + (b.dataset.name || "провайдера") + "…");
await openURL(b.dataset.url);
setMeta("Открыто в браузере", "ok");
} catch (err) {
setMeta("Не удалось открыть ссылку: " + String(err), "err");
}
});
});
// ==== Вкладка «Защита»: карточка EvilFox ====
const provConnectBtn = $("provConnectBtn");
if (provConnectBtn) provConnectBtn.addEventListener("click", () => {
if (!connected && !busy) btn.click();
+1 -1
View File
@@ -18,7 +18,7 @@ import (
// CurrentVersion is the product/semver used for update eligibility (feed "version").
// Keep major.minor.patch only — no build suffix here.
const CurrentVersion = "4.2.2"
const CurrentVersion = "4.2.3"
// BuildNumber is the monotonic build within CurrentVersion (Windows FileVersion 4th part,
// macOS CFBundleVersion suffix, Android versionCode low digits). Bump on every release build.
+1 -1
View File
@@ -33,7 +33,7 @@
<Identity
Name="EvilFox.EvilFox"
Publisher="CN=EvilFox"
Version="4.2.2.1"
Version="4.2.3.1"
ProcessorArchitecture="x64" />
<Properties>
+2 -2
View File
@@ -15,7 +15,7 @@
param(
[string]$ExePath = "",
[string]$OutDir = "",
[string]$Version = "4.2.2.1",
[string]$Version = "4.2.3.1",
[string]$Name = "EvilFox.EvilFox",
[string]$Publisher = "CN=EvilFox",
[string]$DisplayName = "EvilFox",
@@ -82,7 +82,7 @@ $manifestText = Get-Content -LiteralPath $ManifestSrc -Raw -Encoding UTF8
# Prefer exact placeholder swaps so we never touch <?xml version=...?>.
$manifestText = $manifestText.Replace('Name="EvilFox.EvilFox"', "Name=`"$Name`"")
$manifestText = $manifestText.Replace('Publisher="CN=EvilFox"', "Publisher=`"$Publisher`"")
$manifestText = $manifestText.Replace('Version="4.2.2.1"', "Version=`"$Version`"")
$manifestText = $manifestText.Replace('Version="4.2.3.1"', "Version=`"$Version`"")
$manifestText = $manifestText.Replace('<DisplayName>EvilFox</DisplayName>', "<DisplayName>$DisplayName</DisplayName>")
$manifestText = $manifestText.Replace('<PublisherDisplayName>EvilFox</PublisherDisplayName>', "<PublisherDisplayName>$PublisherDisplayName</PublisherDisplayName>")
$manifestText = $manifestText.Replace('DisplayName="EvilFox"', "DisplayName=`"$DisplayName`"")
+21 -21
View File
@@ -1,26 +1,18 @@
{
"version": "4.2.2",
"notes": "4.2.2: светлая тема по умолчанию, ссылка поддержки Telegram → @evilfox100Bot",
"version": "4.2.3",
"notes": "4.2.3: на вкладке «Защита» только карточка EvilFox — убраны NordVPN/ExpressVPN/Surfshark и их ссылки",
"platform": "windows-amd64",
"os": "windows",
"arch": "amd64",
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"mandatory": false,
"platforms": {
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "1cf00e87907714c299838ab1422ec593275e4dacfccca8e9914d21b2f4c51c87",
"os": "windows",
"arch": "amd64"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
},
"darwin-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis",
@@ -30,6 +22,14 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/amd64/Navis.app.zip"
},
"darwin-arm64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis",
"sha256": "01a40b1cce4e2fb3a38eb80f0815c295a00af11e4288f3b9e5c0b58ae336f28d",
"os": "darwin",
"arch": "arm64",
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/arm64/Navis.app.zip"
},
"darwin-universal": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis",
"sha256": "d53dba8256fd6f7b62d1ce9bbad741af087ae44fec942bf2782b9c8f4e36cef2",
@@ -38,11 +38,11 @@
"dmg_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.dmg",
"zip_url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/macos/universal/Navis.app.zip"
},
"android": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/android/Navis.apk",
"sha256": "4416770bebe576eba42811990c4e4424f6722dea3a8513e6164dd34fc975b3cf",
"os": "android",
"arch": "universal"
"windows-amd64": {
"url": "https://git.de4ima.uk/Evilfox/navi/raw/branch/Windows/dist/navis-release/windows/EvilFox.exe",
"sha256": "a39c2b3f26d4342409e28d9106d4ced2e63eec9e4a5968de7c61d16b5f72b639",
"os": "windows",
"arch": "amd64"
}
}
}
+4 -4
View File
@@ -1,7 +1,7 @@
{
"FixedFileInfo": {
"FileVersion": { "Major": 4, "Minor": 2, "Patch": 2, "Build": 1 },
"ProductVersion": { "Major": 4, "Minor": 2, "Patch": 2, "Build": 1 },
"FileVersion": { "Major": 4, "Minor": 2, "Patch": 3, "Build": 1 },
"ProductVersion": { "Major": 4, "Minor": 2, "Patch": 3, "Build": 1 },
"FileFlagsMask": "3f",
"FileFlags": "00",
"FileOS": "40004",
@@ -11,12 +11,12 @@
"StringFileInfo": {
"CompanyName": "EvilFox",
"FileDescription": "EvilFox — VPN client (Naive / Hy2 / AWG / VLESS / VMess / Trojan)",
"FileVersion": "4.2.2.1",
"FileVersion": "4.2.3.1",
"InternalName": "EvilFox",
"LegalCopyright": "Copyright (c) EvilFox",
"OriginalFilename": "EvilFox.exe",
"ProductName": "EvilFox",
"ProductVersion": "4.2.2.1",
"ProductVersion": "4.2.3.1",
"Comments": "Open-source VPN/proxy client. https://evilfox.win/"
},
"VarFileInfo": {