2023-08-29 18:02:30 +08:00
|
|
|
|
using System;
|
2023-09-02 00:58:20 +08:00
|
|
|
|
using System.Runtime.Serialization;
|
2023-09-13 17:31:22 +08:00
|
|
|
|
using System.Threading;
|
2023-09-12 18:11:47 +08:00
|
|
|
|
using MECF.Framework.Common.Account.Extends;
|
2023-08-29 18:02:30 +08:00
|
|
|
|
|
|
|
|
|
namespace Aitex.Core.Account;
|
|
|
|
|
|
2023-09-12 18:11:47 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 登录凭据。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// RT使用该对象维护用户登录信息,包括:登录激活状态维持、WCF远程调用权限验证。
|
|
|
|
|
/// </remarks>
|
2023-08-29 18:02:30 +08:00
|
|
|
|
[Serializable]
|
2023-09-02 00:58:20 +08:00
|
|
|
|
[DataContract]
|
2023-08-29 18:02:30 +08:00
|
|
|
|
public class Credential
|
|
|
|
|
{
|
|
|
|
|
#region Consturctors
|
|
|
|
|
|
2023-09-12 18:11:47 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 创建登录凭据的实例。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// 该构造函数用于WCF通讯,RT中创建该对象是请使用有参数的构造函数。
|
|
|
|
|
/// </remarks>
|
2023-09-02 00:58:20 +08:00
|
|
|
|
public Credential()
|
|
|
|
|
{
|
2023-09-13 17:31:22 +08:00
|
|
|
|
Token = Guid.Empty;
|
|
|
|
|
State = CredentialState.Requesting;
|
|
|
|
|
LoginTime = DateTime.MinValue;
|
|
|
|
|
LastAliveTime = DateTime.Now;
|
|
|
|
|
LoginRequestCancellationTokenSource = new CancellationTokenSource();
|
2023-09-02 00:58:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-12 18:11:47 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 创建登录凭据的实例。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="token">登录令牌。</param>
|
|
|
|
|
/// <param name="accountInfo">登录账户信息。</param>
|
2023-09-13 17:31:22 +08:00
|
|
|
|
public Credential(Guid token, AccountEx accountInfo) : this()
|
2023-08-29 18:02:30 +08:00
|
|
|
|
{
|
|
|
|
|
Token = token;
|
2023-09-12 18:11:47 +08:00
|
|
|
|
AccountInfo = accountInfo;
|
2023-08-29 18:02:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
2023-09-13 17:31:22 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 登录请求取消。
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal CancellationTokenSource LoginRequestCancellationTokenSource { get; }
|
2023-08-29 18:02:30 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2023-09-12 18:11:47 +08:00
|
|
|
|
/// 设置或返回当前凭据包含的令牌。
|
2023-08-29 18:02:30 +08:00
|
|
|
|
/// </summary>
|
2023-09-02 00:58:20 +08:00
|
|
|
|
[DataMember]
|
2023-09-13 17:31:22 +08:00
|
|
|
|
public Guid Token { get; set; }
|
2023-09-12 18:11:47 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回当前凭据状态
|
|
|
|
|
/// </summary>
|
|
|
|
|
[DataMember]
|
|
|
|
|
public CredentialState State { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回最后一次激活时间。
|
|
|
|
|
/// </summary>
|
|
|
|
|
[DataMember]
|
|
|
|
|
public DateTime LastAliveTime { get; set; }
|
2023-09-14 23:55:38 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回账户角色。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string RoleID { get; set; }
|
2023-08-29 18:02:30 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2023-09-12 18:11:47 +08:00
|
|
|
|
/// 设置或返回登录的账户信息。
|
2023-08-29 18:02:30 +08:00
|
|
|
|
/// </summary>
|
2023-09-02 00:58:20 +08:00
|
|
|
|
[DataMember]
|
2023-09-12 18:11:47 +08:00
|
|
|
|
public AccountEx AccountInfo { get; set; }
|
2023-09-14 23:55:38 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回当前凭据对应客户端信息。
|
|
|
|
|
/// </summary>
|
|
|
|
|
[DataMember]
|
|
|
|
|
public LoginClientInfo ClientInfo { get; set; }
|
2023-09-12 18:11:47 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回客户端IP地址。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string LoginIP { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回客户端Port。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int LoginPort { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回登录时间。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public DateTime LoginTime { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回登录结果描述。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string Description { get; set; }
|
2023-09-02 00:58:20 +08:00
|
|
|
|
|
2023-09-13 17:31:22 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回空凭据。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static Credential Empty => new Credential();
|
|
|
|
|
|
|
|
|
|
public static Credential ReadOnlyOne =>
|
|
|
|
|
new Credential(Guid.Empty, new AccountEx("", "Read-Only", "", "", "", "", null));
|
|
|
|
|
|
2023-09-02 00:58:20 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
2023-09-13 17:31:22 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查指定的凭据是否为空凭据。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="cred"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static bool IsEmpty(Credential cred)
|
|
|
|
|
{
|
|
|
|
|
return cred.Token == Guid.Empty;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-02 00:58:20 +08:00
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2023-09-12 18:11:47 +08:00
|
|
|
|
return $"{AccountInfo.LoginName} from {LoginIP}:{LoginPort}";
|
2023-09-02 00:58:20 +08:00
|
|
|
|
}
|
2023-08-29 18:02:30 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
2023-09-12 18:11:47 +08:00
|
|
|
|
|
2023-08-29 18:02:30 +08:00
|
|
|
|
}
|