9ff7f39e8d
added localization as downloaded from the Master API interupted network communication no longer treated as unknown exception topstats prints the right message if no one qualifies angle adjustments move unflag to seperate command
96 lines
3.5 KiB
C#
96 lines
3.5 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Security.Claims;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
|
|
using SharedLibraryCore.Database;
|
|
using SharedLibraryCore.Database.Models;
|
|
using SharedLibraryCore.Interfaces;
|
|
using SharedLibraryCore.Objects;
|
|
|
|
namespace WebfrontCore.Controllers
|
|
{
|
|
public class BaseController : Controller
|
|
{
|
|
protected IManager Manager;
|
|
protected readonly DatabaseContext Context;
|
|
protected bool Authorized { get; private set; }
|
|
protected SharedLibraryCore.Localization.Index Localization { get; private set; }
|
|
protected EFClient Client { get; private set; }
|
|
private static byte[] LocalHost = { 127, 0, 0, 1 };
|
|
private static string SocialLink;
|
|
private static string SocialTitle;
|
|
|
|
public BaseController()
|
|
{
|
|
if (Manager == null)
|
|
Manager = Program.Manager;
|
|
|
|
if (Localization == null)
|
|
Localization = SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex;
|
|
|
|
if (Manager.GetApplicationSettings().Configuration().EnableSocialLink && SocialLink == null)
|
|
{
|
|
SocialLink = Manager.GetApplicationSettings().Configuration().SocialLinkAddress;
|
|
SocialTitle = Manager.GetApplicationSettings().Configuration().SocialLinkTitle;
|
|
}
|
|
}
|
|
|
|
public override void OnActionExecuting(ActionExecutingContext context)
|
|
{
|
|
Client = Client ?? new EFClient()
|
|
{
|
|
ClientId = -1,
|
|
Level = Player.Permission.User,
|
|
CurrentAlias = new EFAlias() { Name = "Web Console Guest" }
|
|
};
|
|
|
|
if (!HttpContext.Connection.RemoteIpAddress.GetAddressBytes().SequenceEqual(LocalHost))
|
|
{
|
|
try
|
|
{
|
|
Client.ClientId = Convert.ToInt32(base.User.Claims.First(c => c.Type == ClaimTypes.Sid).Value);
|
|
Client.Level = (Player.Permission)Enum.Parse(typeof(Player.Permission), User.Claims.First(c => c.Type == ClaimTypes.Role).Value);
|
|
Client.CurrentAlias = new EFAlias() { Name = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value };
|
|
var stillExists = Manager.GetPrivilegedClients()[Client.ClientId];
|
|
|
|
// this happens if their level has been updated
|
|
if (stillExists.Level != Client.Level)
|
|
{
|
|
Client.Level = stillExists.Level;
|
|
}
|
|
}
|
|
|
|
catch (InvalidOperationException)
|
|
{
|
|
|
|
}
|
|
|
|
catch (System.Collections.Generic.KeyNotFoundException)
|
|
{
|
|
// force the "banned" client to be signed out
|
|
HttpContext.SignOutAsync().Wait();
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
Client.ClientId = 1;
|
|
Client.Level = Player.Permission.Console;
|
|
Client.CurrentAlias = new EFAlias() { Name = "IW4MAdmin" };
|
|
}
|
|
|
|
Authorized = Client.ClientId >= 0;
|
|
ViewBag.Authorized = Authorized;
|
|
ViewBag.Url = Manager.GetApplicationSettings().Configuration().WebfrontBindUrl;
|
|
ViewBag.User = Client;
|
|
ViewBag.SocialLink = SocialLink ?? "";
|
|
ViewBag.SocialTitle = SocialTitle;
|
|
|
|
base.OnActionExecuting(context);
|
|
}
|
|
}
|
|
}
|