<refactor>

This commit is contained in:
2022-12-01 11:26:41 +08:00
parent 8b1265b832
commit 85944f23b4
20 changed files with 391 additions and 86 deletions

53
src/Pwd/Main.cs Normal file
View File

@ -0,0 +1,53 @@
using NSExt.Extensions;
using TextCopy;
namespace Dot.Pwd;
public sealed class Main : Tool<Option>
{
private readonly char[][] _charTable = {
"0123456789".ToCharArray() //
, "abcdefghijklmnopqrstuvwxyz".ToCharArray()
, "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
, "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~".ToCharArray()
};
public Main(Option opt) : base(opt) { }
public override void Run()
{
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);
ClipboardService.SetText(result);
Console.WriteLine(Strings.Copied, result);
}
}
}

21
src/Pwd/Option.cs Normal file
View File

@ -0,0 +1,21 @@
namespace Dot.Pwd;
[Verb("pwd", HelpText = nameof(Strings.RandomPasswordGenerator), ResourceType = typeof(Strings))]
public class Option : IOption
{
[Flags]
public enum GenerateTypes
{
Number = 1
, LowerCaseLetter = 2
, UpperCaseLetter = 4
, SpecialCharacter = 8
}
[Value(1, Required = true, HelpText = nameof(Strings.PwdLength), ResourceType = typeof(Strings))]
public int Length { get; set; }
[Value(0, Required = true, HelpText = nameof(Strings.PwdGenerateTypes), ResourceType = typeof(Strings))]
public GenerateTypes Type { get; set; }
}