refactor: ♻️ 2.0 (#13)

This commit is contained in:
2023-12-13 18:43:53 +08:00
committed by GitHub
parent 247e35484c
commit 19f3405a36
288 changed files with 24348 additions and 2141 deletions

View File

@ -0,0 +1,66 @@
// ReSharper disable ClassNeverInstantiated.Global
using NSExt.Extensions;
#if NET8_0_WINDOWS
using TextCopy;
#endif
namespace Dot.Pwd;
[Description(nameof(Ln.随机密码生成器))]
[Localization(typeof(Ln))]
internal sealed class Main : ToolBase<Option>
{
private readonly char[][] _charTable = {
"0123456789".ToCharArray() //
, "abcdefghijklmnopqrstuvwxyz".ToCharArray()
, "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
, "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~".ToCharArray()
};
protected override Task CoreAsync()
{
unsafe {
var pSource = stackalloc char[_charTable.Sum(x => x.Length)];
var pDest = stackalloc char[Opt.Length];
var sourceLen = 0;
if (Opt.Type.HasFlag(Option.GenerateTypes.Number)) {
foreach (var c in _charTable[0]) {
*(pSource + sourceLen++) = c;
}
}
if (Opt.Type.HasFlag(Option.GenerateTypes.LowerCaseLetter)) {
foreach (var c in _charTable[1]) {
*(pSource + sourceLen++) = c;
}
}
if (Opt.Type.HasFlag(Option.GenerateTypes.UpperCaseLetter)) {
foreach (var c in _charTable[2]) {
*(pSource + sourceLen++) = c;
}
}
if (Opt.Type.HasFlag(Option.GenerateTypes.SpecialCharacter)) {
foreach (var c in _charTable[3]) {
*(pSource + sourceLen++) = c;
}
}
var randScope = new[] { 0, sourceLen };
for (var i = 0; i != Opt.Length; ++i) {
*(pDest + i) = *(pSource + randScope.Rand());
}
var result = new string(pDest, 0, Opt.Length);
Console.WriteLine($"{Ln.已复制到剪贴板}: {result}");
#if NET8_0_WINDOWS
ClipboardService.SetText(result);
#endif
}
return Task.CompletedTask;
}
}

View File

@ -0,0 +1,27 @@
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable UnusedAutoPropertyAccessor.Global
namespace Dot.Pwd;
internal sealed class Option : OptionBase
{
[Flags]
public enum GenerateTypes
{
None = 0
, Number = 1
, LowerCaseLetter = 1 << 1
, UpperCaseLetter = 1 << 2
, SpecialCharacter = 1 << 3
}
[CommandArgument(1, "<PASSWORD LENGTH>")]
[Description(nameof(Ln.密码长度))]
[Localization(typeof(Ln))]
public int Length { get; set; }
[CommandArgument(0, "<GENERATE TYPE>")]
[Description(nameof(Ln.密码创建类型))]
[Localization(typeof(Ln))]
public GenerateTypes Type { get; set; }
}