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;