using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Extensions; using Newtonsoft.Json; namespace EnvelopeGenerator.Application.Extensions { public static class DTOExtensions { public static bool IsTotpSecretExpired(this ReceiverReadDto dto, int minutesBeforeExpiration = 30) => dto.TotpExpiration < DateTime.Now.AddMinutes(minutesBeforeExpiration * -1); public static bool IsTotpSecretInvalid(this ReceiverReadDto dto, int minutesBeforeExpiration = 30) => dto.IsTotpSecretExpired(minutesBeforeExpiration) || dto.TotpSecretkey is null; public static bool IsTotpSecretValid(this ReceiverReadDto dto, int minutesBeforeExpiration = 30) => !dto.IsTotpSecretInvalid(minutesBeforeExpiration); public static bool IsTotpValid(this ReceiverReadDto dto, string totp) => dto.TotpSecretkey is null ? throw new ArgumentNullException(nameof(dto), $"TotpSecretkey of DTO cannot validate without TotpSecretkey. Dto: {JsonConvert.SerializeObject(dto)}") : totp.IsValidTotp(dto.TotpSecretkey); public static bool IsTotpInvalid(this ReceiverReadDto dto, string totp) => !dto.IsTotpValid(totp: totp); } }