mirror of
https://codeberg.org/ashley/poke.git
synced 2024-11-14 18:08:49 +01:00
84 lines
2.3 KiB
C#
84 lines
2.3 KiB
C#
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|