This should be the primary changes for the future-proof "Modern HWID" system implemented into Robust and the auth server. HWIDs in the database have been given an additional column representing their version, legacy or modern. This is implemented via an EF Core owned entity. By manually setting the column name of the main value column, we can keep DB compatibility and the migration is just adding some type columns. This new HWID type has to be plumbed through everywhere, resulting in some breaking changes for the DB layer and such. New bans and player records are placed with the new modern HWID. Old bans are still checked against legacy HWIDs. Modern HWIDs are presented with a "V2-" prefix to admins, to allow distinguishing them. This is also integrated into the parsing logic for placing new bans. There's also some code cleanup to reduce copy pasting around the place from my changes. Requires latest engine to support ImmutableArray<byte> in NetSerializer.
56 lines
2.8 KiB
C#
56 lines
2.8 KiB
C#
using System.Collections.Immutable;
|
|
using System.Net;
|
|
using System.Threading.Tasks;
|
|
using Content.Shared.Database;
|
|
using Content.Shared.Roles;
|
|
using Robust.Shared.Network;
|
|
using Robust.Shared.Player;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Server.Administration.Managers;
|
|
|
|
public interface IBanManager
|
|
{
|
|
public void Initialize();
|
|
public void Restart();
|
|
|
|
/// <summary>
|
|
/// Bans the specified target, address range and / or HWID. One of them must be non-null
|
|
/// </summary>
|
|
/// <param name="target">Target user, username or GUID, null for none</param>
|
|
/// <param name="banningAdmin">The person who banned our target</param>
|
|
/// <param name="addressRange">Address range, null for none</param>
|
|
/// <param name="hwid">H</param>
|
|
/// <param name="minutes">Number of minutes to ban for. 0 and null mean permanent</param>
|
|
/// <param name="severity">Severity of the resulting ban note</param>
|
|
/// <param name="reason">Reason for the ban</param>
|
|
public void CreateServerBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableTypedHwid? hwid, uint? minutes, NoteSeverity severity, string reason);
|
|
public HashSet<string>? GetRoleBans(NetUserId playerUserId);
|
|
public HashSet<ProtoId<JobPrototype>>? GetJobBans(NetUserId playerUserId);
|
|
|
|
/// <summary>
|
|
/// Creates a job ban for the specified target, username or GUID
|
|
/// </summary>
|
|
/// <param name="target">Target user, username or GUID, null for none</param>
|
|
/// <param name="role">Role to be banned from</param>
|
|
/// <param name="severity">Severity of the resulting ban note</param>
|
|
/// <param name="reason">Reason for the ban</param>
|
|
/// <param name="minutes">Number of minutes to ban for. 0 and null mean permanent</param>
|
|
/// <param name="timeOfBan">Time when the ban was applied, used for grouping role bans</param>
|
|
public void CreateRoleBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableTypedHwid? hwid, string role, uint? minutes, NoteSeverity severity, string reason, DateTimeOffset timeOfBan);
|
|
|
|
/// <summary>
|
|
/// Pardons a role ban for the specified target, username or GUID
|
|
/// </summary>
|
|
/// <param name="banId">The id of the role ban to pardon.</param>
|
|
/// <param name="unbanningAdmin">The admin, if any, that pardoned the role ban.</param>
|
|
/// <param name="unbanTime">The time at which this role ban was pardoned.</param>
|
|
public Task<string> PardonRoleBan(int banId, NetUserId? unbanningAdmin, DateTimeOffset unbanTime);
|
|
|
|
/// <summary>
|
|
/// Sends role bans to the target
|
|
/// </summary>
|
|
/// <param name="pSession">Player's session</param>
|
|
public void SendRoleBans(ICommonSession pSession);
|
|
}
|