приколы
This commit is contained in:
parent
6fc7a1d2d0
commit
ec12721bac
8 changed files with 159 additions and 1 deletions
|
|
@ -1,4 +1,5 @@
|
|||
using System.Text;
|
||||
using Content.Server.Administration.Managers;
|
||||
using Content.Server.Database;
|
||||
using Content.Shared.Administration;
|
||||
using Robust.Shared.Console;
|
||||
|
|
@ -16,6 +17,7 @@ namespace Content.Server.Administration.Commands
|
|||
{
|
||||
var player = shell.Player;
|
||||
var dbMan = IoCManager.Resolve<IServerDbManager>();
|
||||
var banMan = IoCManager.Resolve<IBanManager>();
|
||||
|
||||
if (args.Length != 1)
|
||||
{
|
||||
|
|
@ -52,7 +54,7 @@ namespace Content.Server.Administration.Commands
|
|||
return;
|
||||
}
|
||||
|
||||
await dbMan.AddServerUnbanAsync(new ServerUnbanDef(banId, player?.UserId, DateTimeOffset.UtcNow));
|
||||
await banMan.PardonBan(shell.Player, banId, ban); // Sunrise-Edit
|
||||
|
||||
shell.WriteLine($"Pardoned ban with id {banId}");
|
||||
}
|
||||
|
|
|
|||
18
Content.Server/Administration/Managers/BanEventsArgs.cs
Normal file
18
Content.Server/Administration/Managers/BanEventsArgs.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
using Robust.Shared.Network;
|
||||
|
||||
namespace Content.Server.Administration.Managers;
|
||||
|
||||
public sealed class BanIssuedEventArgs : EventArgs
|
||||
{
|
||||
public NetUserId? Target { get; init; }
|
||||
public NetUserId? BanningAdmin { get; init; }
|
||||
public string? Reason { get; init; }
|
||||
public DateTimeOffset Time { get; init; }
|
||||
}
|
||||
|
||||
public sealed class BanPardonedEventArgs : EventArgs
|
||||
{
|
||||
public NetUserId? Target { get; init; }
|
||||
public NetUserId? PardoningAdmin { get; init; }
|
||||
public DateTimeOffset Time { get; init; }
|
||||
}
|
||||
|
|
@ -66,6 +66,8 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit
|
|||
private string _webhookName = "Sunrise Ban";
|
||||
private string _webhookAvatarUrl = "https://i.ibb.co/WfGqKtG/avatar.png";
|
||||
private List<IPAddress?> _ipWhitelist = [];
|
||||
public event EventHandler<BanIssuedEventArgs>? BanIssued;
|
||||
public event EventHandler<BanPardonedEventArgs>? BanPardoned;
|
||||
// Sunrise-end
|
||||
|
||||
private readonly Dictionary<ICommonSession, List<ServerRoleBanDef>> _cachedRoleBans = new();
|
||||
|
|
@ -122,6 +124,20 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit
|
|||
|
||||
_ipWhitelist = ips;
|
||||
}
|
||||
|
||||
public async Task PardonBan(ICommonSession? admin, int banId, ServerBanDef ban)
|
||||
{
|
||||
await _db.AddServerUnbanAsync(new ServerUnbanDef(banId, admin?.UserId, DateTimeOffset.UtcNow));
|
||||
if (admin != null)
|
||||
{
|
||||
BanPardoned?.Invoke(this, new BanPardonedEventArgs
|
||||
{
|
||||
Target = ban.UserId,
|
||||
PardoningAdmin = admin.UserId,
|
||||
Time = DateTimeOffset.UtcNow
|
||||
});
|
||||
}
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
private async Task CachePlayerData(ICommonSession player, CancellationToken cancel)
|
||||
|
|
@ -248,6 +264,16 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit
|
|||
var hwidString = hwid?.ToString() ?? "null";
|
||||
var expiresString = expires == null ? Loc.GetString("server-ban-string-never") : $"{expires}";
|
||||
|
||||
// Sunrise-Start
|
||||
BanIssued?.Invoke(this, new BanIssuedEventArgs
|
||||
{
|
||||
Target = target,
|
||||
BanningAdmin = banningAdmin,
|
||||
Reason = reason,
|
||||
Time = DateTimeOffset.UtcNow
|
||||
});
|
||||
// Sunrise-End
|
||||
|
||||
var key = _cfg.GetCVar(CCVars.AdminShowPIIOnBan) ? "server-ban-string" : "server-ban-string-no-pii";
|
||||
|
||||
var logMessage = Loc.GetString(
|
||||
|
|
@ -368,6 +394,16 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit
|
|||
return;
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
BanIssued?.Invoke(this, new BanIssuedEventArgs
|
||||
{
|
||||
Target = target,
|
||||
BanningAdmin = banningAdmin,
|
||||
Reason = reason,
|
||||
Time = timeOfBan
|
||||
});
|
||||
// Sunrise-End
|
||||
|
||||
var length = expires == null ? Loc.GetString("cmd-roleban-inf") : Loc.GetString("cmd-roleban-until", ("expires", expires));
|
||||
_chat.SendAdminAlert(Loc.GetString("cmd-roleban-success", ("target", targetUsername ?? "null"), ("role", role), ("reason", reason), ("length", length)));
|
||||
|
||||
|
|
@ -433,6 +469,15 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit
|
|||
|
||||
await _db.AddServerRoleUnbanAsync(new ServerRoleUnbanDef(banId, unbanningAdmin, DateTimeOffset.UtcNow));
|
||||
|
||||
// Sunrise-Start
|
||||
BanPardoned?.Invoke(this, new BanPardonedEventArgs
|
||||
{
|
||||
Target = ban.UserId,
|
||||
PardoningAdmin = unbanningAdmin,
|
||||
Time = DateTimeOffset.UtcNow
|
||||
});
|
||||
// Sunrise-End
|
||||
|
||||
if (ban.UserId is { } player
|
||||
&& _playerManager.TryGetSessionById(player, out var session)
|
||||
&& _cachedRoleBans.TryGetValue(session, out var roleBans))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System.Collections.Immutable;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.Database;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Shared.Network;
|
||||
|
|
@ -100,4 +101,9 @@ public interface IBanManager
|
|||
/// </summary>
|
||||
/// <param name="pSession">Player's session</param>
|
||||
public void SendRoleBans(ICommonSession pSession);
|
||||
// Sunrise-Start
|
||||
public Task PardonBan(ICommonSession? admin, int banId, ServerBanDef ban);
|
||||
public event EventHandler<BanPardonedEventArgs>? BanPardoned;
|
||||
public event EventHandler<BanIssuedEventArgs>? BanIssued;
|
||||
// Sunrise-End
|
||||
}
|
||||
|
|
|
|||
|
|
@ -512,6 +512,11 @@ namespace Content.Server.Database
|
|||
return flags ?? ServerBanExemptFlags.None;
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
public abstract Task<List<ServerBanDef>> GetServerBansByAdminAsync(NetUserId adminId, DateTimeOffset since);
|
||||
public abstract Task DeleteServerBanAsync(int banId);
|
||||
// Sunrise-End
|
||||
|
||||
#endregion
|
||||
|
||||
#region Role Bans
|
||||
|
|
|
|||
|
|
@ -126,6 +126,10 @@ namespace Content.Server.Database
|
|||
/// <returns><see cref="ServerBanExemptFlags.None"/> if the user is not exempt from any bans.</returns>
|
||||
Task<ServerBanExemptFlags> GetBanExemption(NetUserId userId, CancellationToken cancel = default);
|
||||
|
||||
// Sunrise-Start
|
||||
Task<List<ServerBanDef>> GetServerBansByAdminAsync(NetUserId adminId, DateTimeOffset since);
|
||||
Task DeleteServerBanAsync(int banId);
|
||||
// Sunrise-End
|
||||
#endregion
|
||||
|
||||
#region Role Bans
|
||||
|
|
@ -584,6 +588,20 @@ namespace Content.Server.Database
|
|||
return RunDbCommand(() => _db.GetBanExemption(userId, cancel));
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
public Task<List<ServerBanDef>> GetServerBansByAdminAsync(NetUserId adminId, DateTimeOffset since)
|
||||
{
|
||||
DbReadOpsMetric.Inc();
|
||||
return RunDbCommand(() => _db.GetServerBansByAdminAsync(adminId, since));
|
||||
}
|
||||
|
||||
public Task DeleteServerBanAsync(int banId)
|
||||
{
|
||||
DbWriteOpsMetric.Inc();
|
||||
return RunDbCommand(() => _db.DeleteServerBanAsync(banId));
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
#region Role Ban
|
||||
public Task<ServerRoleBanDef?> GetServerRoleBanAsync(int id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -127,6 +127,38 @@ namespace Content.Server.Database
|
|||
return bans;
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
public override async Task<List<ServerBanDef>> GetServerBansByAdminAsync(NetUserId adminId, DateTimeOffset since)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
var bans = await db.PgDbContext.Ban
|
||||
.Include(b => b.Unban)
|
||||
.Where(b => b.BanningAdmin == adminId.UserId && b.BanTime >= since.UtcDateTime)
|
||||
.ToListAsync();
|
||||
var result = new List<ServerBanDef>();
|
||||
foreach (var ban in bans)
|
||||
{
|
||||
var banDef = ConvertBan(ban);
|
||||
if (banDef != null)
|
||||
result.Add(banDef);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public override async Task DeleteServerBanAsync(int banId)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
var unbans = db.PgDbContext.Unban.Where(u => u.BanId == banId);
|
||||
db.PgDbContext.Unban.RemoveRange(unbans);
|
||||
var ban = await db.PgDbContext.Ban.SingleOrDefaultAsync(b => b.Id == banId);
|
||||
if (ban != null)
|
||||
{
|
||||
db.PgDbContext.Ban.Remove(ban);
|
||||
await db.PgDbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
private static IQueryable<ServerBan> MakeBanLookupQuery(
|
||||
IPAddress? address,
|
||||
NetUserId? userId,
|
||||
|
|
|
|||
|
|
@ -101,6 +101,38 @@ namespace Content.Server.Database
|
|||
return (await GetServerBanQueryAsync(db, address, userId, hwId, modernHWIds, includeUnbanned)).ToList();
|
||||
}
|
||||
|
||||
// Sunrise-Start
|
||||
public override async Task<List<ServerBanDef>> GetServerBansByAdminAsync(NetUserId adminId, DateTimeOffset since)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
var bans = await db.SqliteDbContext.Ban
|
||||
.Include(b => b.Unban)
|
||||
.Where(b => b.BanningAdmin == adminId.UserId && b.BanTime >= since.UtcDateTime)
|
||||
.ToListAsync();
|
||||
var result = new List<ServerBanDef>();
|
||||
foreach (var ban in bans)
|
||||
{
|
||||
var banDef = ConvertBan(ban);
|
||||
if (banDef != null)
|
||||
result.Add(banDef);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public override async Task DeleteServerBanAsync(int banId)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
var unbans = db.SqliteDbContext.Unban.Where(u => u.BanId == banId);
|
||||
db.SqliteDbContext.Unban.RemoveRange(unbans);
|
||||
var ban = await db.SqliteDbContext.Ban.SingleOrDefaultAsync(b => b.Id == banId);
|
||||
if (ban != null)
|
||||
{
|
||||
db.SqliteDbContext.Ban.Remove(ban);
|
||||
await db.SqliteDbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
// Sunrise-End
|
||||
|
||||
private async Task<IEnumerable<ServerBanDef>> GetServerBanQueryAsync(
|
||||
DbGuardImpl db,
|
||||
IPAddress? address,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue