changes and vpn checking
This commit is contained in:
parent
3c5173eaa4
commit
5c0aa7d14f
File diff suppressed because it is too large
Load Diff
@ -19,8 +19,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VotemapPlugin", "Plugins\Vo
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageboardPlugin", "Plugins\MessageBoard\MessageboardPlugin.csproj", "{E46C85BD-A99C-484E-BCCE-0F1831C5925E}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageboardPlugin", "Plugins\MessageBoard\MessageboardPlugin.csproj", "{E46C85BD-A99C-484E-BCCE-0F1831C5925E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventAPI", "Plugins\EventAPI\EventAPI.csproj", "{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{26E8B310-269E-46D4-A612-24601F16065F}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{26E8B310-269E-46D4-A612-24601F16065F}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastRestartPlugin", "Plugins\FastRestart\FastRestartPlugin.csproj", "{1479DE87-ACB5-4046-81C8-A0BA5041227D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastRestartPlugin", "Plugins\FastRestart\FastRestartPlugin.csproj", "{1479DE87-ACB5-4046-81C8-A0BA5041227D}"
|
||||||
@ -206,38 +204,6 @@ Global
|
|||||||
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU
|
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU
|
||||||
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU
|
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU
|
||||||
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU
|
{E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.Build.0 = Debug|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.Build.0 = Debug|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.ActiveCfg = Debug|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.Build.0 = Debug|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.Build.0 = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.ActiveCfg = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.Build.0 = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.ActiveCfg = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.Build.0 = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.ActiveCfg = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.Build.0 = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.ActiveCfg = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.Build.0 = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Nightly|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.Build.0 = Release-Nightly|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.ActiveCfg = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.Build.0 = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.ActiveCfg = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.Build.0 = Release-Nightly|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|x86
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU
|
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU
|
|
||||||
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
{1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
@ -339,7 +305,6 @@ Global
|
|||||||
{AF097E6B-48D5-4452-9CCF-0A81A21F341D} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{AF097E6B-48D5-4452-9CCF-0A81A21F341D} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
{428D8EB9-ECA3-4A66-AA59-3A944378C33F} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{428D8EB9-ECA3-4A66-AA59-3A944378C33F} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
{E46C85BD-A99C-484E-BCCE-0F1831C5925E} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{E46C85BD-A99C-484E-BCCE-0F1831C5925E} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
{C9E821BF-23AD-4CB5-B7F9-B3B99B606650} = {26E8B310-269E-46D4-A612-24601F16065F}
|
|
||||||
{1479DE87-ACB5-4046-81C8-A0BA5041227D} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{1479DE87-ACB5-4046-81C8-A0BA5041227D} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
{B8C2A759-8663-4F6F-9BA4-19595F5E12C1} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{B8C2A759-8663-4F6F-9BA4-19595F5E12C1} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Plugin.cs" />
|
<None Include="Plugin.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
@ -85,7 +85,7 @@ namespace EventAPI
|
|||||||
message.Contains("wall") ||
|
message.Contains("wall") ||
|
||||||
message.Contains("cheto") ||
|
message.Contains("cheto") ||
|
||||||
message.Contains("hak") ||
|
message.Contains("hak") ||
|
||||||
message.Contains("bot");
|
message.Contains(" bot ");
|
||||||
|
|
||||||
if (flagged)
|
if (flagged)
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StatsPlugin.Commands
|
namespace StatsPlugin.Commands
|
||||||
{
|
{
|
||||||
|
|
||||||
public class ResetStats : Command
|
public class ResetStats : Command
|
||||||
{
|
{
|
||||||
public ResetStats() : base("resetstats", "reset your stats to factory-new", "rs", Player.Permission.User, false) { }
|
public ResetStats() : base("resetstats", "reset your stats to factory-new", "rs", Player.Permission.User, false) { }
|
||||||
@ -32,7 +31,7 @@ namespace StatsPlugin.Commands
|
|||||||
|
|
||||||
// fixme: this doesn't work properly when another context exists
|
// fixme: this doesn't work properly when another context exists
|
||||||
await svc.SaveChangesAsync();
|
await svc.SaveChangesAsync();
|
||||||
await E.Origin.Tell("Your stats have been reset");
|
await E.Origin.Tell("Your stats for this server have been reset");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
Binary file not shown.
@ -97,7 +97,7 @@ namespace StatsPlugin
|
|||||||
double abdomenRatio = 0;
|
double abdomenRatio = 0;
|
||||||
double chestAbdomenRatio = 0;
|
double chestAbdomenRatio = 0;
|
||||||
|
|
||||||
if (clientStats.FirstOrDefault()?.HitLocations.Count > 0)
|
if (clientStats.Where(cs => cs.HitLocations.Count > 0).FirstOrDefault() != null)
|
||||||
{
|
{
|
||||||
chestRatio = Math.Round(clientStats.Where(c => c.HitLocations.Count > 0).Sum(c =>
|
chestRatio = Math.Round(clientStats.Where(c => c.HitLocations.Count > 0).Sum(c =>
|
||||||
c.HitLocations.First(hl => hl.Location == IW4Info.HitLocation.torso_upper).HitCount) /
|
c.HitLocations.First(hl => hl.Location == IW4Info.HitLocation.torso_upper).HitCount) /
|
||||||
|
@ -118,6 +118,9 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Cheat\Detection.cs" />
|
||||||
|
<Compile Include="Cheat\DetectionPenaltyResult.cs" />
|
||||||
|
<Compile Include="Cheat\Thresholds.cs" />
|
||||||
<Compile Include="Commands\ResetStats.cs" />
|
<Compile Include="Commands\ResetStats.cs" />
|
||||||
<Compile Include="Commands\TopStats.cs" />
|
<Compile Include="Commands\TopStats.cs" />
|
||||||
<Compile Include="Commands\ViewStats.cs" />
|
<Compile Include="Commands\ViewStats.cs" />
|
||||||
@ -147,9 +150,7 @@
|
|||||||
<Name>SharedLibrary</Name>
|
<Name>SharedLibrary</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup />
|
||||||
<Folder Include="Cheat\" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\plugins\"</PostBuildEvent>
|
<PostBuildEvent>copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\plugins\"</PostBuildEvent>
|
||||||
|
@ -56,7 +56,7 @@ namespace SharedLibrary.Database
|
|||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
foreach (string dllPath in System.IO.Directory.GetFiles($"{Utilities.OperatingDirectory}Plugins"))
|
foreach (string dllPath in System.IO.Directory.GetFiles($"{Utilities.OperatingDirectory}Plugins"))
|
||||||
#else
|
#else
|
||||||
foreach (string dllPath in System.IO.Directory.GetFiles(@"C:\Users\User\Desktop\stuff\IW4M-Admin\IW4M-Admin\WebfrontCore\bin\x86\Debug\Plugins"))
|
foreach (string dllPath in System.IO.Directory.GetFiles(@"C:\Projects\IW4M-Admin\WebfrontCore\bin\x86\Debug\Plugins").Where(f => f.Contains(".dll")))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Assembly library;
|
Assembly library;
|
||||||
|
11
SharedLibrary/Dtos/ChatInfo.cs
Normal file
11
SharedLibrary/Dtos/ChatInfo.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SharedLibrary.Dtos
|
||||||
|
{
|
||||||
|
public class ChatInfo
|
||||||
|
{
|
||||||
|
public string Message { get; set; }
|
||||||
|
public DateTime Time { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
39
SharedLibrary/Dtos/EventInfo.cs
Normal file
39
SharedLibrary/Dtos/EventInfo.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SharedLibrary.Dtos
|
||||||
|
{
|
||||||
|
public class EventInfo
|
||||||
|
{
|
||||||
|
public EventInfo(EventType Ty, EventVersion V, string M, string T, string O, string Ta)
|
||||||
|
{
|
||||||
|
Type = Ty;
|
||||||
|
Version = V;
|
||||||
|
Message = System.Web.HttpUtility.HtmlEncode(M);
|
||||||
|
Title = T;
|
||||||
|
Origin = System.Web.HttpUtility.HtmlEncode(O);
|
||||||
|
Target = System.Web.HttpUtility.HtmlEncode(Ta);
|
||||||
|
|
||||||
|
ID = Math.Abs(DateTime.Now.GetHashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum EventType
|
||||||
|
{
|
||||||
|
NOTIFICATION,
|
||||||
|
STATUS,
|
||||||
|
ALERT,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum EventVersion
|
||||||
|
{
|
||||||
|
IW4MAdmin
|
||||||
|
}
|
||||||
|
|
||||||
|
public EventType Type;
|
||||||
|
public EventVersion Version;
|
||||||
|
public string Message;
|
||||||
|
public string Title;
|
||||||
|
public string Origin;
|
||||||
|
public string Target;
|
||||||
|
public int ID;
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,7 @@ namespace SharedLibrary.Dtos
|
|||||||
public string GameType { get; set; }
|
public string GameType { get; set; }
|
||||||
public int ClientCount { get; set; }
|
public int ClientCount { get; set; }
|
||||||
public int MaxClients { get; set; }
|
public int MaxClients { get; set; }
|
||||||
public Chat[] ChatHistory { get; set; }
|
public ChatInfo[] ChatHistory { get; set; }
|
||||||
public List<PlayerInfo> Players { get; set; }
|
public List<PlayerInfo> Players { get; set; }
|
||||||
public Helpers.PlayerHistory[] PlayerHistory { get; set; }
|
public Helpers.PlayerHistory[] PlayerHistory { get; set; }
|
||||||
public int ID { get; set; }
|
public int ID { get; set; }
|
||||||
|
@ -8,59 +8,6 @@ using SharedLibrary.Objects;
|
|||||||
|
|
||||||
namespace SharedLibrary
|
namespace SharedLibrary
|
||||||
{
|
{
|
||||||
[Serializable]
|
|
||||||
public class Chat
|
|
||||||
{
|
|
||||||
public Chat(string O, String M, DateTime D)
|
|
||||||
{
|
|
||||||
Name = O;
|
|
||||||
Message = M;
|
|
||||||
Time = D;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public String Message { get; private set; }
|
|
||||||
public DateTime Time { get; private set; }
|
|
||||||
public string Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Serializable]
|
|
||||||
public struct RestEvent
|
|
||||||
{
|
|
||||||
public RestEvent(EventType Ty, EventVersion V, string M, string T, string O, string Ta)
|
|
||||||
{
|
|
||||||
Type = Ty;
|
|
||||||
Version = V;
|
|
||||||
Message = System.Web.HttpUtility.HtmlEncode(M);
|
|
||||||
Title = T;
|
|
||||||
Origin = System.Web.HttpUtility.HtmlEncode(O);
|
|
||||||
Target = System.Web.HttpUtility.HtmlEncode(Ta);
|
|
||||||
|
|
||||||
ID = Math.Abs(DateTime.Now.GetHashCode());
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum EventType
|
|
||||||
{
|
|
||||||
NOTIFICATION,
|
|
||||||
STATUS,
|
|
||||||
ALERT,
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum EventVersion
|
|
||||||
{
|
|
||||||
IW4MAdmin
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventType Type;
|
|
||||||
public EventVersion Version;
|
|
||||||
public string Message;
|
|
||||||
public string Title;
|
|
||||||
public string Origin;
|
|
||||||
public string Target;
|
|
||||||
public int ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class Event
|
public class Event
|
||||||
{
|
{
|
||||||
public enum GType
|
public enum GType
|
||||||
@ -135,10 +82,10 @@ namespace SharedLibrary
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (removeTime.Contains("ExitLevel"))
|
if (removeTime.Contains("ExitLevel"))
|
||||||
return new Event(GType.MapEnd, line[0], null, null, SV);
|
return new Event(GType.MapEnd, line[0], new Player() { ClientId = 1 }, null, SV);
|
||||||
|
|
||||||
if (removeTime.Contains("InitGame"))
|
if (removeTime.Contains("InitGame"))
|
||||||
return new Event(GType.MapChange, line[0], null, null, SV);
|
return new Event(GType.MapChange, line[0], new Player() { ClientId = 1 }, null, SV);
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||||
|
<noInheritable></noInheritable>
|
||||||
|
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.4148" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
|
||||||
|
<file name="msvcr90.dll" hashalg="SHA1" hash="98e8006e0a4542e69f1a3555b927758bd76ca07d"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>+CXED+6HzJlSphyMNOn27ujadC0=</dsig:DigestValue></asmv2:hash></file> <file name="msvcp90.dll" hashalg="SHA1" hash="3aec3be680024a46813dee891a753bd58b3f3b12"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>MyKED+9DyS+1XcMeaC0Zlw2vFZ0=</dsig:DigestValue></asmv2:hash></file> <file name="msvcm90.dll" hashalg="SHA1" hash="0195dd0896d74b62531e4f3c771904a3d996450e"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>EeyDE7og6WoPd2oBhYbMEnpFHhY=</dsig:DigestValue></asmv2:hash></file>
|
||||||
|
</assembly>
|
BIN
SharedLibrary/LibSQLCE/x86/Microsoft.VC90.CRT/README_ENU.txt
Normal file
BIN
SharedLibrary/LibSQLCE/x86/Microsoft.VC90.CRT/README_ENU.txt
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/Microsoft.VC90.CRT/msvcr90.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/Microsoft.VC90.CRT/msvcr90.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlceca40.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlceca40.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlcecompact40.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlcecompact40.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlceer40EN.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlceer40EN.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlceme40.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlceme40.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlceqp40.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlceqp40.dll
Normal file
Binary file not shown.
BIN
SharedLibrary/LibSQLCE/x86/sqlcese40.dll
Normal file
BIN
SharedLibrary/LibSQLCE/x86/sqlcese40.dll
Normal file
Binary file not shown.
@ -39,7 +39,7 @@ namespace SharedLibrary
|
|||||||
Players = new List<Player>(new Player[18]);
|
Players = new List<Player>(new Player[18]);
|
||||||
Reports = new List<Report>();
|
Reports = new List<Report>();
|
||||||
PlayerHistory = new Queue<Helpers.PlayerHistory>();
|
PlayerHistory = new Queue<Helpers.PlayerHistory>();
|
||||||
ChatHistory = new List<Chat>();
|
ChatHistory = new List<ChatInfo>();
|
||||||
//Configuration = new ConfigurationManager(this.GetType());
|
//Configuration = new ConfigurationManager(this.GetType());
|
||||||
NextMessage = 0;
|
NextMessage = 0;
|
||||||
InitializeTokens();
|
InitializeTokens();
|
||||||
@ -364,7 +364,7 @@ namespace SharedLibrary
|
|||||||
public List<Map> Maps { get; protected set; }
|
public List<Map> Maps { get; protected set; }
|
||||||
public List<string> Rules { get; protected set; }
|
public List<string> Rules { get; protected set; }
|
||||||
public List<Report> Reports { get; set; }
|
public List<Report> Reports { get; set; }
|
||||||
public List<Chat> ChatHistory { get; protected set; }
|
public List<ChatInfo> ChatHistory { get; protected set; }
|
||||||
public Queue<Helpers.PlayerHistory> PlayerHistory { get; private set; }
|
public Queue<Helpers.PlayerHistory> PlayerHistory { get; private set; }
|
||||||
public Game GameName { get; protected set; }
|
public Game GameName { get; protected set; }
|
||||||
|
|
||||||
|
@ -153,7 +153,8 @@ namespace SharedLibrary.Services
|
|||||||
Offense = penalty.Offense,
|
Offense = penalty.Offense,
|
||||||
Type = penalty.Type.ToString()
|
Type = penalty.Type.ToString()
|
||||||
},
|
},
|
||||||
When = penalty.When
|
When = penalty.When,
|
||||||
|
Sensitive = penalty.Type == Objects.Penalty.PenaltyType.Flag
|
||||||
};
|
};
|
||||||
// fixme: is this good and fast?
|
// fixme: is this good and fast?
|
||||||
return await iqPenalties.ToListAsync();
|
return await iqPenalties.ToListAsync();
|
||||||
|
@ -154,6 +154,7 @@
|
|||||||
<Compile Include="Database\Models\EFPenalty.cs" />
|
<Compile Include="Database\Models\EFPenalty.cs" />
|
||||||
<Compile Include="Database\Models\SharedEntity.cs" />
|
<Compile Include="Database\Models\SharedEntity.cs" />
|
||||||
<Compile Include="Database\Repair.cs" />
|
<Compile Include="Database\Repair.cs" />
|
||||||
|
<Compile Include="Dtos\ChatInfo.cs" />
|
||||||
<Compile Include="Dtos\CommandResponseInfo.cs" />
|
<Compile Include="Dtos\CommandResponseInfo.cs" />
|
||||||
<Compile Include="Dtos\PlayerInfo.cs" />
|
<Compile Include="Dtos\PlayerInfo.cs" />
|
||||||
<Compile Include="Dtos\ClientInfo.cs" />
|
<Compile Include="Dtos\ClientInfo.cs" />
|
||||||
@ -207,7 +208,16 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="app.config" />
|
<Content Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<Compile Include="Dtos\EventInfo.cs" />
|
||||||
|
<Content Include="LibSQLCE\x86\Microsoft.VC90.CRT\msvcr90.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\Microsoft.VC90.CRT\README_ENU.txt" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlceca40.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlcecompact40.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlceer40EN.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlceme40.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlceqp40.dll" />
|
||||||
|
<Content Include="LibSQLCE\x86\sqlcese40.dll" />
|
||||||
|
<None Include="LibSQLCE\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="EntityFramework">
|
<PackageReference Include="EntityFramework">
|
||||||
@ -242,10 +252,8 @@
|
|||||||
<PostBuildEvent>copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\lib"
|
<PostBuildEvent>copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\lib"
|
||||||
copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Admin\lib"
|
copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Admin\lib"
|
||||||
|
|
||||||
if not exist "$(TargetDir)x86" md "$(TargetDir)x86"
|
if not exist "$(ProjectDir)LibSQLCE\x86" md "$(TargetDir)x86"
|
||||||
xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86"
|
xcopy /s /y "$(ProjectDir)LibSQLCE\x86\*.*" "$(TargetDir)x86"
|
||||||
if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64"
|
|
||||||
xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"
|
|
||||||
|
|
||||||
|
|
||||||
xcopy /Y /I /E "$(TargetDir)*" "$(SolutionDir)BUILD\Lib"</PostBuildEvent>
|
xcopy /Y /I /E "$(TargetDir)*" "$(SolutionDir)BUILD\Lib"</PostBuildEvent>
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="EntityFramework" version="6.2.0" targetFramework="net45" />
|
|
||||||
<package id="EntityFramework.SqlServerCompact" version="6.2.0" targetFramework="net45" />
|
|
||||||
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net45" />
|
|
||||||
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
|
|
||||||
</packages>
|
|
69
WebfrontCore/Application/API/EventAPI.cs
Normal file
69
WebfrontCore/Application/API/EventAPI.cs
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
using SharedLibrary;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace WebfrontCore.Application.API
|
||||||
|
{
|
||||||
|
class EventAPI
|
||||||
|
{
|
||||||
|
public static Queue<SharedLibrary.Dtos.EventInfo> Events = new Queue<SharedLibrary.Dtos.EventInfo>();
|
||||||
|
static DateTime LastFlagEvent;
|
||||||
|
static string[] FlaggedMessageContains =
|
||||||
|
{
|
||||||
|
" wh ",
|
||||||
|
"hax",
|
||||||
|
"cheat",
|
||||||
|
" hack ",
|
||||||
|
"aim",
|
||||||
|
"wall",
|
||||||
|
"cheto",
|
||||||
|
"hak",
|
||||||
|
"bot"
|
||||||
|
};
|
||||||
|
static int FlaggedMessageCount;
|
||||||
|
|
||||||
|
public static void OnServerEventOccurred(object sender, Event E)
|
||||||
|
{
|
||||||
|
if (E.Type == Event.GType.Say && E.Origin.Level < SharedLibrary.Objects.Player.Permission.Trusted)
|
||||||
|
{
|
||||||
|
bool flaggedMessage = false;
|
||||||
|
foreach (string msg in FlaggedMessageContains)
|
||||||
|
flaggedMessage = flaggedMessage ? flaggedMessage : E.Data.ToLower().Contains(msg);
|
||||||
|
|
||||||
|
if (flaggedMessage)
|
||||||
|
FlaggedMessageCount++;
|
||||||
|
|
||||||
|
if (FlaggedMessageCount > 3)
|
||||||
|
{
|
||||||
|
if (Events.Count > 20)
|
||||||
|
Events.Dequeue();
|
||||||
|
|
||||||
|
FlaggedMessageCount = 0;
|
||||||
|
|
||||||
|
E.Owner.Broadcast("If you suspect someone of ^5CHEATING ^7use the ^5!report ^7command").Wait();
|
||||||
|
Events.Enqueue(new SharedLibrary.Dtos.EventInfo(
|
||||||
|
SharedLibrary.Dtos.EventInfo.EventType.ALERT,
|
||||||
|
SharedLibrary.Dtos.EventInfo.EventVersion.IW4MAdmin,
|
||||||
|
"Chat indicates there may be a cheater",
|
||||||
|
"Alert",
|
||||||
|
E.Owner.Hostname, ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((DateTime.UtcNow - LastFlagEvent).Minutes >= 3)
|
||||||
|
{
|
||||||
|
FlaggedMessageCount = 0;
|
||||||
|
LastFlagEvent = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (E.Type == Event.GType.Report)
|
||||||
|
{
|
||||||
|
Events.Enqueue(new SharedLibrary.Dtos.EventInfo(
|
||||||
|
SharedLibrary.Dtos.EventInfo.EventType.ALERT,
|
||||||
|
SharedLibrary.Dtos.EventInfo.EventVersion.IW4MAdmin,
|
||||||
|
$"**{E.Origin.Name}** has reported **{E.Target.Name}** for: {E.Data.Trim()}",
|
||||||
|
E.Target.Name, E.Origin.Name, ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace IW4MAdmin
|
namespace IW4MAdmin
|
||||||
|
@ -12,6 +12,7 @@ using SharedLibrary.Helpers;
|
|||||||
using SharedLibrary.Exceptions;
|
using SharedLibrary.Exceptions;
|
||||||
using SharedLibrary.Objects;
|
using SharedLibrary.Objects;
|
||||||
using SharedLibrary.Services;
|
using SharedLibrary.Services;
|
||||||
|
using WebfrontCore.Application.API;
|
||||||
|
|
||||||
namespace IW4MAdmin
|
namespace IW4MAdmin
|
||||||
{
|
{
|
||||||
@ -22,6 +23,7 @@ namespace IW4MAdmin
|
|||||||
public List<int> AdministratorIPs { get; set; }
|
public List<int> AdministratorIPs { get; set; }
|
||||||
public ILogger Logger { get; private set; }
|
public ILogger Logger { get; private set; }
|
||||||
public bool Running { get; private set; }
|
public bool Running { get; private set; }
|
||||||
|
public EventHandler<Event> ServerEventOccurred { get; private set; }
|
||||||
|
|
||||||
static ApplicationManager Instance;
|
static ApplicationManager Instance;
|
||||||
List<AsyncStatus> TaskStatuses;
|
List<AsyncStatus> TaskStatuses;
|
||||||
@ -47,6 +49,7 @@ namespace IW4MAdmin
|
|||||||
AliasSvc = new AliasService();
|
AliasSvc = new AliasService();
|
||||||
PenaltySvc = new PenaltyService();
|
PenaltySvc = new PenaltyService();
|
||||||
AdministratorIPs = new List<int>();
|
AdministratorIPs = new List<int>();
|
||||||
|
ServerEventOccurred += EventAPI.OnServerEventOccurred;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IList<Server> GetServers()
|
public IList<Server> GetServers()
|
||||||
|
28
WebfrontCore/Application/Misc/VPNCheck.cs
Normal file
28
WebfrontCore/Application/Misc/VPNCheck.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WebfrontCore.Application.Misc
|
||||||
|
{
|
||||||
|
public class VPNCheck
|
||||||
|
{
|
||||||
|
public static async Task<bool> UsingVPN(string ip)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var RequestClient = new System.Net.Http.HttpClient())
|
||||||
|
{
|
||||||
|
string response = await RequestClient.GetStringAsync($"http://check.getipintel.net/check.php?ip={ip}&contact=raidmax@live.com");
|
||||||
|
double probability = Convert.ToDouble(response);
|
||||||
|
return probability > 0.9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,8 @@ using SharedLibrary.Objects;
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using SharedLibrary.Services;
|
using SharedLibrary.Services;
|
||||||
using SharedLibrary.Database.Models;
|
using SharedLibrary.Database.Models;
|
||||||
|
using SharedLibrary.Dtos;
|
||||||
|
using WebfrontCore.Application.Misc;
|
||||||
|
|
||||||
namespace IW4MAdmin
|
namespace IW4MAdmin
|
||||||
{
|
{
|
||||||
@ -58,7 +60,8 @@ namespace IW4MAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (polledPlayer.Name == "Unknown Soldier" ||
|
if (polledPlayer.Name == "Unknown Soldier" ||
|
||||||
polledPlayer.Name == "UnknownSoldier")
|
polledPlayer.Name == "UnknownSoldier" ||
|
||||||
|
polledPlayer.Name == "CHEATER")
|
||||||
{
|
{
|
||||||
Logger.WriteDebug($"Kicking {polledPlayer} because their name is generic");
|
Logger.WriteDebug($"Kicking {polledPlayer} because their name is generic");
|
||||||
await this.ExecuteCommandAsync($"clientkick {polledPlayer.ClientNumber} \"Please change your name using /name.\"");
|
await this.ExecuteCommandAsync($"clientkick {polledPlayer.ClientNumber} \"Please change your name using /name.\"");
|
||||||
@ -139,6 +142,12 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
await ExecuteEvent(new Event(Event.GType.Connect, "", player, null, this));
|
await ExecuteEvent(new Event(Event.GType.Connect, "", player, null, this));
|
||||||
|
|
||||||
|
|
||||||
|
if (await VPNCheck.UsingVPN(player.IPAddressString))
|
||||||
|
{
|
||||||
|
await player.Kick("VPNs are not allowed on this server", new Player() { ClientId = 1 });
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,13 +226,13 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (E.Origin.Level < C.Permission)
|
if (E.Origin.Level < C.Permission)
|
||||||
{
|
{
|
||||||
await E.Origin.Tell("You do not have access to that command!");
|
await E.Origin.Tell("You do not have access to that command");
|
||||||
throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} does not have access to \"{C.Name}\"");
|
throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} does not have access to \"{C.Name}\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Args.Length < (C.RequiredArgumentCount))
|
if (Args.Length < (C.RequiredArgumentCount))
|
||||||
{
|
{
|
||||||
await E.Origin.Tell($"Not enough arguments supplied!");
|
await E.Origin.Tell($"Not enough arguments supplied");
|
||||||
await E.Origin.Tell(C.Syntax);
|
await E.Origin.Tell(C.Syntax);
|
||||||
throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} did not supply enough arguments for \"{C.Name}\"");
|
throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} did not supply enough arguments for \"{C.Name}\"");
|
||||||
}
|
}
|
||||||
@ -334,6 +343,7 @@ namespace IW4MAdmin
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
await ProcessEvent(E);
|
await ProcessEvent(E);
|
||||||
|
((ApplicationManager)Manager).ServerEventOccurred(this, E);
|
||||||
|
|
||||||
foreach (IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins)
|
foreach (IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins)
|
||||||
{
|
{
|
||||||
@ -588,7 +598,7 @@ namespace IW4MAdmin
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
{
|
{
|
||||||
basepath.Value = (GameName == Game.IW4) ?
|
basepath.Value = (GameName == Game.IW4) ?
|
||||||
@"\\tsclient\J\WIN7_10.25\MW2" :
|
@"Z:\" :
|
||||||
@"\\tsclient\G\Program Files (x86)\Steam\SteamApps\common\Call of Duty 4";
|
@"\\tsclient\G\Program Files (x86)\Steam\SteamApps\common\Call of Duty 4";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -608,16 +618,16 @@ namespace IW4MAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if !DEBUG
|
//#if !DEBUG
|
||||||
LogFile = new IFile(logPath);
|
LogFile = new IFile(logPath);
|
||||||
#else
|
//#else
|
||||||
}
|
}
|
||||||
LogFile = new RemoteFile("https://raidmax.org/IW4MAdmin/getlog.php");
|
// LogFile = new RemoteFile("https://raidmax.org/IW4MAdmin/getlog.php");
|
||||||
#endif
|
//#endif
|
||||||
Logger.WriteInfo($"Log file is {logPath}");
|
Logger.WriteInfo($"Log file is {logPath}");
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
await Broadcast("IW4M Admin is now ^2ONLINE");
|
await Broadcast("IW4M Admin is now ^2ONLINE");
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,7 +636,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (E.Type == Event.GType.Connect)
|
if (E.Type == Event.GType.Connect)
|
||||||
{
|
{
|
||||||
ChatHistory.Add(new Chat(E.Origin.Name, "CONNECTED", DateTime.Now));
|
ChatHistory.Add(new ChatInfo()
|
||||||
|
{
|
||||||
|
Name = E.Origin.Name,
|
||||||
|
Message = "CONNECTED",
|
||||||
|
Time = DateTime.UtcNow
|
||||||
|
});
|
||||||
|
|
||||||
if (E.Origin.Level > Player.Permission.Moderator)
|
if (E.Origin.Level > Player.Permission.Moderator)
|
||||||
await E.Origin.Tell($"There are ^5{Reports.Count} ^7recent reports");
|
await E.Origin.Tell($"There are ^5{Reports.Count} ^7recent reports");
|
||||||
@ -646,7 +661,12 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
else if (E.Type == Event.GType.Disconnect)
|
else if (E.Type == Event.GType.Disconnect)
|
||||||
{
|
{
|
||||||
ChatHistory.Add(new Chat(E.Origin.Name, "DISCONNECTED", DateTime.Now));
|
ChatHistory.Add(new ChatInfo()
|
||||||
|
{
|
||||||
|
Name = E.Origin.Name,
|
||||||
|
Message = "DISCONNECTED",
|
||||||
|
Time = DateTime.UtcNow
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (E.Type == Event.GType.Script)
|
else if (E.Type == Event.GType.Script)
|
||||||
@ -699,7 +719,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
E.Data = E.Data.StripColors();
|
E.Data = E.Data.StripColors();
|
||||||
|
|
||||||
ChatHistory.Add(new Chat(E.Origin.Name, E.Data, DateTime.Now));
|
ChatHistory.Add(new ChatInfo()
|
||||||
|
{
|
||||||
|
Name = E.Origin.Name,
|
||||||
|
Message = E.Data,
|
||||||
|
Time = DateTime.UtcNow
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
WebfrontCore/Controllers/API/APIController.cs
Normal file
13
WebfrontCore/Controllers/API/APIController.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WebfrontCore.Controllers.API
|
||||||
|
{
|
||||||
|
[Route("api")]
|
||||||
|
public class APIController : BaseController
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
23
WebfrontCore/Controllers/API/EventController.cs
Normal file
23
WebfrontCore/Controllers/API/EventController.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using WebfrontCore.Application.API;
|
||||||
|
|
||||||
|
namespace WebfrontCore.Controllers.API
|
||||||
|
{
|
||||||
|
public class EventController : APIController
|
||||||
|
{
|
||||||
|
[HttpGet]
|
||||||
|
[Route("event")]
|
||||||
|
public ActionResult Index()
|
||||||
|
{
|
||||||
|
var events = EventAPI.Events;
|
||||||
|
var eventsDto = new List<SharedLibrary.Dtos.EventInfo>();
|
||||||
|
while (events.Count > 0)
|
||||||
|
eventsDto.Add(events.Dequeue());
|
||||||
|
return Json(eventsDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,9 @@ namespace WebfrontCore.Controllers
|
|||||||
public override void OnActionExecuting(ActionExecutingContext context)
|
public override void OnActionExecuting(ActionExecutingContext context)
|
||||||
{
|
{
|
||||||
Manager = IW4MAdmin.Program.ServerManager;
|
Manager = IW4MAdmin.Program.ServerManager;
|
||||||
Authorized = Manager.AdministratorIPs.Contains(context.HttpContext.Connection.RemoteIpAddress.ToString().ConvertToIP());
|
Authorized = context.HttpContext.Connection.RemoteIpAddress.ToString() == "127.0.0.1" ||
|
||||||
|
Manager.AdministratorIPs.Contains(context.HttpContext.Connection.RemoteIpAddress.ToString().ConvertToIP());
|
||||||
|
ViewBag.Authorized = Authorized;
|
||||||
base.OnActionExecuting(context);
|
base.OnActionExecuting(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,25 @@ namespace WebfrontCore.Controllers
|
|||||||
.OrderBy(i => i)
|
.OrderBy(i => i)
|
||||||
.ToList(),
|
.ToList(),
|
||||||
};
|
};
|
||||||
|
|
||||||
var meta = await MetaService.GetMeta(client.ClientId);
|
var meta = await MetaService.GetMeta(client.ClientId);
|
||||||
|
var penaltyMeta = await Manager.GetPenaltyService()
|
||||||
|
.ReadGetClientPenaltiesAsync(client.ClientId);
|
||||||
|
var administeredPenaltiesMeta = await Manager.GetPenaltyService()
|
||||||
|
.ReadGetClientPenaltiesAsync(client.ClientId, false);
|
||||||
|
|
||||||
|
if (client.Level > SharedLibrary.Objects.Player.Permission.Trusted)
|
||||||
|
clientDto.Meta.Add(new ProfileMeta()
|
||||||
|
{
|
||||||
|
Key = "Masked",
|
||||||
|
Value = client.Masked ? "Is" : "Is not",
|
||||||
|
Sensitive = false,
|
||||||
|
When = DateTime.MinValue
|
||||||
|
});
|
||||||
|
|
||||||
clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.Sensitive));
|
clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.Sensitive));
|
||||||
clientDto.Meta.AddRange(await Manager.GetPenaltyService()
|
clientDto.Meta.AddRange(Authorized ? penaltyMeta : penaltyMeta.Where(m => !m.Sensitive));
|
||||||
.ReadGetClientPenaltiesAsync(client.ClientId));
|
clientDto.Meta.AddRange(Authorized ? administeredPenaltiesMeta : penaltyMeta.Where(m => !m.Sensitive));
|
||||||
clientDto.Meta.AddRange(await Manager.GetPenaltyService()
|
|
||||||
.ReadGetClientPenaltiesAsync(client.ClientId, false));
|
|
||||||
clientDto.Meta = clientDto.Meta
|
clientDto.Meta = clientDto.Meta
|
||||||
.OrderByDescending(m => m.When)
|
.OrderByDescending(m => m.When)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
using System;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace WebfrontCore
|
namespace WebfrontCore
|
||||||
{
|
{
|
||||||
@ -11,16 +8,16 @@ namespace WebfrontCore
|
|||||||
{
|
{
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.Build();
|
||||||
|
|
||||||
var host = new WebHostBuilder()
|
var host = new WebHostBuilder()
|
||||||
.UseKestrel()
|
.UseKestrel()
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
.UseIISIntegration()
|
.UseIISIntegration()
|
||||||
.UseStartup<Startup>()
|
.UseStartup<Startup>()
|
||||||
#if !DEBUG
|
.UseUrls(config["Web:Address"])
|
||||||
.UseUrls("http://server.nbsclan.org:8080")
|
|
||||||
#else
|
|
||||||
.UseUrls("http://127.0.0.1:5000;http://192.168.88.254:5000")
|
|
||||||
#endif
|
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
host.Run();
|
host.Run();
|
||||||
|
@ -24,7 +24,7 @@ namespace WebfrontCore
|
|||||||
IW4MAdmin.Program.Start();
|
IW4MAdmin.Program.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IConfigurationRoot Configuration { get; }
|
public static IConfigurationRoot Configuration { get; private set; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
@ -8,16 +8,31 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="profile_info" class="text-center text-sm-left pr-3 pl-3">
|
<div id="profile_info" class="text-center text-sm-left pr-3 pl-3">
|
||||||
<div id="profile_name">
|
<div id="profile_name">
|
||||||
@{
|
<h1>
|
||||||
string displayAliasButton = Model.Aliases.Count > 0 ? "" : "display: none;";
|
<span class="client-name mr-4">
|
||||||
|
@Model.Name
|
||||||
|
@if (Model.Aliases.Count > 0 || ViewBag.Authorized)
|
||||||
|
{
|
||||||
|
<span id="profile_aliases_btn" class="oi oi-caret-bottom pl-2"></span>
|
||||||
}
|
}
|
||||||
<h1><span class="client-name mr-4">@Model.Name<span id="profile_aliases_btn" class="oi oi-caret-bottom pl-2 @displayAliasButton"></span></span></h1>
|
|
||||||
|
</span>
|
||||||
|
</h1>
|
||||||
<div id="profile_aliases" class="pr-0 pr-sm-4 pb-2 mb-2 text-muted">
|
<div id="profile_aliases" class="pr-0 pr-sm-4 pb-2 mb-2 text-muted">
|
||||||
@{
|
@{
|
||||||
foreach (string alias in Model.Aliases)
|
foreach (string alias in Model.Aliases)
|
||||||
{
|
{
|
||||||
@alias <br />
|
@alias <br />
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ViewBag.Authorized)
|
||||||
|
{
|
||||||
|
foreach (string ip in Model.IPs)
|
||||||
|
{
|
||||||
|
<a class="ip-locate-link" href="#" data-ip="@ip">@ip</a>
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -33,10 +48,10 @@
|
|||||||
<div id="profile_last_seen" class="text-muted">
|
<div id="profile_last_seen" class="text-muted">
|
||||||
Last seen <span class="text-primary">@Model.LastSeen</span> ago
|
Last seen <span class="text-primary">@Model.LastSeen</span> ago
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="profile_meta" class="text-center text-sm-right pt-2 mt-md-4 pt-md-3 mr-4 pr-4 mr-md-0 ml-4 pl-4 ml-md-0 pr-md-0 pl-md-0">
|
<div id="profile_meta" class="text-center text-sm-right pt-2 mt-md-4 pt-md-3 mr-4 pr-4 mr-md-0 ml-4 pl-4 ml-md-0 pr-md-0 pl-md-0">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row d-md-flex pt-2">
|
<div class="row d-md-flex pt-2">
|
||||||
|
@ -35,6 +35,24 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<div class="modal fade" id="mainModal" tabindex="-1" role="dialog" aria-labelledby="mainModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content bg-dark">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="mainModalLabel"></h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="container pt-0 pb-4 pl-4 pr-4">
|
<div class="container pt-0 pb-4 pl-4 pr-4">
|
||||||
@RenderBody()
|
@RenderBody()
|
||||||
<footer></footer>
|
<footer></footer>
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
|
||||||
</startup>
|
</startup>
|
||||||
<runtime>
|
<runtime>
|
||||||
|
<loadFromRemoteSources enabled="true"/>
|
||||||
<assemblyBinding>
|
<assemblyBinding>
|
||||||
<!-- <probing privatePath="lib"/>-->
|
<!-- <probing privatePath="lib"/>-->
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
|
@ -6,5 +6,8 @@
|
|||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "None"
|
"Microsoft": "None"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Web": {
|
||||||
|
"Address": "127.0.0.1:5000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,19 @@ $(document).ready(function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
get ip geolocation info into modal
|
||||||
|
*/
|
||||||
|
$('.ip-locate-link').click(function (e) {
|
||||||
|
$.getJSON("http://ip-api.com/json/" + $(this).data("ip"))
|
||||||
|
.done(function (response) {
|
||||||
|
$('.modal-title').text($(this).data("ip"));
|
||||||
|
$('.modal-body').text(JSON.stringify(response, null, 4));
|
||||||
|
$('#mainModal').modal();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function penaltyToName(penaltyName) {
|
function penaltyToName(penaltyName) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user