Files
Vanadium-2023-2025-Leak-Server/Classes/DBs/DBClasses/HwidDBClasses.cs
T
skidfire fe3468c65d yikes,
2026-09-06 19:59:27 -04:00

51 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using LiteDB;
namespace Vanadium.Classes.DBs.DBClasses
{
public static class HwidDBClasses
{
/// <summary>
/// One machine, and every account that has ever reported from it.
/// <para>
/// The ban fields live on the record rather than in a second collection so that a
/// lookup by hwid answers both questions - who is this machine, and is it banned -
/// in a single read, on the path that runs for every client that checks in.
/// </para>
/// </summary>
public class HwidRecord
{
[BsonId]
public string Hwid { get; set; }
public List<long> PlayerIds { get; set; } = new();
public DateTime FirstSeen { get; set; }
public DateTime LastSeen { get; set; }
/// <summary>True while the machine itself is banned, separately from any account.</summary>
public bool IsBanned { get; set; }
/// <summary>Why. Required when banning; a blank reason makes a ban unreviewable.</summary>
public string BanReason { get; set; }
/// <summary>Player id of the moderator who issued it, or a system name.</summary>
public string BannedBy { get; set; }
public DateTime? BannedAt { get; set; }
/// <summary>Null bans permanently.</summary>
public DateTime? BanExpiresAt { get; set; }
/// <summary>
/// Accounts linked to the machine at the moment of the ban. A snapshot: it shows
/// what the moderator was looking at, which is not always what the link table
/// says later.
/// </summary>
public List<long> LinkedAtBan { get; set; } = new();
public bool BanIsActive(DateTime utcNow) =>
IsBanned && (BanExpiresAt == null || BanExpiresAt > utcNow);
}
}
}