104 lines
5.2 KiB
C#
104 lines
5.2 KiB
C#
|
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);
|
|||
|
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);
|
|||
|
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>> response_body = Settings.login_Body.Get_Request_body(last_result.RND, code);
|
|||
|
login_request_Message.Content = new FormUrlEncodedContent(response_body);
|
|||
|
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()
|
|||
|
{
|
|||
|
return respond_cookie;
|
|||
|
}
|
|||
|
public Task Run()
|
|||
|
{
|
|||
|
task.Start();
|
|||
|
return task;
|
|||
|
}
|
|||
|
|
|||
|
internal int Get_Id() => id;
|
|||
|
public string Get_JSESSIONID() => JSESSIONID ?? "";
|
|||
|
}
|
|||
|
}
|