76 lines
2.1 KiB
C#
76 lines
2.1 KiB
C#
|
using Microsoft.IdentityModel.JsonWebTokens;
|
|||
|
using PCUT.Entities;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace Http.Core.Contexts
|
|||
|
{
|
|||
|
public class UserContext : IDisposable
|
|||
|
{
|
|||
|
private UserContext() { }
|
|||
|
private static readonly object _instanceLock = new object();
|
|||
|
private static UserContext _instance;
|
|||
|
public static UserContext Instance
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_instance == null)
|
|||
|
{
|
|||
|
lock (_instanceLock)
|
|||
|
{
|
|||
|
if (_instance == null)
|
|||
|
_instance = new UserContext();
|
|||
|
}
|
|||
|
}
|
|||
|
return _instance;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public UserProfile Profile { get; private set; }
|
|||
|
public string AccessToken { get; private set; }
|
|||
|
public string RefreshToken { get; private set; }
|
|||
|
public string DeviceId { get; private set; }
|
|||
|
public DateTime? ExpiredTime { get; private set; }
|
|||
|
|
|||
|
public bool IsPermittedEdit => Profile.Role == "admin" || (Profile.IsPermittedEdit ?? false);
|
|||
|
|
|||
|
public void SetDeviceId(string deviceId)
|
|||
|
{
|
|||
|
if (DeviceId == null)
|
|||
|
{
|
|||
|
DeviceId = deviceId;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private readonly object _updateLock = new object();
|
|||
|
internal void SetValue(string accessToken, string refreshToken, string userName = null)
|
|||
|
{
|
|||
|
lock(_updateLock)
|
|||
|
{
|
|||
|
AccessToken = accessToken;
|
|||
|
RefreshToken = refreshToken;
|
|||
|
try
|
|||
|
{
|
|||
|
var token = new JsonWebToken(AccessToken);
|
|||
|
ExpiredTime = token.ValidTo != DateTime.MinValue ? token.ValidTo : (DateTime?)null;
|
|||
|
}
|
|||
|
catch { }
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
internal void SetProfile(UserProfile profile)
|
|||
|
{
|
|||
|
Profile = profile;
|
|||
|
}
|
|||
|
|
|||
|
public void Dispose()
|
|||
|
{
|
|||
|
AccessToken = null;
|
|||
|
RefreshToken = null;
|
|||
|
DeviceId = null;
|
|||
|
ExpiredTime = null;
|
|||
|
Profile = null;
|
|||
|
_instance = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|