76 lines
1.7 KiB
C#
76 lines
1.7 KiB
C#
using System.ComponentModel.DataAnnotations;
|
||
|
||
namespace AmtScanner.Api.Models;
|
||
|
||
/// <summary>
|
||
/// 远程访问临时 Token
|
||
/// </summary>
|
||
public class RemoteAccessToken
|
||
{
|
||
[Key]
|
||
public long Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 唯一 Token 字符串
|
||
/// </summary>
|
||
[Required]
|
||
[MaxLength(64)]
|
||
public string Token { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 关联的设备 ID
|
||
/// </summary>
|
||
public long DeviceId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 关联的设备
|
||
/// </summary>
|
||
public AmtDevice? Device { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建时间
|
||
/// </summary>
|
||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||
|
||
/// <summary>
|
||
/// 过期时间
|
||
/// </summary>
|
||
public DateTime ExpiresAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否已使用(一次性 Token)
|
||
/// </summary>
|
||
public bool IsUsed { get; set; } = false;
|
||
|
||
/// <summary>
|
||
/// 使用时间
|
||
/// </summary>
|
||
public DateTime? UsedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最大使用次数(0 表示无限制)
|
||
/// </summary>
|
||
public int MaxUseCount { get; set; } = 1;
|
||
|
||
/// <summary>
|
||
/// 已使用次数
|
||
/// </summary>
|
||
public int UseCount { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 创建者备注
|
||
/// </summary>
|
||
[MaxLength(500)]
|
||
public string? Note { get; set; }
|
||
|
||
/// <summary>
|
||
/// 检查 Token 是否有效
|
||
/// </summary>
|
||
public bool IsValid()
|
||
{
|
||
if (DateTime.UtcNow > ExpiresAt) return false;
|
||
if (MaxUseCount > 0 && UseCount >= MaxUseCount) return false;
|
||
return true;
|
||
}
|
||
}
|