CssSolution/CSS_Solution/Request/Login.cs

100 lines
5.1 KiB
C#
Raw Permalink Normal View History

2024-03-12 08:15:15 +00: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
{
{
HttpClient client = Initialize.hc_pool.GetHttpClient(Request_Type.get_code);
2024-03-12 08:15:15 +00: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();
}
{
HttpClient client = Initialize.hc_pool.GetHttpClient(request_type);
2024-03-12 08:15:15 +00: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);
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 08:15:15 +00: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);
});
}
public List<KeyValuePair<string, string>>? Get_cookie() => respond_cookie;
2024-03-12 08:15:15 +00:00
public Task Run()
{
task.Start();
return task;
}
internal int Get_Id() => id;
public string Get_JSESSIONID() => JSESSIONID ?? "";
}
}