mirror of
https://github.com/nsnail/dot.git
synced 2025-06-19 22:08:16 +08:00
<refactor>
This commit is contained in:
53
src/Pwd/Main.cs
Normal file
53
src/Pwd/Main.cs
Normal 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
21
src/Pwd/Option.cs
Normal 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; }
|
||||
}
|
Reference in New Issue
Block a user