mirror of
https://codeberg.org/ashley/poke
synced 2026-05-01 23:47:57 +00:00
owo
This commit is contained in:
84
core/LightTube/Database/LTLogin.cs
Normal file
84
core/LightTube/Database/LTLogin.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Xml;
|
||||
using Humanizer;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using MyCSharp.HttpUserAgentParser;
|
||||
|
||||
namespace LightTube.Database
|
||||
{
|
||||
[BsonIgnoreExtraElements]
|
||||
public class LTLogin
|
||||
{
|
||||
public string Identifier;
|
||||
public string Email;
|
||||
public string Token;
|
||||
public string UserAgent;
|
||||
public string[] Scopes;
|
||||
public DateTimeOffset Created = DateTimeOffset.MinValue;
|
||||
public DateTimeOffset LastSeen = DateTimeOffset.MinValue;
|
||||
|
||||
public XmlDocument GetXmlElement()
|
||||
{
|
||||
XmlDocument doc = new();
|
||||
XmlElement login = doc.CreateElement("Login");
|
||||
login.SetAttribute("id", Identifier);
|
||||
login.SetAttribute("user", Email);
|
||||
|
||||
XmlElement token = doc.CreateElement("Token");
|
||||
token.InnerText = Token;
|
||||
login.AppendChild(token);
|
||||
|
||||
XmlElement scopes = doc.CreateElement("Scopes");
|
||||
foreach (string scope in Scopes)
|
||||
{
|
||||
XmlElement scopeElement = doc.CreateElement("Scope");
|
||||
scopeElement.InnerText = scope;
|
||||
login.AppendChild(scopeElement);
|
||||
}
|
||||
login.AppendChild(scopes);
|
||||
|
||||
doc.AppendChild(login);
|
||||
return doc;
|
||||
}
|
||||
|
||||
public string GetTitle()
|
||||
{
|
||||
Match match = Regex.Match(UserAgent, DatabaseManager.ApiUaRegex);
|
||||
if (match.Success)
|
||||
return $"API App: {match.Groups[2]} {match.Groups[3]}";
|
||||
|
||||
HttpUserAgentInformation client = HttpUserAgentParser.Parse(UserAgent);
|
||||
StringBuilder sb = new($"{client.Name} {client.Version}");
|
||||
if (client.Platform.HasValue)
|
||||
sb.Append($" on {client.Platform.Value.PlatformType.ToString()}");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public string GetDescription()
|
||||
{
|
||||
StringBuilder sb = new();
|
||||
sb.AppendLine($"Created: {Created.Humanize(DateTimeOffset.Now)}");
|
||||
sb.AppendLine($"Last seen: {LastSeen.Humanize(DateTimeOffset.Now)}");
|
||||
|
||||
Match match = Regex.Match(UserAgent, DatabaseManager.ApiUaRegex);
|
||||
if (match.Success)
|
||||
{
|
||||
sb.AppendLine($"API version: {HttpUtility.HtmlEncode(match.Groups[1])}");
|
||||
sb.AppendLine($"App info: {HttpUtility.HtmlEncode(match.Groups[4])}");
|
||||
sb.AppendLine("Allowed scopes:");
|
||||
foreach (string scope in Scopes) sb.AppendLine($"- {scope}");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public async Task UpdateLastAccess(DateTimeOffset newTime)
|
||||
{
|
||||
await DatabaseManager.Logins.UpdateLastAccess(Identifier, newTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user