diff --git a/App/OsuDownloadManager.cs b/App/OsuDownloadManager.cs index 3ce076f..78d27a1 100644 --- a/App/OsuDownloadManager.cs +++ b/App/OsuDownloadManager.cs @@ -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) { diff --git a/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieAwareWebClient.cs b/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieAwareWebClient.cs index 5c166ae..dea7b39 100644 --- a/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieAwareWebClient.cs +++ b/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieAwareWebClient.cs @@ -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 { @@ -10,21 +15,23 @@ 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())) @@ -32,7 +39,6 @@ public string Login(string loginPageAddress, string loginData) ResponseText = sr.ReadToEnd(); } response.Close(); - CookieContainer = container; return ResponseText; } @@ -41,7 +47,6 @@ public CookieAwareWebClient(CookieContainer container) CookieContainer = container; } - public CookieAwareWebClient() : this(new CookieContainer()) { } @@ -60,4 +65,4 @@ protected override WebRequest GetWebRequest(Uri address) return request; } } -} \ No newline at end of file +} diff --git a/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieContainerExtensions.cs b/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieContainerExtensions.cs new file mode 100644 index 0000000..2594971 --- /dev/null +++ b/CollectionManagerExtensionsDll/Modules/DownloadManager/API/CookieContainerExtensions.cs @@ -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 + { + /// + /// Get List of s contained in using reflection + /// + /// + /// + public static List ToList(this CookieContainer container) + { + var cookies = new List(); + + 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; + } + } +} \ No newline at end of file diff --git a/CollectionManagerExtensionsDll/Modules/DownloadManager/OsuDownloader.cs b/CollectionManagerExtensionsDll/Modules/DownloadManager/OsuDownloader.cs index cc3e186..fe56805 100644 --- a/CollectionManagerExtensionsDll/Modules/DownloadManager/OsuDownloader.cs +++ b/CollectionManagerExtensionsDll/Modules/DownloadManager/OsuDownloader.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net; using CollectionManagerExtensionsDll.Modules.DownloadManager.API; @@ -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;