using System; using System.Threading; namespace ln.application { public class ApplicationContext { static ThreadLocal currentApplicationContext = new ThreadLocal(); public static void SetCurrentContext(ApplicationContext applicationContext) => currentApplicationContext.Value = applicationContext; public static void ClearCurrentContext() => currentApplicationContext.Value = null; public Guid ContextID { get; } public DateTime Created { get; } public DateTime LastAccess { get; protected set; } public TimeSpan Age => LastAccess - Created; public TimeSpan Untouched => DateTime.Now - LastAccess; public Application Application { get; } public AuthenticatedUser CurrentUser { get; protected set; } public ApplicationContext(Application application) { ContextID = Guid.NewGuid(); Created = DateTime.Now; LastAccess = Created; Application = application; CurrentUser = AuthenticatedUser.Anonymous; } protected void UpdateLastAccess() { LastAccess = DateTime.Now; } public virtual bool AuthenticateUser(string username,object prove) { AuthenticatedUser authenticatedUser = Application.AuthenticateUser(username, prove); if (authenticatedUser != null) { CurrentUser = authenticatedUser; return true; } else { CurrentUser = AuthenticatedUser.Anonymous; return false; } } public virtual void DeauthenticateUser() { CurrentUser = AuthenticatedUser.Anonymous; } } }