Browse Source

🧂 Add option for custom sha256sum URL of custom geosite source

tags/4.3.3.0
database64128 4 years ago
parent
commit
f029738f2b
No known key found for this signature in database GPG Key ID: 1CA27546BEDB8B01
2 changed files with 43 additions and 26 deletions
  1. +41
    -26
      shadowsocks-csharp/Controller/Service/GeositeUpdater.cs
  2. +2
    -0
      shadowsocks-csharp/Model/Configuration.cs

+ 41
- 26
shadowsocks-csharp/Controller/Service/GeositeUpdater.cs View File

@@ -75,52 +75,67 @@ namespace Shadowsocks.Controller

public static async Task UpdatePACFromGeosite()
{
string geositeUrl = GEOSITE_URL;
string geositeSha256sumUrl = GEOSITE_SHA256SUM_URL;
SHA256 mySHA256 = SHA256.Create();
var geositeUrl = GEOSITE_URL;
var geositeSha256sumUrl = GEOSITE_SHA256SUM_URL;
var geositeVerifySha256 = true;
var geositeSha256sum = "";
var mySHA256 = SHA256.Create();
var config = Program.MainController.GetCurrentConfiguration();
bool blacklist = config.geositePreferDirect;
var blacklist = config.geositePreferDirect;
var httpClient = Program.MainController.GetHttpClient();

if (!string.IsNullOrWhiteSpace(config.geositeUrl))
{
logger.Info("Found custom Geosite URL in config file");
geositeUrl = config.geositeUrl;
geositeSha256sumUrl = config.geositeSha256sumUrl;
if (string.IsNullOrWhiteSpace(geositeSha256sumUrl))
{
geositeVerifySha256 = false;
logger.Info("Geosite SHA256 verification is disabled.");
}
}
logger.Info($"Checking Geosite from {geositeUrl}");

try
{
// download checksum first
var geositeSha256sum = await httpClient.GetStringAsync(geositeSha256sumUrl);
geositeSha256sum = geositeSha256sum.Substring(0, 64).ToUpper();
logger.Info($"Got Sha256sum: {geositeSha256sum}");
// compare downloaded checksum with local geositeDB
byte[] localDBHashBytes = mySHA256.ComputeHash(geositeDB);
string localDBHash = BitConverter.ToString(localDBHashBytes).Replace("-", String.Empty);
logger.Info($"Local Sha256sum: {localDBHash}");
// if already latest
if (geositeSha256sum == localDBHash)
// Use sha256sum to check if local database is already latest.
if (geositeVerifySha256)
{
logger.Info("Local GeoSite DB is up to date.");
return;
// download checksum first
geositeSha256sum = await httpClient.GetStringAsync(geositeSha256sumUrl);
geositeSha256sum = geositeSha256sum.Substring(0, 64).ToUpper();
logger.Info($"Got Sha256sum: {geositeSha256sum}");
// compare downloaded checksum with local geositeDB
byte[] localDBHashBytes = mySHA256.ComputeHash(geositeDB);
string localDBHash = BitConverter.ToString(localDBHashBytes).Replace("-", String.Empty);
logger.Info($"Local Sha256sum: {localDBHash}");
// if already latest
if (geositeSha256sum == localDBHash)
{
logger.Info("Local GeoSite DB is up to date.");
return;
}
}

// not latest. download new DB
var downloadedBytes = await httpClient.GetByteArrayAsync(geositeUrl);

// verify sha256sum
byte[] downloadedDBHashBytes = mySHA256.ComputeHash(downloadedBytes);
string downloadedDBHash = BitConverter.ToString(downloadedDBHashBytes).Replace("-", String.Empty);
logger.Info($"Actual Sha256sum: {downloadedDBHash}");
if (geositeSha256sum != downloadedDBHash)
{
logger.Info("Sha256sum Verification: FAILED. Downloaded GeoSite DB is corrupted. Aborting the update.");
throw new Exception("Sha256sum mismatch");
}
else
if (geositeVerifySha256)
{
logger.Info("Sha256sum Verification: PASSED. Applying to local GeoSite DB.");
byte[] downloadedDBHashBytes = mySHA256.ComputeHash(downloadedBytes);
string downloadedDBHash = BitConverter.ToString(downloadedDBHashBytes).Replace("-", String.Empty);
logger.Info($"Actual Sha256sum: {downloadedDBHash}");
if (geositeSha256sum != downloadedDBHash)
{
logger.Info("Sha256sum Verification: FAILED. Downloaded GeoSite DB is corrupted. Aborting the update.");
throw new Exception("Sha256sum mismatch");
}
else
{
logger.Info("Sha256sum Verification: PASSED. Applying to local GeoSite DB.");
}
}

// write to geosite file


+ 2
- 0
shadowsocks-csharp/Model/Configuration.cs View File

@@ -46,6 +46,7 @@ namespace Shadowsocks.Model
public bool isIPv6Enabled; // for experimental ipv6 support
public bool generateLegacyUrl; // for pre-sip002 url compatibility
public string geositeUrl; // for custom geosite source (and rule group)
public string geositeSha256sumUrl; // optional custom sha256sum url, leave empty to disable checksum verification for your custom geosite source
public List<string> geositeDirectGroups; // groups of domains that we connect without the proxy
public List<string> geositeProxiedGroups; // groups of domains that we connect via the proxy
public bool geositePreferDirect; // a.k.a blacklist mode
@@ -84,6 +85,7 @@ namespace Shadowsocks.Model
isIPv6Enabled = false;
generateLegacyUrl = false;
geositeUrl = "";
geositeSha256sumUrl = "";
geositeDirectGroups = new List<string>()
{
"private",


Loading…
Cancel
Save