pcut_uwp/PCUT/Http.Core/Contexts/UserContext.cs

85 lines
2.4 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 string AppVersion { 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;
}
}
public void SetAppVersion(string appVersion)
{
if (AppVersion == null)
{
AppVersion = appVersion;
}
}
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;
}
}
}