using Microsoft.AspNetCore.Http; using Newtonsoft.Json; namespace BuddyFinance.Admin { public static class SessionExtensions { public static void Set(this ISession session, string key, T value) { session.SetString(key, JsonConvert.SerializeObject(value)); } public static T Get(this ISession session, string key) { var value = session.GetString(key); return value == null ? default(T) : JsonConvert.DeserializeObject(value); } } public class SessionManager { private const string SESSION_KEY = "BuddyFinance"; /// /// Currently logged-in user /// public SystemUser CurrentUser { get; set; } public static IHttpContextAccessor _httpContextAccessor; public SessionManager() { } public SessionManager(IHttpContextAccessor httpContextAccessor) { //CurrentUser = new SystemUser(); _httpContextAccessor = httpContextAccessor; } public static SessionManager Current { get { if (_httpContextAccessor == null) return null; //if (_httpContextAccessor.HttpContext.Session.Get(SESSION_KEY) == null) //{ // _httpContextAccessor.HttpContext.Session.Set(SESSION_KEY, new SessionManager()); //} return _httpContextAccessor.HttpContext.Session.Get(SESSION_KEY); } } public static void StartSession(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor.HttpContext.Session.Set(SESSION_KEY, new SessionManager(httpContextAccessor)); } public static void StartSession(IHttpContextAccessor httpContextAccessor, SystemUser systemUser) { var session = new SessionManager(httpContextAccessor) { CurrentUser = systemUser }; _httpContextAccessor.HttpContext.Session.Set(SESSION_KEY, session); } public static void ClearSession() { _httpContextAccessor?.HttpContext.Session.Set(SESSION_KEY, null); } } }