using System.ComponentModel.DataAnnotations; namespace PlotLine.ViewModels; public sealed class RegisterViewModel { [Required(ErrorMessage = "Enter your email address.")] [EmailAddress(ErrorMessage = "Enter a valid email address.")] [StringLength(256, ErrorMessage = "Email must be 256 characters or fewer.")] public string Email { get; set; } = string.Empty; [Required(ErrorMessage = "Enter a display name.")] [StringLength(200, ErrorMessage = "Display name must be 200 characters or fewer.")] public string DisplayName { get; set; } = string.Empty; [Required(ErrorMessage = "Enter a password.")] [StringLength(200, MinimumLength = 12, ErrorMessage = "Password must be at least 12 characters.")] [DataType(DataType.Password)] public string Password { get; set; } = string.Empty; [Required(ErrorMessage = "Confirm your password.")] [DataType(DataType.Password)] [Compare(nameof(Password), ErrorMessage = "Passwords do not match.")] public string ConfirmPassword { get; set; } = string.Empty; } public sealed class LoginViewModel { [Required(ErrorMessage = "Enter your email address.")] [EmailAddress(ErrorMessage = "Enter a valid email address.")] [StringLength(256, ErrorMessage = "Email must be 256 characters or fewer.")] public string Email { get; set; } = string.Empty; [Required(ErrorMessage = "Enter your password.")] [DataType(DataType.Password)] public string Password { get; set; } = string.Empty; public bool RememberMe { get; set; } public string? ReturnUrl { get; set; } } public sealed class ForgotPasswordViewModel { [Required(ErrorMessage = "Enter your email address.")] [EmailAddress(ErrorMessage = "Enter a valid email address.")] [StringLength(256, ErrorMessage = "Email must be 256 characters or fewer.")] public string Email { get; set; } = string.Empty; } public sealed class ResetPasswordViewModel { [Required(ErrorMessage = "Enter your email address.")] [EmailAddress(ErrorMessage = "Enter a valid email address.")] [StringLength(256, ErrorMessage = "Email must be 256 characters or fewer.")] public string Email { get; set; } = string.Empty; [Required(ErrorMessage = "Password reset token is missing.")] public Guid Token { get; set; } [Required(ErrorMessage = "Enter a new password.")] [StringLength(200, MinimumLength = 12, ErrorMessage = "Password must be at least 12 characters.")] [DataType(DataType.Password)] public string Password { get; set; } = string.Empty; [Required(ErrorMessage = "Confirm your new password.")] [DataType(DataType.Password)] [Compare(nameof(Password), ErrorMessage = "Passwords do not match.")] public string ConfirmPassword { get; set; } = string.Empty; } public sealed class TwoFactorViewModel { [Required(ErrorMessage = "Enter your authentication code.")] [StringLength(20, ErrorMessage = "Authentication code is too long.")] public string Code { get; set; } = string.Empty; public string? ReturnUrl { get; set; } public bool RememberMachine { get; set; } public bool RememberMe { get; set; } } public sealed class ChangePasswordViewModel { [Required(ErrorMessage = "Enter your current password.")] [DataType(DataType.Password)] public string CurrentPassword { get; set; } = string.Empty; [Required(ErrorMessage = "Enter a new password.")] [StringLength(200, MinimumLength = 12, ErrorMessage = "Password must be at least 12 characters.")] [DataType(DataType.Password)] public string NewPassword { get; set; } = string.Empty; [Required(ErrorMessage = "Confirm your new password.")] [DataType(DataType.Password)] [Compare(nameof(NewPassword), ErrorMessage = "Passwords do not match.")] public string ConfirmPassword { get; set; } = string.Empty; }