mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Fix manual downloads from secure servers
This commit is contained in:
parent
ae7402be58
commit
6399ef07d5
@ -23,7 +23,7 @@ public abstract class BrowserWindowViewModel : ViewModel
|
|||||||
[Reactive] public string HeaderText { get; set; }
|
[Reactive] public string HeaderText { get; set; }
|
||||||
|
|
||||||
[Reactive] public string Instructions { get; set; }
|
[Reactive] public string Instructions { get; set; }
|
||||||
|
|
||||||
[Reactive] public string Address { get; set; }
|
[Reactive] public string Address { get; set; }
|
||||||
|
|
||||||
public BrowserWindow? Browser { get; set; }
|
public BrowserWindow? Browser { get; set; }
|
||||||
@ -83,6 +83,11 @@ public abstract class BrowserWindowViewModel : ViewModel
|
|||||||
|
|
||||||
public async Task<Cookie[]> GetCookies(string domainEnding, CancellationToken token)
|
public async Task<Cookie[]> GetCookies(string domainEnding, CancellationToken token)
|
||||||
{
|
{
|
||||||
|
// Strip www. before searching for cookies on a domain to handle websites saving their cookies like .example.org
|
||||||
|
if (domainEnding.StartsWith("www."))
|
||||||
|
{
|
||||||
|
domainEnding = domainEnding[4..];
|
||||||
|
}
|
||||||
var cookies = (await _browser.CoreWebView2.CookieManager.GetCookiesAsync(""))
|
var cookies = (await _browser.CoreWebView2.CookieManager.GetCookiesAsync(""))
|
||||||
.Where(c => c.Domain.EndsWith(domainEnding));
|
.Where(c => c.Domain.EndsWith(domainEnding));
|
||||||
return cookies.Select(c => new Cookie
|
return cookies.Select(c => new Cookie
|
||||||
@ -125,7 +130,7 @@ public abstract class BrowserWindowViewModel : ViewModel
|
|||||||
{
|
{
|
||||||
source.SetCanceled();
|
source.SetCanceled();
|
||||||
}
|
}
|
||||||
|
|
||||||
args.Cancel = true;
|
args.Cancel = true;
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
};
|
};
|
||||||
@ -146,12 +151,16 @@ public abstract class BrowserWindowViewModel : ViewModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
var cookies = await GetCookies(uri.Host, token);
|
var cookies = await GetCookies(uri.Host, token);
|
||||||
return new ManualDownload.BrowserDownloadState(uri, cookies, new[]
|
return new ManualDownload.BrowserDownloadState(
|
||||||
{
|
uri,
|
||||||
("Referer", referer.ToString())
|
cookies,
|
||||||
});
|
new[]
|
||||||
|
{
|
||||||
|
("Referer", referer?.ToString() ?? uri.ToString())
|
||||||
|
},
|
||||||
|
_browser.CoreWebView2.Settings.UserAgent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Hash> WaitForDownload(AbsolutePath path, CancellationToken token)
|
public async Task<Hash> WaitForDownload(AbsolutePath path, CancellationToken token)
|
||||||
{
|
{
|
||||||
var source = new TaskCompletionSource();
|
var source = new TaskCompletionSource();
|
||||||
|
@ -19,7 +19,7 @@ public static class HttpExtensions
|
|||||||
msg.Headers.Add("Cookie", string.Join(";", cookies.Select(c => $"{c.Name}={c.Value}")));
|
msg.Headers.Add("Cookie", string.Join(";", cookies.Select(c => $"{c.Name}={c.Value}")));
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HttpRequestMessage AddHeaders(this HttpRequestMessage msg, IEnumerable<(string Key, string Value)> headers)
|
public static HttpRequestMessage AddHeaders(this HttpRequestMessage msg, IEnumerable<(string Key, string Value)> headers)
|
||||||
{
|
{
|
||||||
foreach (var header in headers)
|
foreach (var header in headers)
|
||||||
@ -29,17 +29,10 @@ public static class HttpExtensions
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HttpRequestMessage AddChromeAgent(this HttpRequestMessage msg)
|
|
||||||
{
|
|
||||||
msg.Headers.Add("User-Agent",
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36");
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HttpRequestMessage ToHttpRequestMessage(this ManualDownload.BrowserDownloadState browserState)
|
public static HttpRequestMessage ToHttpRequestMessage(this ManualDownload.BrowserDownloadState browserState)
|
||||||
{
|
{
|
||||||
var msg = new HttpRequestMessage(HttpMethod.Get, browserState.Uri);
|
var msg = new HttpRequestMessage(HttpMethod.Get, browserState.Uri);
|
||||||
msg.AddChromeAgent();
|
msg.Headers.Add("User-Agent", browserState.UserAgent);
|
||||||
msg.AddCookies(browserState.Cookies);
|
msg.AddCookies(browserState.Cookies);
|
||||||
msg.AddHeaders(browserState.Headers);
|
msg.AddHeaders(browserState.Headers);
|
||||||
return msg;
|
return msg;
|
||||||
|
@ -10,14 +10,14 @@ namespace Wabbajack.DTOs.Interventions;
|
|||||||
public class ManualDownload : AUserIntervention<ManualDownload.BrowserDownloadState>
|
public class ManualDownload : AUserIntervention<ManualDownload.BrowserDownloadState>
|
||||||
{
|
{
|
||||||
public Archive Archive { get; }
|
public Archive Archive { get; }
|
||||||
|
|
||||||
public ManualDownload(Archive archive)
|
public ManualDownload(Archive archive)
|
||||||
{
|
{
|
||||||
Archive = archive;
|
Archive = archive;
|
||||||
}
|
}
|
||||||
|
|
||||||
public record BrowserDownloadState(Uri Uri, Cookie[] Cookies, (string Key, string Value)[] Headers)
|
public record BrowserDownloadState(Uri Uri, Cookie[] Cookies, (string Key, string Value)[] Headers, string UserAgent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user