2024-03-12 16:15:15 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Configuration;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Security.Policy;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Net.Http.Headers;
|
|
|
|
|
|
|
|
|
|
namespace CSS_Solution.Request
|
|
|
|
|
{
|
|
|
|
|
internal class Login : IRequest
|
|
|
|
|
{
|
|
|
|
|
Action<int> success;
|
|
|
|
|
Action<int, Exception, Login_Result?> failed;
|
|
|
|
|
string? getCode_url;
|
|
|
|
|
string? login_url;
|
|
|
|
|
string? code;
|
|
|
|
|
string? JSESSIONID;
|
|
|
|
|
Task task;
|
|
|
|
|
List<KeyValuePair<string, string>> respond_cookie = new List<KeyValuePair<string, string>>();
|
|
|
|
|
readonly int id;
|
|
|
|
|
public Request_Type request_type => Request_Type.login;
|
|
|
|
|
public Login(int _id, Get_Index_Result last_result, Action<int> _success, Action<int, Exception, Login_Result?> _failed)
|
|
|
|
|
{
|
|
|
|
|
id = _id;
|
|
|
|
|
success = _success;
|
|
|
|
|
failed = _failed;
|
|
|
|
|
getCode_url = Initialize.configuration?.GetSection("getcode").Value;
|
|
|
|
|
if (getCode_url == null || getCode_url.Length == 0)
|
|
|
|
|
throw new ConfigurationErrorsException("Can't get getcode url from AppSettings.json");
|
|
|
|
|
login_url = Initialize.configuration?.GetSection("login_index").Value;
|
|
|
|
|
if (login_url == null || login_url.Length == 0)
|
|
|
|
|
throw new ConfigurationErrorsException("Can't get login_index url from AppSettings.json");
|
|
|
|
|
if (last_result.RND == null || last_result.JSESSIONID == null)
|
|
|
|
|
throw new InvalidOperationException("Something wrong with Get_Index result");
|
|
|
|
|
JSESSIONID = last_result.JSESSIONID;
|
|
|
|
|
task = new Task(async () =>
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
{
|
2024-03-14 00:02:17 +08:00
|
|
|
|
HttpClient client = Initialize.hc_pool.GetHttpClient(Request_Type.get_code);
|
2024-03-12 16:15:15 +08:00
|
|
|
|
HttpRequestMessage code_request_Message = new HttpRequestMessage(HttpMethod.Post, getCode_url);
|
|
|
|
|
code_request_Message.Headers.Add("Cookie", JSESSIONID);
|
|
|
|
|
foreach (var (key, value) in Settings.getCode_Header.Get_Request_header())
|
|
|
|
|
code_request_Message.Headers.Add(key, value);
|
|
|
|
|
code_request_Message.Content = new FormUrlEncodedContent([new KeyValuePair<string, string>("webfinger", Settings.webfinger.Get_webfinger().Item2)]);
|
|
|
|
|
code_request_Message.Content.Headers.ContentType = new MediaTypeHeaderValue(Settings.getCode_Header.Content_Type);
|
|
|
|
|
code_request_Message.Content.Headers.ContentLength = int.Parse(Settings.getCode_Header.Content_Length);
|
|
|
|
|
HttpResponseMessage code_message = await client.SendAsync(code_request_Message);
|
|
|
|
|
code_message.EnsureSuccessStatusCode();
|
|
|
|
|
code = await code_message.Content.ReadAsStringAsync();
|
|
|
|
|
}
|
|
|
|
|
{
|
2024-03-14 00:02:17 +08:00
|
|
|
|
HttpClient client = Initialize.hc_pool.GetHttpClient(request_type);
|
2024-03-12 16:15:15 +08:00
|
|
|
|
HttpRequestMessage login_request_Message = new HttpRequestMessage(HttpMethod.Post, login_url);
|
|
|
|
|
login_request_Message.Headers.Add("Cookie", JSESSIONID);
|
|
|
|
|
foreach (var (key, value) in Settings.login_Header.Get_Request_header())
|
|
|
|
|
login_request_Message.Headers.Add(key, value);
|
2024-03-14 00:02:17 +08:00
|
|
|
|
List<KeyValuePair<string, string>> request_body = Settings.login_Body.Get_Request_body(last_result.RND, code);
|
|
|
|
|
login_request_Message.Content = new FormUrlEncodedContent(request_body);
|
2024-03-12 16:15:15 +08:00
|
|
|
|
login_request_Message.Content.Headers.ContentType = new MediaTypeHeaderValue(Settings.login_Header.Content_Type);
|
|
|
|
|
HttpResponseMessage message = await client.SendAsync(login_request_Message);
|
|
|
|
|
message.EnsureSuccessStatusCode();
|
|
|
|
|
string ans = await message.Content.ReadAsStringAsync();
|
|
|
|
|
foreach (var header in message.Headers)
|
|
|
|
|
{
|
|
|
|
|
if (header.Key != "Set-Cookie")
|
|
|
|
|
continue;
|
|
|
|
|
foreach (var item in header.Value)
|
|
|
|
|
foreach (var item1 in item.Split("; "))
|
|
|
|
|
{
|
|
|
|
|
string[] Key_ValuePair = item1.Split('=');
|
|
|
|
|
if (Key_ValuePair.Length != 2)
|
|
|
|
|
continue;
|
|
|
|
|
respond_cookie.Add(new KeyValuePair<string, string>(Key_ValuePair[0], Key_ValuePair[1]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
failed(id, ex, null);
|
|
|
|
|
}
|
|
|
|
|
success(id);
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-03-14 00:02:17 +08:00
|
|
|
|
public List<KeyValuePair<string, string>>? Get_cookie() => respond_cookie;
|
2024-03-12 16:15:15 +08:00
|
|
|
|
public Task Run()
|
|
|
|
|
{
|
|
|
|
|
task.Start();
|
|
|
|
|
return task;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal int Get_Id() => id;
|
|
|
|
|
public string Get_JSESSIONID() => JSESSIONID ?? "";
|
|
|
|
|
}
|
|
|
|
|
}
|