Add core model classes for auth, culture, images, and links
Introduced new models in EnvelopeGenerator.GeneratorAPI.Models: - Auth, ContactLink, Culture, Cultures, CustomImages, ErrorViewModel, Image, MainViewModel, and TFARegParams. These provide foundational structures for authentication, localization, error handling, image management, and contact links. All changes are new file additions.
This commit is contained in:
14
EnvelopeGenerator.GeneratorAPI/Models/Auth.cs
Normal file
14
EnvelopeGenerator.GeneratorAPI/Models/Auth.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public record Auth(string? AccessCode = null, string? SmsCode = null, string? AuthenticatorCode = null, bool UserSelectSMS = default)
|
||||||
|
{
|
||||||
|
public bool HasAccessCode => AccessCode is not null;
|
||||||
|
|
||||||
|
public bool HasSmsCode => SmsCode is not null;
|
||||||
|
|
||||||
|
public bool HasAuthenticatorCode => AuthenticatorCode is not null;
|
||||||
|
|
||||||
|
public bool HasMulti => new[] { HasAccessCode, HasSmsCode, HasAuthenticatorCode }.Count(state => state) > 1;
|
||||||
|
|
||||||
|
public bool HasNone => !(HasAccessCode || HasSmsCode || HasAuthenticatorCode);
|
||||||
|
}
|
||||||
60
EnvelopeGenerator.GeneratorAPI/Models/ContactLink.cs
Normal file
60
EnvelopeGenerator.GeneratorAPI/Models/ContactLink.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a hyperlink for contact purposes with various HTML attributes.
|
||||||
|
/// </summary>
|
||||||
|
public class ContactLink
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the label of the hyperlink.
|
||||||
|
/// </summary>
|
||||||
|
public string Label { get; init; } = "Contact";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the URL that the hyperlink points to.
|
||||||
|
/// </summary>
|
||||||
|
public string Href { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the target where the hyperlink should open.
|
||||||
|
/// Commonly used values are "_blank", "_self", "_parent", "_top".
|
||||||
|
/// </summary>
|
||||||
|
public string Target { get; set; } = "_blank";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the relationship of the linked URL as space-separated link types.
|
||||||
|
/// Examples include "nofollow", "noopener", "noreferrer".
|
||||||
|
/// </summary>
|
||||||
|
public string Rel { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the filename that should be downloaded when clicking the hyperlink.
|
||||||
|
/// This attribute will only have an effect if the href attribute is set.
|
||||||
|
/// </summary>
|
||||||
|
public string Download { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the language of the linked resource. Useful when linking to
|
||||||
|
/// content in another language.
|
||||||
|
/// </summary>
|
||||||
|
public string HrefLang { get; set; } = "en";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the MIME type of the linked URL. Helps browsers to handle
|
||||||
|
/// the type correctly when the link is clicked.
|
||||||
|
/// </summary>
|
||||||
|
public string Type { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets additional information about the hyperlink, typically viewed
|
||||||
|
/// as a tooltip when the mouse hovers over the link.
|
||||||
|
/// </summary>
|
||||||
|
public string Title { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets an identifier for the hyperlink, unique within the HTML document.
|
||||||
|
/// </summary>
|
||||||
|
public string Id { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
17
EnvelopeGenerator.GeneratorAPI/Models/Culture.cs
Normal file
17
EnvelopeGenerator.GeneratorAPI/Models/Culture.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Globalization;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class Culture
|
||||||
|
{
|
||||||
|
private string _language = string.Empty;
|
||||||
|
public string Language { get => _language;
|
||||||
|
init {
|
||||||
|
_language = value;
|
||||||
|
Info = new(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string FIClass { get; init; } = string.Empty;
|
||||||
|
|
||||||
|
public CultureInfo? Info { get; init; }
|
||||||
|
}
|
||||||
12
EnvelopeGenerator.GeneratorAPI/Models/Cultures.cs
Normal file
12
EnvelopeGenerator.GeneratorAPI/Models/Cultures.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class Cultures : List<Culture>
|
||||||
|
{
|
||||||
|
public IEnumerable<string> Languages => this.Select(c => c.Language);
|
||||||
|
|
||||||
|
public IEnumerable<string> FIClasses => this.Select(c => c.FIClass);
|
||||||
|
|
||||||
|
public Culture Default => this.First();
|
||||||
|
|
||||||
|
public Culture? this[string? language] => language is null ? null : this.Where(c => c.Language == language).FirstOrDefault();
|
||||||
|
}
|
||||||
6
EnvelopeGenerator.GeneratorAPI/Models/CustomImages.cs
Normal file
6
EnvelopeGenerator.GeneratorAPI/Models/CustomImages.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class CustomImages : Dictionary<string, Image>
|
||||||
|
{
|
||||||
|
public new Image this[string key] => TryGetValue(key, out var img) && img is not null ? img : new();
|
||||||
|
}
|
||||||
10
EnvelopeGenerator.GeneratorAPI/Models/ErrorViewModel.cs
Normal file
10
EnvelopeGenerator.GeneratorAPI/Models/ErrorViewModel.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class ErrorViewModel
|
||||||
|
{
|
||||||
|
public string Title { get; init; } = "404";
|
||||||
|
|
||||||
|
public string Subtitle { get; init; } = "Hmmm...";
|
||||||
|
|
||||||
|
public string Body { get; init; } = "It looks like one of the developers fell asleep";
|
||||||
|
}
|
||||||
10
EnvelopeGenerator.GeneratorAPI/Models/Image.cs
Normal file
10
EnvelopeGenerator.GeneratorAPI/Models/Image.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class Image
|
||||||
|
{
|
||||||
|
public string Src { get; init; } = string.Empty;
|
||||||
|
|
||||||
|
public Dictionary<string, string> Classes { get; init; } = new();
|
||||||
|
|
||||||
|
public string GetClassIn(string page) => Classes.TryGetValue(page, out var cls) && cls is not null ? cls : string.Empty;
|
||||||
|
}
|
||||||
6
EnvelopeGenerator.GeneratorAPI/Models/MainViewModel.cs
Normal file
6
EnvelopeGenerator.GeneratorAPI/Models/MainViewModel.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
public class MainViewModel
|
||||||
|
{
|
||||||
|
public string? Title { get; init; }
|
||||||
|
}
|
||||||
17
EnvelopeGenerator.GeneratorAPI/Models/TFARegParams.cs
Normal file
17
EnvelopeGenerator.GeneratorAPI/Models/TFARegParams.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Models;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the parameters for two-factor authentication (2FA) registration.
|
||||||
|
/// </summary>
|
||||||
|
public class TFARegParams
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum allowed time for completing the registration process.
|
||||||
|
/// </summary>
|
||||||
|
public TimeSpan TimeLimit { get; init; } = new(0, 30, 0);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The deadline for registration, calculated as the current time plus the <see cref="TimeLimit"/>.
|
||||||
|
/// </summary>
|
||||||
|
public DateTime Deadline => DateTime.Now.AddTicks(TimeLimit.Ticks);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user