Skip to content

Commit

Permalink
Add logic for different user agents for all network accesses.
Browse files Browse the repository at this point in the history
  • Loading branch information
Si13n7 committed Apr 2, 2019
1 parent 0aea5ce commit 0d2fc8a
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 35 deletions.
34 changes: 20 additions & 14 deletions src/AppsDownloader/Libraries/AppTransferor.cs
Expand Up @@ -18,7 +18,7 @@ public AppTransferor(AppData appData)
{
AppData = appData;
DestPath = default(string);
SrcData = new List<Tuple<string, string, bool>>();
SrcData = new List<Tuple<string, string, string, bool>>();
UserData = Tuple.Create(default(string), default(string));

var downloadCollection = AppData.DownloadCollection;
Expand Down Expand Up @@ -53,19 +53,24 @@ public AppTransferor(AppData appData)

var shortHost = NetEx.GetShortHost(tuple.Item1);
var redirect = Settings.ForceTransferRedirection || !NetEx.IPv4IsAvalaible && !string.IsNullOrWhiteSpace(shortHost) && !shortHost.EqualsEx(AppSupplierHosts.Internal);
string userAgent;
List<string> mirrors;
switch (shortHost)
{
case AppSupplierHosts.Internal:
userAgent = UserAgents.Internal;
mirrors = AppSupply.GetMirrors(AppSuppliers.Internal);
break;
case AppSupplierHosts.PortableApps:
userAgent = UserAgents.Empty;
mirrors = AppSupply.GetMirrors(AppSuppliers.PortableApps);
break;
case AppSupplierHosts.SourceForge:
userAgent = UserAgents.Default;
mirrors = AppSupply.GetMirrors(AppSuppliers.SourceForge);
break;
default:
userAgent = UserAgents.Default;
var srcUrl = tuple.Item1;
if (AppData.ServerKey != default(byte[]))
foreach (var srv in Shareware.GetAddresses())
Expand All @@ -77,7 +82,7 @@ public AppTransferor(AppData appData)
UserData = Tuple.Create(Shareware.GetUser(srv), Shareware.GetPassword(srv));
break;
}
SrcData.Add(Tuple.Create(srcUrl, tuple.Item2, false));
SrcData.Add(Tuple.Create(srcUrl, tuple.Item2, userAgent, false));
continue;
}

Expand All @@ -91,8 +96,11 @@ public AppTransferor(AppData appData)
if (SrcData.Any(x => x.Item1.EqualsEx(srcUrl)))
continue;
if (redirect)
{
userAgent = UserAgents.Internal;
srcUrl = CorePaths.RedirectUrl + srcUrl.Encode();
SrcData.Add(Tuple.Create(srcUrl, tuple.Item2, false));
}
SrcData.Add(Tuple.Create(srcUrl, tuple.Item2, userAgent, false));
if (Log.DebugMode > 1)
Log.Write($"Transfer: '{srcUrl}' has been added.");
}
Expand All @@ -106,7 +114,7 @@ public AppTransferor(AppData appData)

public string DestPath { get; }

public List<Tuple<string, string, bool>> SrcData { get; }
public List<Tuple<string, string, string, bool>> SrcData { get; }

public NetEx.AsyncTransfer Transfer { get; }

Expand All @@ -130,27 +138,25 @@ public void StartDownload(bool force = false)
for (var i = 0; i < SrcData.Count; i++)
{
var data = SrcData[i];
if (data.Item3)
if (data.Item4)
continue;

if (!FileEx.Delete(DestPath))
throw new InvalidOperationException();

SrcData[i] = Tuple.Create(data.Item1, data.Item2, true);

var userAgent = default(string);
if (!NetEx.FileIsAvailable(data.Item1, UserData.Item1, UserData.Item2, 60000))
SrcData[i] = Tuple.Create(data.Item1, data.Item2, data.Item3, true);
var userAgent = data.Item3;
if (!NetEx.FileIsAvailable(data.Item1, UserData.Item1, UserData.Item2, 60000, userAgent))
{
userAgent = "Mozilla/5.0";
userAgent = UserAgents.WindowsChrome;
if (!NetEx.FileIsAvailable(data.Item1, UserData.Item1, UserData.Item2, 60000, userAgent))
{
if (Log.DebugMode > 0)
Log.Write($"Transfer: Could not find target '{data.Item1}'.");
continue;
}
}
if (Log.DebugMode > 1)
Log.Write($"Transfer{(userAgent != default(string) ? $" ({userAgent})" : string.Empty)}: '{data.Item1}' has been found.");
if (Log.DebugMode > 0)
Log.Write($"Transfer{(!string.IsNullOrEmpty(userAgent) ? $" [{userAgent}]" : string.Empty)}: '{data.Item1}' has been found.");

Transfer.DownloadFile(data.Item1, DestPath, UserData.Item1, UserData.Item2, true, 60000, userAgent, false);
DownloadStarted = true;
Expand All @@ -167,7 +173,7 @@ public bool StartInstall()
var fileHash = default(string);
foreach (var data in SrcData)
{
if (!data.Item3)
if (!data.Item4)
continue;

if (fileHash == default(string) || fileHash == nonHash)
Expand Down
22 changes: 11 additions & 11 deletions src/AppsDownloader/Libraries/CacheData.cs
Expand Up @@ -142,11 +142,11 @@ private static void UpdateAppImagesFile(bool large)
var link = PathEx.AltCombine(mirror, ".free", fileName);
if (Log.DebugMode > 0)
Log.Write($"Cache: Looking for '{link}'.");
if (!NetEx.FileIsAvailable(link, 30000))
if (!NetEx.FileIsAvailable(link, 30000, UserAgents.Internal))
continue;
if (!((NetEx.GetFileDate(link) - fileDate).TotalSeconds > 0d))
if (!((NetEx.GetFileDate(link, 30000, UserAgents.Internal) - fileDate).TotalSeconds > 0d))
break;
NetEx.Transfer.DownloadFile(link, filePath, 60000, null, false);
NetEx.Transfer.DownloadFile(link, filePath, 60000, UserAgents.Internal, false);
if (!File.Exists(filePath))
continue;
File.SetLastWriteTime(filePath, DateTime.Now);
Expand Down Expand Up @@ -197,8 +197,8 @@ private static void UpdateAppInfoFile()
var link = PathEx.AltCombine(mirror, ".free", "AppInfo.ini");
if (Log.DebugMode > 0)
Log.Write($"Cache: Looking for '{link}'.");
if (NetEx.FileIsAvailable(link, 30000))
NetEx.Transfer.DownloadFile(link, CachePaths.AppInfo, 60000, null, false);
if (NetEx.FileIsAvailable(link, 30000, UserAgents.Internal))
NetEx.Transfer.DownloadFile(link, CachePaths.AppInfo, 60000, UserAgents.Internal, false);
if (!File.Exists(CachePaths.AppInfo))
continue;
break;
Expand All @@ -220,8 +220,8 @@ private static void UpdateAppInfoFile()
var link = PathEx.AltCombine(mirror, ".free", "AppInfo.7z");
if (Log.DebugMode > 0)
Log.Write($"Cache: Looking for '{link}'.");
if (NetEx.FileIsAvailable(link, 30000))
NetEx.Transfer.DownloadFile(link, tmpZip, 60000, null, false);
if (NetEx.FileIsAvailable(link, 30000, UserAgents.Internal))
NetEx.Transfer.DownloadFile(link, tmpZip, 60000, UserAgents.Internal, false);
if (!File.Exists(tmpZip))
continue;
break;
Expand All @@ -231,8 +231,8 @@ private static void UpdateAppInfoFile()
var link = PathEx.AltCombine(AppSupplierHosts.PortableApps, "updater", "update.7z");
if (Log.DebugMode > 0)
Log.Write($"Cache: Looking for '{link}'.");
if (NetEx.FileIsAvailable(link, 60000))
NetEx.Transfer.DownloadFile(link, tmpZip, 60000, null, false);
if (NetEx.FileIsAvailable(link, 60000, UserAgents.Empty))
NetEx.Transfer.DownloadFile(link, tmpZip, 60000, UserAgents.Empty, false);
}
if (File.Exists(tmpZip))
{
Expand Down Expand Up @@ -264,9 +264,9 @@ private static void UpdateAppInfoFile()
var url = PathEx.AltCombine(srv, "AppInfo.ini");
if (Log.DebugMode > 0)
Log.Write($"Shareware: Looking for '{{{key.Encode()}}}/AppInfo.ini'.");
if (!NetEx.FileIsAvailable(url, usr, pwd, 60000))
if (!NetEx.FileIsAvailable(url, usr, pwd, 60000, UserAgents.Default))
continue;
var appInfo = NetEx.Transfer.DownloadString(url, usr, pwd);
var appInfo = NetEx.Transfer.DownloadString(url, usr, pwd, 60000, UserAgents.Default);
if (string.IsNullOrWhiteSpace(appInfo))
continue;
UpdateAppInfoData(appInfo, null, key.Decode(BinaryToTextEncodings.Base85));
Expand Down
16 changes: 16 additions & 0 deletions src/AppsDownloader/Libraries/UserAgents.cs
@@ -0,0 +1,16 @@
namespace AppsDownloader.Libraries
{
using System;
using SilDev;

internal static class UserAgents
{
internal static string Default { get; } = "Wget/1.16 (linux-gnu)";

internal static string Empty { get; } = string.Empty;

internal static string Internal { get; } = $"Wget/{EnvironmentEx.Version} (Windows NT/{Environment.OSVersion.Version.Major}.{Environment.OSVersion.Version.Minor}; {(Environment.Is64BitOperatingSystem ? "Win64; x64" : "Win32; x86")}) {AssemblyInfo.Product}/{AssemblyInfo.Version}";

internal static string WindowsChrome { get; } = $"Mozilla/5.0 (Windows NT 10.0; {(Environment.Is64BitOperatingSystem ? "Win64; x64" : "WOW64")}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3752.0 Safari/537.36";
}
}
12 changes: 12 additions & 0 deletions src/AppsLauncherUpdater/Libraries/UserAgents.cs
@@ -0,0 +1,12 @@
namespace Updater.Libraries
{
using System;
using SilDev;

internal static class UserAgents
{
internal static string Default { get; } = "Wget/1.16 (linux-gnu)";

internal static string Internal { get; } = $"Wget/{EnvironmentEx.Version} (Windows NT/{Environment.OSVersion.Version.Major}.{Environment.OSVersion.Version.Minor}; {(Environment.Is64BitOperatingSystem ? "Win64; x64" : "Win32; x86")}) {AssemblyInfo.Product}/{AssemblyInfo.Version}";
}
}
20 changes: 10 additions & 10 deletions src/AppsLauncherUpdater/Windows/MainForm.cs
Expand Up @@ -58,9 +58,9 @@ private void SetChangeLog(params string[] mirrors)
var path = PathEx.AltCombine(mirror, "ChangeLog.txt");
if (string.IsNullOrWhiteSpace(path))
continue;
if (!NetEx.FileIsAvailable(path, 60000))
if (!NetEx.FileIsAvailable(path, 60000, UserAgents.Internal))
continue;
changes = NetEx.Transfer.DownloadString(path);
changes = NetEx.Transfer.DownloadString(path, 60000, UserAgents.Internal);
if (!string.IsNullOrWhiteSpace(changes))
break;
}
Expand All @@ -70,7 +70,7 @@ private void SetChangeLog(params string[] mirrors)
else
try
{
var atom = NetEx.Transfer.DownloadString(CorePaths.RepoCommitsUrl);
var atom = NetEx.Transfer.DownloadString(CorePaths.RepoCommitsUrl, 60000, UserAgents.Default);
if (string.IsNullOrEmpty(atom))
throw new ArgumentNullException(nameof(atom));
const string nspace = "{http://www.w3.org/2005/Atom}";
Expand Down Expand Up @@ -200,18 +200,18 @@ private void SetUpdateInfo(bool final, params string[] mirrors)
try
{
var path = PathEx.AltCombine(mirror, "Last.ini");
if (!NetEx.FileIsAvailable(path, 60000))
if (!NetEx.FileIsAvailable(path, 60000, UserAgents.Internal))
throw new PathNotFoundException(path);
var data = NetEx.Transfer.DownloadString(path);
var data = NetEx.Transfer.DownloadString(path, 60000, UserAgents.Internal);
if (string.IsNullOrWhiteSpace(data))
throw new ArgumentNullException(nameof(data));
var lastStamp = Ini.ReadOnly("Info", "LastStamp", data);
if (string.IsNullOrWhiteSpace(lastStamp))
throw new ArgumentNullException(nameof(lastStamp));
path = PathEx.AltCombine(mirror, $"{lastStamp}.ini");
if (!NetEx.FileIsAvailable(path, 60000))
if (!NetEx.FileIsAvailable(path, 60000, UserAgents.Internal))
throw new PathNotFoundException(path);
data = NetEx.Transfer.DownloadString(path);
data = NetEx.Transfer.DownloadString(path, 60000, UserAgents.Internal);
if (string.IsNullOrWhiteSpace(data))
throw new ArgumentNullException(nameof(data));
HashInfo = data;
Expand Down Expand Up @@ -389,7 +389,7 @@ private void UpdateBtn_Click(object sender, EventArgs e)
try
{
downloadPath = PathEx.AltCombine(CorePaths.RepoSnapshotsUrl, $"{LastStamp}.7z");
if (!NetEx.FileIsAvailable(downloadPath, 60000))
if (!NetEx.FileIsAvailable(downloadPath, 60000, UserAgents.Default))
throw new PathNotFoundException(downloadPath);
}
catch (Exception ex)
Expand All @@ -405,7 +405,7 @@ private void UpdateBtn_Click(object sender, EventArgs e)
foreach (var mirror in DownloadMirrors)
{
downloadPath = PathEx.AltCombine(mirror, $"{LastFinalStamp}.7z");
exist = NetEx.FileIsAvailable(downloadPath, 60000);
exist = NetEx.FileIsAvailable(downloadPath, 60000, UserAgents.Internal);
if (exist)
break;
}
Expand All @@ -422,7 +422,7 @@ private void UpdateBtn_Click(object sender, EventArgs e)
return;
try
{
Transferor.DownloadFile(downloadPath, CachePaths.UpdatePath);
Transferor.DownloadFile(downloadPath, CachePaths.UpdatePath, 60000, !string.IsNullOrWhiteSpace(LastStamp) ? UserAgents.Default : UserAgents.Internal);
checkDownload.Enabled = true;
}
catch (Exception ex)
Expand Down

0 comments on commit 0d2fc8a

Please sign in to comment.