using Microsoft.AspNetCore.Http;
using System;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using YiSha.Util;
using YiSha.Util.Extension;
using YiSha.Cache.Factory;
namespace YiSha.Web.Code
{
public class Operator
{
public static Operator Instance
{
get { return new Operator(); }
}
private string LoginProvider = GlobalContext.Configuration.GetSection("SystemConfig:LoginProvider").Value;
private string TokenName = "UserToken"; //cookie name or session name
public async Task AddCurrent(string token)
{
switch (LoginProvider)
{
case "Cookie":
new CookieHelper().WriteCookie(TokenName, token);
break;
case "Session":
new SessionHelper().WriteSession(TokenName, token);
break;
case "WebApi":
OperatorInfo user = await new DataRepository().GetUserByToken(token);
if (user != null)
{
CacheFactory.Cache.SetCache(token, user);
}
break;
default:
throw new Exception("未找到LoginProvider配置");
}
}
///
/// Api接口需要传入apiToken
///
///
public void RemoveCurrent(string apiToken = "")
{
switch (LoginProvider)
{
case "Cookie":
new CookieHelper().RemoveCookie(TokenName);
break;
case "Session":
new SessionHelper().RemoveSession(TokenName);
break;
case "WebApi":
CacheFactory.Cache.RemoveCache(apiToken);
break;
default:
throw new Exception("未找到LoginProvider配置");
}
}
///
/// Api接口需要传入apiToken
///
///
///
public async Task Current(string apiToken = "")
{
IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService();
OperatorInfo user = null;
string token = string.Empty;
switch (LoginProvider)
{
case "Cookie":
if (hca.HttpContext != null)
{
token = new CookieHelper().GetCookie(TokenName);
}
break;
case "Session":
if (hca.HttpContext != null)
{
token = new SessionHelper().GetSession(TokenName);
}
break;
case "WebApi":
token = apiToken;
break;
}
if (string.IsNullOrEmpty(token))
{
return user;
}
token = token.Trim('"');
user = CacheFactory.Cache.GetCache(token);
if (user == null)
{
user = await new DataRepository().GetUserByToken(token);
if (user != null)
{
CacheFactory.Cache.SetCache(token, user);
}
}
return user;
}
}
}