Skip to content

Commit

Permalink
Fix: download manager 503 errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotrekol committed Aug 10, 2019
1 parent 27944ec commit 161e02a
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 13 deletions.
2 changes: 1 addition & 1 deletion App/OsuDownloadManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public sealed class OsuDownloadManager
public string DownloadDirectory { get; set; } = "";
public bool DownloadDirectoryIsSet => DownloadDirectory != "";
private long _downloadId = 0;
private const string BaseDownloadUrl = "https://osu.ppy.sh/d/{0}";
private const string BaseDownloadUrl = "https://osu.ppy.sh/beatmapsets/{0}/download";

public bool AskUserForSaveDirectoryAndLogin(IUserDialogs userDIalogs, ILoginFormView loginForm)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using CollectionManagerExtensionsDll.Modules.DownloadManager.API;

namespace System.Net
{
Expand All @@ -10,29 +15,30 @@ public class CookieAwareWebClient : WebClient
public int ClientId = -1;
public string Login(string loginPageAddress, string loginData)
{
CookieContainer container;
var homePageRequest = (HttpWebRequest)WebRequest.Create("https://osu.ppy.sh/home");
homePageRequest.CookieContainer = CookieContainer;
homePageRequest.GetResponse();
var token = CookieContainer.ToList().First(x => x.Name == "XSRF-TOKEN");

var request = (HttpWebRequest)WebRequest.Create(loginPageAddress);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
var data = loginData.ToString();
var buffer = Encoding.ASCII.GetBytes(loginData.ToString());
var buffer = Encoding.ASCII.GetBytes("_token=" + token + "&" + loginData.ToString());
request.ContentLength = buffer.Length;
request.CookieContainer = CookieContainer;
var requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Close();

container = request.CookieContainer = new CookieContainer();


var response = request.GetResponse();
string ResponseText = "";
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
ResponseText = sr.ReadToEnd();
}
response.Close();
CookieContainer = container;
return ResponseText;
}

Expand All @@ -41,7 +47,6 @@ public CookieAwareWebClient(CookieContainer container)
CookieContainer = container;
}


public CookieAwareWebClient()
: this(new CookieContainer())
{ }
Expand All @@ -60,4 +65,4 @@ protected override WebRequest GetWebRequest(Uri address)
return request;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Reflection;

namespace CollectionManagerExtensionsDll.Modules.DownloadManager.API
{
public static class CookieContainerExtensions
{
/// <summary>
/// Get List of <see cref="Cookie"/>s contained in <see cref="CookieContainer"/> using reflection
/// </summary>
/// <param name="container"></param>
/// <returns></returns>
public static List<Cookie> ToList(this CookieContainer container)
{
var cookies = new List<Cookie>();

var table = (Hashtable)container.GetType().InvokeMember("m_domainTable",
BindingFlags.NonPublic |
BindingFlags.GetField |
BindingFlags.Instance,
null,
container,
new object[] { });

foreach (var key in table.Keys)
{

Uri uri = null;

var domain = key as string;

if (domain == null)
continue;

if (domain.StartsWith("."))
domain = domain.Substring(1);

var address = string.Format("http://{0}/", domain);

if (Uri.TryCreate(address, UriKind.RelativeOrAbsolute, out uri) == false)
continue;

foreach (Cookie cookie in container.GetCookies(uri))
{
cookies.Add(cookie);
}
}

return cookies;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Net;
using CollectionManagerExtensionsDll.Modules.DownloadManager.API;
Expand All @@ -13,8 +13,8 @@ public OsuDownloader(string saveLocation, int downloadThreads) : base(saveLocati

public bool Login(LoginData loginData)
{
var loginAddress = @"https://osu.ppy.sh/forum/ucp.php?mode=login";
string loginDataStr = string.Format("username={0}&password={1}&login=login&sid=", Uri.EscapeDataString(loginData.Username), Uri.EscapeDataString(loginData.Password));
var loginAddress = @"https://osu.ppy.sh/session";
string loginDataStr = string.Format("username={0}&password={1}", Uri.EscapeDataString(loginData.Username), Uri.EscapeDataString(loginData.Password));


CookieContainer cookies = null;
Expand Down

0 comments on commit 161e02a

Please sign in to comment.