enhancement for issue #63

This commit is contained in:
RaidMax 2019-02-17 18:48:40 -06:00
parent b4e3e8526a
commit 9c4d23f0b4
6 changed files with 41 additions and 15 deletions

View File

@ -97,20 +97,27 @@ namespace IW4MAdmin
override public async Task OnClientDisconnected(EFClient client) override public async Task OnClientDisconnected(EFClient client)
{ {
Logger.WriteInfo($"Client {client} [{client.State.ToString().ToLower()}] disconnecting...");
await client.OnDisconnect();
Clients[client.ClientNumber] = null;
#if DEBUG == true #if DEBUG == true
Logger.WriteDebug($"End PreDisconnect for {client}"); if (client.ClientNumber >= 0)
#endif
var e = new GameEvent()
{ {
Origin = client, #endif
Owner = this, Logger.WriteInfo($"Client {client} [{client.State.ToString().ToLower()}] disconnecting...");
Type = GameEvent.EventType.Disconnect await client.OnDisconnect();
}; Clients[client.ClientNumber] = null;
#if DEBUG == true
Logger.WriteDebug($"End PreDisconnect for {client}");
#endif
var e = new GameEvent()
{
Origin = client,
Owner = this,
Type = GameEvent.EventType.Disconnect
};
Manager.GetEventHandler().AddEvent(e); Manager.GetEventHandler().AddEvent(e);
#if DEBUG == true
}
#endif
} }
public override async Task ExecuteEvent(GameEvent E) public override async Task ExecuteEvent(GameEvent E)
@ -751,7 +758,7 @@ namespace IW4MAdmin
} }
CustomCallback = await ScriptLoaded(); CustomCallback = await ScriptLoaded();
// they've manually specified the log path // they've manually specified the log path
if (!string.IsNullOrEmpty(ServerConfig.ManualLogPath)) if (!string.IsNullOrEmpty(ServerConfig.ManualLogPath))
{ {

View File

@ -19,5 +19,6 @@ namespace SharedLibraryCore.Dtos
public string Type { get; set; } public string Type { get; set; }
public string TimePunished { get; set; } public string TimePunished { get; set; }
public string TimeRemaining { get; set; } public string TimeRemaining { get; set; }
public bool Expired { get; set; }
} }
} }

View File

@ -5,7 +5,6 @@ using SharedLibraryCore.Interfaces;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SharedLibraryCore.Services namespace SharedLibraryCore.Services
@ -33,6 +32,7 @@ namespace SharedLibraryCore.Services
}; };
break; break;
case GameEvent.EventType.Command: case GameEvent.EventType.Command:
// this prevents passwords/tokens being logged into the database in plain text
if (e.Extra is Command cmd) if (e.Extra is Command cmd)
{ {
if (cmd.Name == "login" || cmd.Name == "setpassword") if (cmd.Name == "login" || cmd.Name == "setpassword")

View File

@ -197,7 +197,8 @@ namespace SharedLibraryCore.Services
Offense = penalty.Offense, Offense = penalty.Offense,
Type = penalty.Type.ToString(), Type = penalty.Type.ToString(),
TimeRemaining = penalty.Expires.HasValue ? (now > penalty.Expires ? "" : penalty.Expires.ToString()) : DateTime.MaxValue.ToString(), TimeRemaining = penalty.Expires.HasValue ? (now > penalty.Expires ? "" : penalty.Expires.ToString()) : DateTime.MaxValue.ToString(),
AutomatedOffense = penalty.AutomatedOffense AutomatedOffense = penalty.AutomatedOffense,
Expired = penalty.Expires.HasValue && penalty.Expires <= DateTime.UtcNow
}, },
When = penalty.When, When = penalty.When,
Sensitive = penalty.Type == Penalty.PenaltyType.Flag Sensitive = penalty.Type == Penalty.PenaltyType.Flag
@ -216,6 +217,11 @@ namespace SharedLibraryCore.Services
if (pi.TimeRemaining?.Length > 0) if (pi.TimeRemaining?.Length > 0)
{ {
pi.TimeRemaining = (DateTime.Parse(((PenaltyInfo)p.Value).TimeRemaining) - now).TimeSpanText(); pi.TimeRemaining = (DateTime.Parse(((PenaltyInfo)p.Value).TimeRemaining) - now).TimeSpanText();
if (!pi.Expired)
{
pi.TimeRemaining = $"{pi.TimeRemaining} {Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_PENALTY_TEMPLATE_REMAINING"]}";
}
} }
}); });
return list; return list;

View File

@ -95,6 +95,18 @@ namespace WebfrontCore.Controllers
administeredPenaltiesMeta.ForEach(p => p.Value.Offense = p.Value.AutomatedOffense ?? p.Value.Offense); administeredPenaltiesMeta.ForEach(p => p.Value.Offense = p.Value.AutomatedOffense ?? p.Value.Offense);
} }
var currentPenalty = activePenalties.FirstOrDefault();
if (currentPenalty != null && currentPenalty.Type == SharedLibraryCore.Objects.Penalty.PenaltyType.TempBan)
{
clientDto.Meta.Add(new ProfileMeta()
{
Key = Localization["WEBFRONT_CLIENT_META_REMAINING_BAN"],
Value = ((currentPenalty.Expires - DateTime.UtcNow) ?? new TimeSpan()).TimeSpanText(),
When = currentPenalty.When
});
}
clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.Sensitive)); clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.Sensitive));
clientDto.Meta.AddRange(Authorized ? penaltyMeta : penaltyMeta.Where(m => !m.Sensitive)); clientDto.Meta.AddRange(Authorized ? penaltyMeta : penaltyMeta.Where(m => !m.Sensitive));
clientDto.Meta.AddRange(Authorized ? administeredPenaltiesMeta : administeredPenaltiesMeta.Where(m => !m.Sensitive)); clientDto.Meta.AddRange(Authorized ? administeredPenaltiesMeta : administeredPenaltiesMeta.Where(m => !m.Sensitive));

View File

@ -209,7 +209,7 @@ function loadMeta(meta) {
if (meta.class.includes("Penalty")) { if (meta.class.includes("Penalty")) {
if (meta.value.punisherId !== clientInfo.clientId) { if (meta.value.punisherId !== clientInfo.clientId) {
const timeRemaining = meta.value.type === 'TempBan' && meta.value.timeRemaining.length > 0 ? const timeRemaining = meta.value.type === 'TempBan' && meta.value.timeRemaining.length > 0 ?
`(${meta.value.timeRemaining} remaining)` : `(${meta.value.timeRemaining})` :
''; '';
eventString = `<div><span class="penalties-color-${meta.value.type.toLowerCase()}">${penaltyToName(meta.value.type)}</span> by <span class="text-highlight"> <a class="link-inverse" href="${meta.value.punisherId}">${meta.value.punisherName}</a></span > for <span style="color: white; " class="automated-penalty-info-detailed" data-clientid="${meta.value.offenderId}">${meta.value.offense}</span><span class="text-muted"> ${timeRemaining}</span></div>`; eventString = `<div><span class="penalties-color-${meta.value.type.toLowerCase()}">${penaltyToName(meta.value.type)}</span> by <span class="text-highlight"> <a class="link-inverse" href="${meta.value.punisherId}">${meta.value.punisherName}</a></span > for <span style="color: white; " class="automated-penalty-info-detailed" data-clientid="${meta.value.offenderId}">${meta.value.offense}</span><span class="text-muted"> ${timeRemaining}</span></div>`;
} }