IW4M-Admin/WebfrontCore/Controllers/BaseController.cs

96 lines
3.5 KiB
C#
Raw Normal View History

using System;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication;
2018-03-06 02:22:19 -05:00
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
2018-04-08 02:44:42 -04:00
using SharedLibraryCore.Database;
using SharedLibraryCore.Database.Models;
using SharedLibraryCore.Interfaces;
2018-04-08 02:44:42 -04:00
using SharedLibraryCore.Objects;
2018-03-06 02:22:19 -05:00
namespace WebfrontCore.Controllers
{
public class BaseController : Controller
{
protected IManager Manager;
2018-04-08 02:44:42 -04:00
protected readonly DatabaseContext Context;
2018-03-06 02:22:19 -05:00
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;
2018-03-06 02:22:19 -05:00
public BaseController()
2018-03-06 02:22:19 -05:00
{
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;
2018-03-09 03:01:12 -05:00
ViewBag.Authorized = Authorized;
ViewBag.Url = Manager.GetApplicationSettings().Configuration().WebfrontBindUrl;
ViewBag.User = Client;
ViewBag.SocialLink = SocialLink ?? "";
ViewBag.SocialTitle = SocialTitle;
2018-03-06 02:22:19 -05:00
base.OnActionExecuting(context);
}
}
}