using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using System.Configuration;
using System.IO;
using System.Web.Script.Serialization;
using BLL.Services.System;
using Model.Entities.Users;
using Model.Tools;
namespaceWeb.Controllers.Base
{
publicabstractclassBaseApiController : BaseController
{
protectedreadonly ConfigTools ConfigTools = ConfigTools.Get();
protected User CurrentUser { privateset; get; }
///<summary>/// Используется в том случае, /// если необходимо передать пользователя сервису или т.п./// В момент выполнения конструктора CurrentUser == null/// поэтому используется delegate////// Как альтернатива virtual OnUserInitialize, /// но в таком случае нельзя использовать readonly /// (т.к создание будет идти не в конструкторе) ///</summary>protected Func<User> CurrentUserFunc => () => CurrentUser;
protectedreadonly PermissionServices permissionServices;
protectedreadonly TokenServices TokenServices = new TokenServices();
///<summary>/// Http Post Json request///</summary>///<typeparam name="T"></typeparam>///<returns></returns>protected T GetJson<T>()
{
using (var stream = HttpContext.Request.InputStream)
{
using (StreamReader rd = new StreamReader(stream))
{
returnnew JavaScriptSerializer().
Deserialize<T>(rd.ReadToEnd());
}
}
}
protectedBaseApiController()
{
permissionServices = new PermissionServices(UOW);
}
protectedoverridevoidInitialize(RequestContext requestContext)
{
base.Initialize(requestContext);
var cookie = HttpContext.Request.Cookies;
if (cookie.AllKeys.Contains("AuthToken"))
{
var auth = cookie.Get("AuthToken");
if (auth.Value.Count() != 0)
{
TokenData data = null;
try
{
data = TokenServices.GetData(auth.Value);
}
catch { return; }
if (!data.IsValid)
return;
CurrentUser = UOW.Repo_User.All.
FirstOrDefault(e => e.ID == data.ID);
}
}
}
}
}