mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 18:53:12 +00:00
44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
|
|
namespace Data.SeaHavenIndustries
|
|
{
|
|
/// <summary>
|
|
/// A single-use registration invite for one pending team member. Only hashes of
|
|
/// the invite token and of the email confirmation code are stored.
|
|
/// </summary>
|
|
public class TeamMemberInvite
|
|
{
|
|
public int Id { get; set; }
|
|
|
|
[Required]
|
|
[MaxLength(450)]
|
|
public string UserId { get; set; } = string.Empty;
|
|
|
|
[ForeignKey(nameof(UserId))]
|
|
public virtual ApplicationUser? User { get; set; }
|
|
|
|
/// <summary>Lowercase hex SHA-256 of the raw invite token.</summary>
|
|
[Required]
|
|
[MaxLength(64)]
|
|
public string TokenHash { get; set; } = string.Empty;
|
|
|
|
public DateTime CreatedAt { get; set; }
|
|
public DateTime ExpiresAt { get; set; }
|
|
public DateTime? UsedAt { get; set; }
|
|
public DateTime? RevokedAt { get; set; }
|
|
|
|
/// <summary>Lowercase hex SHA-256 of the salt followed by the confirmation code.</summary>
|
|
[MaxLength(64)]
|
|
public string? CodeHash { get; set; }
|
|
|
|
[MaxLength(32)]
|
|
public string? CodeSalt { get; set; }
|
|
|
|
public DateTime? CodeExpiresAt { get; set; }
|
|
public int CodeFailedAttempts { get; set; }
|
|
public DateTime? CodeSentAt { get; set; }
|
|
public int CodeSendCount { get; set; }
|
|
public DateTime? EmailConfirmedAt { get; set; }
|
|
}
|
|
}
|