mattercontrol/original/MatterControlLib/Utilities/AuthenticationData.cs

150 lines
4 KiB
C#
Raw Normal View History

2019-05-28 14:24:42 -07:00
using System.IO;
using System.Text.RegularExpressions;
2019-05-28 14:24:42 -07:00
using MatterHackers.Agg;
using MatterHackers.Localizations;
using Newtonsoft.Json;
namespace MatterHackers.MatterControl
{
public class AuthenticationData
{
public RootedObjectEventHandler AuthSessionChanged = new RootedObjectEventHandler();
2019-05-28 14:24:42 -07:00
private static int failedRequestCount = int.MaxValue;
public bool IsConnected
{
get
{
2019-05-28 14:24:42 -07:00
if (failedRequestCount > 5)
{
return false;
}
return true;
}
}
2017-05-19 14:39:57 -07:00
/// <summary>
/// Immediately push application into offline mode
/// </summary>
public void SetOffline()
{
failedRequestCount = 6;
}
2017-01-03 13:05:57 -08:00
public void WebRequestFailed()
{
2017-01-03 13:05:57 -08:00
failedRequestCount++;
}
public void WebRequestSucceeded()
{
failedRequestCount = 0;
}
public static AuthenticationData Instance { get; } = new AuthenticationData();
public AuthenticationData()
{
activeSessionKey = ApplicationSettings.Instance.get($"{ApplicationController.EnvironmentName}ActiveSessionKey");
activeSessionUsername = ApplicationSettings.Instance.get($"{ApplicationController.EnvironmentName}ActiveSessionUsername");
activeSessionEmail = ApplicationSettings.Instance.get($"{ApplicationController.EnvironmentName}ActiveSessionEmail");
lastSessionUsername = ApplicationSettings.Instance.get($"{ApplicationController.EnvironmentName}LastSessionUsername");
}
public void SessionRefresh()
{
2019-05-28 14:24:42 -07:00
// Called after completing a purchase (for example)
AuthSessionChanged.CallEvents(null, null);
}
public void ClearActiveSession()
{
this.ActiveSessionKey = null;
this.ActiveSessionUsername = null;
this.ActiveSessionEmail = null;
this.ActiveClientToken = null;
ApplicationController.Instance.ChangeCloudSyncStatus(userAuthenticated: false, reason: "Session Cleared".Localize());
AuthSessionChanged.CallEvents(null, null);
}
public void SetActiveSession(string userName, string userEmail, string sessionKey, string clientToken)
{
this.ActiveSessionKey = sessionKey;
this.ActiveSessionUsername = userName;
this.ActiveSessionEmail = userEmail;
this.ActiveClientToken = clientToken;
ApplicationController.Instance.ChangeCloudSyncStatus(userAuthenticated: true);
AuthSessionChanged.CallEvents(null, null);
}
public bool ClientAuthenticatedSessionValid
{
get
{
return !string.IsNullOrEmpty(this.ActiveSessionKey)
&& UserSettings.Instance.get(UserSettingsKey.CredentialsInvalid) != "true";
}
}
private string activeSessionKey;
2019-05-28 14:24:42 -07:00
public string ActiveSessionKey
{
2019-05-28 14:24:42 -07:00
get => activeSessionKey;
private set
{
activeSessionKey = value;
ApplicationSettings.Instance.set($"{ApplicationController.EnvironmentName}ActiveSessionKey", value);
}
}
private string activeSessionUsername;
2019-05-28 14:24:42 -07:00
public string ActiveSessionUsername
{
2019-05-28 14:24:42 -07:00
// Only return the ActiveSessionUserName if the ActiveSessionKey field is not empty
get => string.IsNullOrEmpty(ActiveSessionKey) ? null : activeSessionUsername;
private set
{
activeSessionUsername = value;
ApplicationSettings.Instance.set($"{ApplicationController.EnvironmentName}ActiveSessionUsername", value);
}
}
private string activeSessionEmail;
2019-05-28 14:24:42 -07:00
public string ActiveSessionEmail
{
2019-05-28 14:24:42 -07:00
get => activeSessionEmail;
private set
{
activeSessionEmail = value;
ApplicationSettings.Instance.set($"{ApplicationController.EnvironmentName}ActiveSessionEmail", value);
}
}
public string ActiveClientToken
{
2019-05-28 14:24:42 -07:00
get => ApplicationSettings.Instance.get($"{ApplicationController.EnvironmentName}ActiveClientToken");
private set => ApplicationSettings.Instance.set($"{ApplicationController.EnvironmentName}ActiveClientToken", value);
}
private string lastSessionUsername;
2019-05-28 14:24:42 -07:00
public string LastSessionUsername
{
2019-05-28 14:24:42 -07:00
get => lastSessionUsername;
set
{
lastSessionUsername = value;
ApplicationSettings.Instance.set($"{ApplicationController.EnvironmentName}LastSessionUsername", value);
}
}
[JsonIgnore]
2019-05-28 15:22:55 -07:00
public string FileSystemSafeUserName => ApplicationController.Instance.SanitizeFileName(this.ActiveSessionUsername);
}
}