diff --git a/DigitalData.Core.Security/Config/StringExtensions.cs b/DigitalData.Core.Security/Config/StringExtensions.cs deleted file mode 100644 index 111dfbb..0000000 --- a/DigitalData.Core.Security/Config/StringExtensions.cs +++ /dev/null @@ -1,83 +0,0 @@ -namespace DigitalData.Core.Security.Config -{ - internal static class StringExtensions - { - public static string ToBase64String(this byte[] bytes) => Convert.ToBase64String(bytes); - - public static byte[] Base64ToByte(this string base64String) => Convert.FromBase64String(base64String); - - public static byte[] ToBytes(this string str) => System.Text.Encoding.UTF8.GetBytes(str); - - public static string BytesToString(this byte[] bytes) => System.Text.Encoding.UTF8.GetString(bytes); - - /// - /// Converts a to a formatted string based on the specified format string. - ///
- /// - If the format contains the symbol “//”, the method divides the numeric value obtained from the left side of the format - /// by one minus the numeric value obtained from the right side of the format string and adds one. For instance: - ///
- /// - If the date is 02.03.2024 and the format is "MM//2", it extracts the month (02), subtracts one (3), divides it by 2, - /// rounds down the outgoing number (1), adds one to the number (resulting in 2). - ///
- /// - If the format does not contain "//", the method uses the default format. - ///
- ///
- /// The value to be formatted. - /// The format string that dictates the formatting of the date. If the format includes the "//" symbol, - /// it splits the string at "//" and divides the left-side value by the right-side value. The format string can include standard - /// format patterns. - /// A string representation of the formatted date, or the result of the division operation if "//" is present in the format. - /// Thrown if the format string is invalid, such as having an incorrect number of parts after "//". - /// Thrown if the right side of the "//" contains a zero, resulting in division by zero. - /// Thrown if either the left-side or right-side value of "//" cannot be parsed as an integer. - public static string ToTag(this DateTime date, string format) - { - if (format is not null && format.Contains("//")) - { - var subStrings = format.Split("//"); - - if (subStrings.Length != 2) - throw new ArgumentException($"Date tag format {format} is invalid. It must contain exactly one '//' separator.", nameof(format)); - - var formattedLeft = date.ToString(subStrings[0]); - - if (!int.TryParse(formattedLeft, out var dateValue)) - throw new FormatException($"The left-side value ({formattedLeft}) of the format could not be parsed to an integer."); - - if (!int.TryParse(subStrings[1], out var divisor)) - throw new FormatException($"The right-side value ({divisor}) of the format could not be parsed to an integer."); - - if (divisor == 0) - throw new DivideByZeroException($"Date tag format {format} includes division by zero, which is not allowed."); - - var result = (dateValue - 1) / divisor + 1; - return result.ToString(); - } - - return date.ToString(format); - } - - /// - /// Converts a to a formatted string based on the specified format string. - ///
- /// - If the format contains the symbol “//”, the method divides the numeric value obtained from the left side of the format - /// by one minus the numeric value obtained from the right side of the format string and adds one. For instance: - ///
- /// - If the date is 02.03.2024 and the format is "MM//2", it extracts the month (02), subtracts one (3), divides it by 2, - /// rounds down the outgoing number (1), adds one to the number (resulting in 2). - ///
- /// - If the format does not contain "//", the method uses the default format. - ///
- /// This method provides a way to format the date based on typical or customized rules, including mathematical operations like division. - ///
- /// The value to be formatted. It will convert to DateTime to use the method shared with DateTime. - /// The format string that dictates the formatting of the date. If the format includes the "//" symbol, - /// it splits the string at "//" and divides the left-side value by the right-side value. The format string can include standard - /// format patterns. - /// A string representation of the formatted date, or the result of the division operation if "//" is present in the format. - /// Thrown if the format string is invalid, such as having an incorrect number of parts after "//". - /// Thrown if the right side of the "//" contains a zero, resulting in division by zero. - /// Thrown if either the left-side or right-side value of "//" cannot be parsed as an integer. - public static string ToTag(this DateOnly date, string format) => date.ToDateTime(new()).ToTag(format); - } -} \ No newline at end of file diff --git a/DigitalData.Core.Security/Extension.cs b/DigitalData.Core.Security/Extension.cs index a2ac9c5..cf909f1 100644 --- a/DigitalData.Core.Security/Extension.cs +++ b/DigitalData.Core.Security/Extension.cs @@ -4,8 +4,86 @@ using Microsoft.IdentityModel.Tokens; namespace DigitalData.Core.Security { - public static class Extension + internal static class Extension { + internal static string ToBase64String(this byte[] bytes) => Convert.ToBase64String(bytes); + + internal static byte[] Base64ToByte(this string base64String) => Convert.FromBase64String(base64String); + + internal static byte[] ToBytes(this string str) => System.Text.Encoding.UTF8.GetBytes(str); + + internal static string BytesToString(this byte[] bytes) => System.Text.Encoding.UTF8.GetString(bytes); + + /// + /// Converts a to a formatted string based on the specified format string. + ///
+ /// - If the format contains the symbol “//”, the method divides the numeric value obtained from the left side of the format + /// by one minus the numeric value obtained from the right side of the format string and adds one. For instance: + ///
+ /// - If the date is 02.03.2024 and the format is "MM//2", it extracts the month (02), subtracts one (3), divides it by 2, + /// rounds down the outgoing number (1), adds one to the number (resulting in 2). + ///
+ /// - If the format does not contain "//", the method uses the default format. + ///
+ ///
+ /// The value to be formatted. + /// The format string that dictates the formatting of the date. If the format includes the "//" symbol, + /// it splits the string at "//" and divides the left-side value by the right-side value. The format string can include standard + /// format patterns. + /// A string representation of the formatted date, or the result of the division operation if "//" is present in the format. + /// Thrown if the format string is invalid, such as having an incorrect number of parts after "//". + /// Thrown if the right side of the "//" contains a zero, resulting in division by zero. + /// Thrown if either the left-side or right-side value of "//" cannot be parsed as an integer. + internal static string ToTag(this DateTime date, string format) + { + if (format is not null && format.Contains("//")) + { + var subStrings = format.Split("//"); + + if (subStrings.Length != 2) + throw new ArgumentException($"Date tag format {format} is invalid. It must contain exactly one '//' separator.", nameof(format)); + + var formattedLeft = date.ToString(subStrings[0]); + + if (!int.TryParse(formattedLeft, out var dateValue)) + throw new FormatException($"The left-side value ({formattedLeft}) of the format could not be parsed to an integer."); + + if (!int.TryParse(subStrings[1], out var divisor)) + throw new FormatException($"The right-side value ({divisor}) of the format could not be parsed to an integer."); + + if (divisor == 0) + throw new DivideByZeroException($"Date tag format {format} includes division by zero, which is not allowed."); + + var result = (dateValue - 1) / divisor + 1; + return result.ToString(); + } + + return date.ToString(format); + } + + /// + /// Converts a to a formatted string based on the specified format string. + ///
+ /// - If the format contains the symbol “//”, the method divides the numeric value obtained from the left side of the format + /// by one minus the numeric value obtained from the right side of the format string and adds one. For instance: + ///
+ /// - If the date is 02.03.2024 and the format is "MM//2", it extracts the month (02), subtracts one (3), divides it by 2, + /// rounds down the outgoing number (1), adds one to the number (resulting in 2). + ///
+ /// - If the format does not contain "//", the method uses the default format. + ///
+ /// This method provides a way to format the date based on typical or customized rules, including mathematical operations like division. + ///
+ /// The value to be formatted. It will convert to DateTime to use the method shared with DateTime. + /// The format string that dictates the formatting of the date. If the format includes the "//" symbol, + /// it splits the string at "//" and divides the left-side value by the right-side value. The format string can include standard + /// format patterns. + /// A string representation of the formatted date, or the result of the division operation if "//" is present in the format. + /// Thrown if the format string is invalid, such as having an incorrect number of parts after "//". + /// Thrown if the right side of the "//" contains a zero, resulting in division by zero. + /// Thrown if either the left-side or right-side value of "//" cannot be parsed as an integer. + internal static string ToTag(this DateOnly date, string format) => date.ToDateTime(new()).ToTag(format); + /// /// Maps a to a . /// @@ -13,7 +91,7 @@ namespace DigitalData.Core.Security /// The instance to be mapped. /// A instance populated with the mapped values. /// Thrown if or is null. - public static SecurityTokenDescriptor Map(this IMapper mapper, TokenDescription description) + internal static SecurityTokenDescriptor Map(this IMapper mapper, TokenDescription description) => mapper.Map(description, new SecurityTokenDescriptor()); } } \ No newline at end of file